Icinga

7.17. Wiederkehrende Ausfallzeiten

7.17.1. Ausfallzeiten definieren
7.17.2. Variable Daten
7.17.3. Lokale Feiertage
7.17.4. Eingaben von Ausfallzeiten
7.17.5. Planen von Ausfallzeiten
7.17.6. Konvertieren von Ausfallzeitdefinitionen
7.17.7. Dateien

Viele Leute haben regelmäßige Ausfallzeiten zu verschiedenen Zeiten und es wäre eine mühselige Arbeit, sie immer wieder manuell einzuplanen. Bisher gibt es kein offizielles Format, um solche Planungen zu definieren. Das bedeutet, dass diese Definitionen in einer eigenen Datei gespeichert werden müssen, die nicht in die anderen Objektdefinitionen eingebunden werden darf. Ein cronjob ruft ein Skript auf, dass diese Definitionen liest, bereits existierende Ausfallzeiten berücksichtigt und neue Ausfallzeiten plant, falls notwendig.

7.17.1. Ausfallzeiten definieren

Das Skript nutzt ein neues Format für diese Ausfallzeiten, das auf existierenden Definitionen basiert, die aus der Statusdatei und den Zeitfenster-Definitionen stammen:

 define downtime {
    host_name           some host 
    hostgroups          some hostgroup
    servicegroups       some servicegroup
    service_description some service
    author              some author
    comment             some comment
    duration            30
    downtime_period     2011-10-02 - 2011-10-10 10:00-12:00
    fixed               0
    propagate           1
    register            0
}

Anmerkungen zu den obigen Definitionen:

7.17.2. Variable Daten

Die obigen Definitionen funktionieren für die meisten Daten, aber es gibt einige, die auf dem Osterfest basieren, das jedes Jahr an einem anderen Tag ist. Wir haben versucht, diesen Engpass zu beseitigen, indem wir diese Daten berechnen und ihnen Namen geben, die Sie benutzen können. Die Namen sind unabhängig von Groß- und Kleinschreibung. In Klammern finden Sie deutsche Bezeichnungen, die Sie ebenfalls benutzen können:

Variablenname Offset / Datum
Twelfth_day (Heilige_drei_Koenige) 6. Januar
Labour_day (Tag_der_Arbeit) 1. Mai
Carnival_monday (Rosenmontag) -48
Mardi_gras (Faschingsdienstag) -47
Ash_wednesday (Aschermittwoch) -46
Maundy_thursday (Gruendonnerstag) -3
Good_friday (Karfreitag) -2
Easter_sunday (Ostersonntag) 0
Easter_monday (Ostermontag) 1
Ascension_day (Chr_Himmelfahrt) +39
Whit_sunday (Pfingstsonntag) +49
Whit_monday (Pfingstmontag) +50
Trinity (Trinitatis) +56
Corpus_christi (Fronleichnam) +70
Assumption_day (Maria_Himmelfahrt) 8. August
Penance_day (Buss_und_Bettag) Mittwoch vor dem 23. Nov.
Christmas_day (Weihnachtstag_1) 25. Dezember
Boxing_day (Weihnachtstag_2) 26. Dezember, 26th

Auf diese Weise können Sie eine Ausfallzeit für Rosenmontag wie folgt definieren:

 define downtime {
    ...
    comment            Cheer up, lads
    downtime_period    Rosenmontag 09:00-17:00
 }

7.17.3. Lokale Feiertage

Beim Blick auf die Kalender verschiedener Länder gibt es eine Reihe von Feiertagen, die nur in einem bestimmten Land gelten. Unglücklicherweise sind einige dieser Daten an einem Wochentag einer Woche in einem Monat. Sie können diese Daten bereits durch Angaben wie "monday 3 february" oder "monday -1 may" definieren, aber vielleicht möchten Sie auch hier Variablennamen benutzen. Durch Definition der Namen und der zugehörigen Berechnung in einer eigenen Datei können Sie das tun. Als Standard wird im Verzeichnis /usr/local/icinga/etc nach holiday.cfg gesucht. Name und Standort können über die Option "-l" eingestellt werden.

Wir haben nur drei Daten ausgewählt, um Ihnen die Vorgehensweise zu zeigen:

# example of local holiday definitions
# please don't use local characters
# variable names must not contain spaces
#
Presidents_day        day_in_week_of_month(2,1,3)
Spring_Bank_Holiday   day_in_week_of_month(5,1,-1)
Pentecote             date_easter(49)

Es gibt zwei "Funktionen", mit denen flexible Daten definiert werden können:

Jetzt können Sie eine Ausfallzeit wie folgt definieren:

 define downtime {
    ...
    comment            Das Weibsvolk ist unterwegs
    downtime_period    Weiberfastnacht  09:00-17:00
 }

Bitte beachten Sie, dass Sie den Standort der Datei über die Option "-l" angeben müssen.

7.17.4. Eingaben von Ausfallzeiten

Bisher gibt es keine Möglichkeit, die Definitionen über den Browser einzugeben, so dass Sie Ihren bevorzugten Editor benutzen müssen, um die Ausfallzeiten einzugeben. Sorry.

7.17.5. Planen von Ausfallzeiten

Sobald Sie eine Datei angelegt haben, die die Definitionen von Ausfallzeiten enthält, möchten Sie sicherlich, dass die Ausfallzeiten automatisch geplant werden. Dies kann über das Perl-Skript "sched_down.pl" erfolgen, das über die crontab aufgerufen wird. Das Skript selbst benötigt das Perl-Modul "Date::Calc".

Der einfachste Weg ist, "/Pfad/zu/sched_down.pl" aufzurufen. Wenn Sie die Option "-h" hinzufügen, erhalten Sie einige Informationen:

   -c | --config=s     Icinga main config
                       default: /usr/local/icinga/etc/icinga.cfg
   -s | --schedule=s   schedule definitions
                       default: /usr/local/icinga/etc/downtime.cfg
   -l | --local=s      local holiday definitions
                       default: /usr/local/icinga/etc/holiday.cfg
   -m | --max_ahead=s  plan max. days ahead (default = 2)
   -f | --forecast=s   forecast next schedules
   -e | --examine=s    examine period and show next schedule
                       specify date and time instead like in downtime_period
   -t | --timestamp=s  specify deviating date/time
                       YYYYMMDDhhmi, YYYYMMDD, or hhmi
   -d | --debug=s      0|1|2|3 (default = 1)
   -h | --help         display this help

Note: Enabled debugging, forecasting, and/or examine will prevent that schedules
      are sent to the command pipe (downtimes are only calculated)!

Setting environment variables influences the behaviour:
- FAKE_DATE (YYYYMMDD): date deviating from current date
- FAKE_TIME (HHMM)    : time deviating from current time
- DEBUG (0|1|2|3)     : disables/enables debugging information
  0 = no debugging / cmds are sent to external command pipe!
  Note: command line options take precedence over environment variables 

Alle Parameter sind optional. Um lediglich die Funktion des Skripts zu prüfen, ist es vielleicht hilfreich, die "examine"-Option gefolgt von einer Ausfallzeitdefinition zu nutzen:

 /usr/local/icinga/libexec/sched_down.pl -e "tuesday 20:00-21:00"

Dies wird eine Zeichenkette zurückliefern, die dem tatsächlichen Befehl ähnlich ist, falls die Ausfallzeit innerhalb der Planungsperiode ist (Standard zwei Tage), die über die Option "-m" verändert werden kann. Um Ausfallzeiten in der Zukunft zu simulieren, kann es hilfreich sein, über die Umgebungsvariable FAKE_DATE (z.B. FAKE_DATE=20130127) ein anderes Datum zu setzen, bevor Sie das Skript aufrufen. Es kann einfacher sein, dafür die Option "-t" zu benutzen.

Es gibt zwei Möglichkeiten, das Skript auszuführen:

Solange die Ausfallzeiten nicht sehr kurzfristig geplant werden, sollte das ausreichen. Das Skript wird lediglich neue Ausfallzeiten planen, so dass es keine Schwierigkeiten gibt, wenn es öfter aufgerufen wird.

7.17.6. Konvertieren von Ausfallzeitdefinitionen

Steve Shipway hat bereits vor längerer Zeit Skripte geschrieben, um Ausfallzeiten per CGI zu erzeugen und sie für verschiedene Nagios-Versionen zu planen (siehe hier).

Die kommerzielle Nagios-Version hat ebenfalls wiederkehrende Ausfallzeiten, aber anstatt alle Skripte von Steve zu nutzen haben sie entschieden, nur das Planungsskript zu verwenden und ein neues CGI zu schreiben, das allerdings anscheinend keine flexiblen Ausfallzeiten unterstützt (zumindest nicht in der 2011 VM).

Das Perl-Skript "sched_conv.pl" wird Dateien konvertieren, die von beiden genannten Quellen erzeugt wurden. Sie können auch hier die Option "-h" benutzen, um ein wenig Hilfe zu erhalten.

7.17.7. Dateien

Die Perl-Skripte finden Sie im Ordner tools/downtimes.