Die Moeglichkeit, check_multi mehrere Konfigurationsdateien zu uebergeben, kann fuer eine sehr flexible Konfiguration genutzt werden. Speziell in grossen Umgebungen kann dies eine Menge Konfigurationsaufwand ersparen.
Um das Ueberladen der Konfiguration zu verstehen, muessen wir uns die Implementierung des Parsers fuer die Konfigurations-Datei anschauen. Wann immer dieser Parser eine Kommandozeile liest wie die folgende:
# foo.cmd command [ foo ] = /bin/echo is foo
schaut er in seine Liste und sucht nach einem Eintrag mit dem Namen foo. Wenn es diesen Eintrag noch nicht gibt, speichert er es als neuen Eintrag in der Liste.
Wenn es aber schon einen foo-Eintrag gibt, wird der alte mit dem neuen ueberschrieben.
Wenn es z.B. eine zweite Datei gibt namens bar.cmd, die die folgende Definition enthaelt:
# bar.cmd command [ foo ] = /bin/echo is bar
und wir diese Datei nach der ersten Datei foo.cmd laden, dann findet der Parser das schon gespeicherte foo Kommando (/bin/echo is foo) und ueberschreibt es mit dem Kommando /bin/echo is bar.
nagios ~> libexec/check_multi -f foo.cmd -r 0 OK - 1 plugins checked, 0 critical, 0 warning, 0 unknown, 1 ok [ 1] foo is foo nagios ~> libexec/check_multi -f bar.cmd -r 0 OK - 1 plugins checked, 0 critical, 0 warning, 0 unknown, 1 ok [ 1] foo is bar nagios ~> libexec/check_multi -f foo.cmd -f bar.cmd -r 0 OK - 1 plugins checked, 0 critical, 0 warning, 0 unknown, 1 ok [ 1] foo is bar
foo.cmd und fuehrt /bin/echo foo aus.bar aus.foo.cmd-Kommando echo foo wird ueberladen durch bar.cmd: check_multi zeigt bar.Lassen Sie uns nun anschauen, wie wir dieses Verhalten verwenden koennen, um die Konfiguration zu vereinfachen.
So koennen zum Beispiel alle Linux-spezifischen Checks in die Linux.cmd wandern, waehrend alle Solaris-spezifischen Checks in der Datei SunOS.cmd landen. Und wenn noch ein Spezialfall fuer den Host specialhost zu konfigurieren ist, so kann das in der Datei specialhost.cmd geschehen.
Beispiel: Das Syslog soll daraufhin ueberprueft werden, ob wenigstens einmal am Tag hineingeschrieben wird. Das Linux.cmd wuerde zum Beispiel die folgende Zeile enthalten:
command [ syslog ] = check_file_age -c 86400 /var/log/messages
waehrend das Solaris.cmd das syslog natuerlich im Verzeichnis /var/adm suchen wuerde.
command [ syslog ] = check_file_age -c 86400 /var/adm/messages
Und zum Schluss kommt unser specialhost und soll gar kein syslog monitoren:
command [ syslog ] = /bin/echo "Check disabled, Matthias Flacke, 19.11.2007"
Dazu noch die entsprechenden Auszuege aus der Nagios-Konfiguration:
Die spannende Zeile ist die
check_command check_multi!-f $_HOSTOS$.cmd!-f $HOSTNAME.cmd
wo naemlich der OS-spezifische Teil zuerst ausgewertet und ggf. durch den Host-spezifischen Teil ueberladen wird.
# overload.cfg
define host{
host_name linuxhost
_OS Linux
}
define host{
host_name solarishost
_OS SunOS
}
define host
host_name specialhost
_OS SunOS
}
define command {
command_name check_multi
command_line $USER1$/check_multi $ARG1$ $ARG2$ $ARG3$ $ARG4$
}
define service
name system_checks
host_name *
check_command check_multi!-f $_HOSTOS$.cmd!-f $HOSTNAME.cmd
}