Passive Checks mit Nagios
Normalerweise arbeitet Nagios ja nach dem Prinzip: "Ich bin der Server und Ich prüfe" (aktive checks). In der Konfiguration steht drin welche Test in welchem Zeitraum abgearbeitet werden müssen und wann benachrichtigt wird. So weit so gut.
Jetzt gibt es aber Situationen in denen das nicht geht. Zum Beispiel möchte man vielleicht prüfen ob ein lange laufender Prozess erfolgreich beendet worden ist. Oder aber der Nagios Server selber hat keinen Zugriff auf den Server. In meinem Fall hatte ich folgendes Szenario.
Mein Backupserver wird nachts geweckt (per wake on lan) und um eine bestimmte Uhrzeit started ein Prozess der per rsnapshot verschiedene Backups macht. Danach schaltet sich der Server wieder ab. Ich würde gerne in Nagios sehen welchen Plattenplatz ich auf dem Backupserver noch frei habe. Aktive Checks gehen nicht weil ich nicht genau terminieren kann wann die Backups fertig sind. (Und nachts um 2.00 Uhr schaue ich auch nicht nach :-).
Generell gibts verschiedene Optionen. Ich habe mich für NSCA (Nagios Service Check Acceptor). Ein Dienst der Nagios Stati entgegen nimmt und an Nagios weiterleitet. Er muss auf dem Nagios Server erstmal installiert werden. Bei Gentoo ging das so:
emerge -av nagios-nsca
rc-update add nsca default
vi /etc/nagios/nsca.cfg
(ich habs nicht mehr genau parat aber die defaults waren ok - nur das password musste geänder werden)
So jetzt noch auf dem Nagios Server sagen das es einen passiven check gibt
vi /etc/nagios/services.cfg
define service{
use generic-service-important
active_checks_enabled 0
passive_checks_enabled 1
host_name backup
service_description Volume-Backup
contact_groups mail-admins-crit
check_command check_dummy
}
Dieser check_dummy hat mich etwas Nerven gekostet. Eigentlich brauchen wir keinen Check (weil der wird ja remote ausgeführt) aber die Syntaxprüfung verlangt einen. Also
vi /etc/nagios/checkcommands.cfg
define command{
command_name check_dummy
command_line ls
}
So - auf dem Sever ist alles ready. Jetzt müssen wir noch dem anderen Rechner (in diesem Fall mein Backup) sagen was zu tuen ist. Wie oben erstmal NSCA installieren:
emerge -av nagios-nsca
vi /etc/nagios/send_nsca.cfg (verschlüsselung muss kongruent zu oben sein)
Das Plugin was wir brauchen muss noch auf den server und in ein preferiertes verzeichniss kopiert sein. Bei mir
/opt/c/check_disk
Wie immer erstmal den Test local probieren und schauen das das Ergebniss stimmt. Dann habe ich alles auf Basis dieses Threads in ein Script gepackt.
vi /opt/c/nagios/c-nsca-check_disk.sh
#!/bin/bash
send_nsca=/usr/lib/nagios/plugins/send_nsca
send_nsca_cfg=/etc/nagios/send_nsca.cfg
nagioshost=x.c.de
host=backup
service=Volume-Backup
plugin=/opt/c/check_disk
warn=70%
crit=90%
mountpoint='/dev/mapper/c--vg-backup'
output=`$plugin -m $mountpoint -w $warn -c $crit`
rc=$?
echo -e "$host\t$service\t$rc\t$output"|$send_nsca -H $nagioshost -c $send_nsca_cfg
exit 0
Bemerkung: ist natürlich alles wichtig aber auf jeden Fall muss man darauf achten das im Script "service=Volume-Backup" mit dem passiven Check auf dem Server übereinstimmt.
Dieses Script muss natürlich irgendwann laufen. Ich habs einfach in die start/stop scripts gepackt.
vi /etc/conf.d/local.start
vi /etc/conf.d/local.stop
/opt/c/nagios/c-nsca-check_disk.sh &>/dev/null
/opt/c/nagios/c-nsca-check_backup-date.sh &>/dev/null
(boah: ist das wieder lange geworden. hätte ich nicht gedacht. aber jetzt wenigstens für mich sauber niedergeschreiben)