Das check_multi Plugin wird konfiguriert durch eine einfache an NRPE angelehnte ASCII-Datei.
Format
<Schluesselwort> [ <Bezeichner> ] = <content>
Elemente
Mit dem attribute-Kommando koennen globale Variable sowie spezifische Child-Check-Einstellungen gesetzt werden.
Format
attribute [ <Globale Variable> ] = <Wert der globalen Variablen>
attribute [ <Tag>::<Variable> ] = <Child Check-Wert>
Elemente
Beispiele
command [ tmp_dir_permissions ] = ls -ld /tmp attribute [ tmp_dir_permissions::critical ] = "$tmp_dir_permissions$" !~ /^drwxrwxrwt/
attribute [ extinfo_in_status ] = 1
Die Kommando-Definitionen erzeugen die Liste der Child-Plugin-Aufrufe, die von check_multi als Parent-Check ausgefuehrt werden sollen.
Format
command [ <Bezeichner> ] = <Plugin Kommandozeile>
Elemente
A–Za-z0–9_:/usr/local/nagios/libexec oder ein Pfad kann spezifiziert werden durch die Option –libexec <pfad>, vgl. hier.command [ tag::plugin ] verwenden.Eval ist ein maechtiges Mittel, um Informationen aus allen moeglichen Quellen zu sammeln und flexible Plugin-Konfigurationen zu erstellen.
Format
eval [ <tag> ] = <perl expression>
eeval [ <tag> ] = <perl expression>
Elemente
Return code
Ein eeval-Statement ist selber ein kleines Perl-Script, und der Return Code (RC) kann wie in anderen Scripten ueber die $?-Variable gesetzt werden.
Nichtsdestotrotz ist es ein wenig verwirrend, denn der RC muss zuerst gesetzt werden, und dann im letzten Statement wird der eigentliche Output des eval-Statements mit dem return-Befehl bestimmt.
Im folgenden Beispiel wird das vielleicht besser verstaendlich:[code perl]eeval [ RC_CRITICAL_output_xyz ] =
# the RC has to be shifted to the high byte of $? $? = $CRITICAL << 8; # the output itself is the return value (well, that's not quite intuitive ;)) return "xyz";[/code]
Examples Beispiele fuer die Verwendung von eval gibt es hier.
Format
livestatus [ <tag> ] = <host>:<service>
livestatus [ <tag> ] = <host>
Elemente
Anmerkung: Normalerweise wird der livestatus-Socket unter <nagiosdir>/var/live gesucht. Wenn Sie einen anderen Pfad benoetigen, koennen Sie das wie folgt angeben:
check_multi -s livestatus=</path/to/livestatus-socket>
Mehrere Hosts / Services
Sie koennen Wildcards und Regular Expressions (Perl) verwenden, wobei die Regular Expressions in '/' eingeschlossen werden.
Beispiele:
livestatus [ web ] = srv*:/web/
livestatus [ web ] = srv*:http
Nehmen wir mal an, dass Sie drei Webserver namens h1, h2 und h3 haben und auf jedem ein Service httpd laeuft.
check_multi expandiert nun den Child-Check web zuerst zu drei Webservices wie folgt:
livestatus [ web_h1_httpd ] = h1:httpd livestatus [ web_h2_httpd ] = h2:httpd livestatus [ web_h3_httpd ] = h3:httpd
Die neuen Tags werden dabei wie folgt gebildet:<TAG>_<host>_<service>
Diese livestatus-Services werden dann zur Laufzeit durch die Ergebnisse der 'normalen' Services ersetzt.
Auch Services koennen mit Wildcards sowie mit Regular Expressions gebildet werden.
Preisfrage zum Schluss: was wird wohl passieren, wenn Sie das folgende Statement angeben?
livestatus [ all ] = *:*
Richtig: alle Services aus ihrer Installation werden in einem check_multi-Call vereint…
Dies wird wahrscheinlich Ihre Nagios Puffer-Groessen sprengen und es ist auch nicht wirklich sinnvoll
. Aber es zeigt, wie die Expandierung wirken kann.
Zuerst einmal: fuer die normale Funktion von check_multi ist das Status-Definitions-Feature nicht noetig, weil dort die Standard-Bewertung greift
.
Die Status-Definition legt fest, wie die Ergebnisse der Child-Plugins bewertet werden. In der eingebauten Standard-Bewertung wird geprueft, ob Stati ungleich OK vorliegen und dann gewinnt der mit der hoechsten Wertigkeit.
Die Bewertungsreihenfolge dabei ist zuerst OK, dann UNKNOWN, schliesslich WARNING und zuletzt CRITICAL.
Format
state [ <Status> ] = <Ausdruck>
Elemente
count(warning).Beispiele
state [ OK ] = 1 state [ UNKNOWN ] = COUNT(UNKNOWN) > 0 state [ WARNING ] = COUNT(WARNING) > 0 state [ CRITICAL ] = COUNT(CRITICAL) > 0
state [ UNKNOWN ] = (1==0) state [ WARNING ] = (1==0) state [ CRITICAL ] = COUNT(CRITICAL) > 0
state [ WARNING ] = COUNT(WARNING) > 0 || COUNT(CRITICAL) > 0 state [ CRITICAL ] = COUNT(CRITICAL) > 1
Config-Datei ↔ Kommandozeile
Alle Stati koennen auch auf der Kommandozeile angegeben werden mit den Optionen -o|-u|-w|-c <Ausdruck>. Die Reihenfolge in der Auswertung ist dabei
Format
statusdat [ <tag> ] = <host>:<service>
(und seit 2010/06/04)
statusdat [ <tag> ] = <host>
Elemente
Anmerkung: Normalerweise wird die status.dat unter <nagiosdir>/var/status.dat gesucht. Wenn Sie einen anderen Pfad benoetigen, koennen Sie das wie folgt angeben:
check_multi -s status_dat=</path/to/status.dat>
Erweiterung seit 0.20: Sie koennen nun auch Wildcards verwenden, z.B.
statusdat [ web ] = srv*:http
Nehmen wir mal an, dass Sie drei Webserver namens h1, h2 und h3 haben und auf jedem ein Service httpd laeuft.
check_multi expandiert nun den Child-Check web zu drei Webservices wie folgt:
statusdat [ web_h1_httpd ] = h1:httpd statusdat [ web_h2_httpd ] = h2:httpd statusdat [ web_h3_httpd ] = h3:httpd
Die neuen Tags werden dabei wie folgt gebildet:<TAG>_<host>_<service>
Services koennen auch mit Wildcards gebildet werden.
Preisfrage zum Schluss: was wird wohl passieren, wenn Sie das folgende Statement angeben?
statusdat [ all ] = *:*
Richtig: alle Services in Ihrer status.dat werden in einem check_multi-Call vereint…
Dies wird wahrscheinlich Ihre Nagios Puffer-Groessen sprengen und es ist auch nicht wirklich sinnvoll
. Aber es zeigt, wie die Expandierung wirken kann.