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 :-).

So siehts dann am Ende aus:201002-nagios-nsca-disk.gif

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)