NSCA funktioniert eigentlich sehr einfach. Man wertet auf dem lokalen Host die Informationen aus, sendet diese mit send_nsca an den NSCA-Server, welcher auf der Nagios-Maschine läuft. Dieser schreibt die empfangenen Infos in eine named pipe, aus der Nagios liest.
Damit das funktioniert sind ein paar Schritte nötig. Ich habe es so installiert:
README lesen ist ne gute Idee!
Dann die Dateien für den Server kopieren:
PHP:
cp src/nsca /usr/local/nagios/bin
cp src/send_nsca /usr/local/nagios/bin
cp sample-config/nsca.cfg /usr/local/nagios/etc
cp sample-config/send_nsca.cfg /usr/local/nagios/etc
Dann den xinet.d configurieren:
PHP:
cat sample-config/nsca.xinetd >> /etc/xinetd.conf
Die /etc/xinetd.conf sollte nochmal überprüft werden!!!
Die gleichen Sourcen nochmal unter freetz cross-compilieren. Das hier entstandene nsca_send kommt dann auf die Box genau wie auch die sample-config/send_nsca.cfg, denn die wird beim Senden immer als Parameter übergeben.
Auf dem Server müssen noch die Rechte angepasst werden:
PHP:
chown nagios:nagios /usr/local/nagios/etc/nsca.cfg
chmod 400 /usr/local/nagios/etc/nsca.cfg
Wer will trägt noch
PHP:
nsca 5667/tcp # Nagios Service Check Acceptor
in die /etc/services ein.
Nun die nsca.cfg editieren und debug=1 setzen, damit man in /var/log/messages was sehen kann. Über die Pipe /usr/local/nagios/var/rw/nagios.cmd werden die Ergebnisse ausgetauscht.
Es empfielt sich ein Passwort und eine Verschlüsselung zu vergeben in den Dateien /usr/local/nagios/etc/nsca.cfg und /usr/local/nagios/etc/send_nsca.cfg
Man kann nun schon mal lokal auf dem Nagios-Server testen:
PHP:
/usr/local/nagios/bin/nsca -c /usr/local/nagios/etc/nsca.cfg
Mit
netstat -na | grep LISTEN nachsehen, ob Port 5667 hört.
PHP:
echo "localhost;Current Users;1;USERS OK - 999 users currently logged in" | /usr/local/nagios/bin/send_nsca -H localhost -d ";" -c /usr/local/nagios/etc/send_nsca.cfg
Jetzt sollte send_nsca antworten mit "1 data packet(s) sent to host successfully."
In der Webgui sollte jetzt unmittelbar der Status auf "WARNING" wechseln. "Disable active checks of this service" kann man machen, damit Nagios nicht immer mit eigenen Checks den Status wieder ändert.
Sollte das nicht gehen, kann man in der nagios.cfg mal untersuchen, ob external checks erlaubt sind.
Wenn bis hierher alles geht kann man sich ein dummy_command definieren:
PHP:
define command {
command_name check_dummy
command_line $USER1$/check_dummy $ARG1$
}
Noch ein ServiceTemplate:
PHP:
define service{
use generic_service
name passive_service
register 0
active_checks_enabled 0
passive_checks_enabled 1
flap_detection_enabled 0
is_volatile 0
check_period 24x7
max_check_attempts 1
normal_check_interval 5
retry_check_interval 1
check_freshness 0
contact_groups admins
check_command dummy!0
notification_interval 120
notification_period 24x7
notification_options w,u,c,r
stalking_options w,c,u
}
Jetzt kann man für jeden Host den passenden Service einrichten. Mit send_nsca schickt man die Werte dann jeweils an die service_description.
Beispiel:
PHP:
define service{
use passive_service
service_description TestMessage
host_name fritzbox # Muss definiert sein
}
Nun kann man von der fritzbox ein Paket schicken mit:
PHP:
echo "fritzbox;TestMessage;0;Alles in bester Ordnung" | /tmp/send_nsca -H localhost -d ";" -c /tmp/send_nsca.cfg
Voraussetzung ist natürlich, daß die Dateien auf der Box sind.
Wie das geht müssen wir hier aber nicht diskutieren, denke ich.
Schaut mal, wie weit ihr kommt. Das nächste ist dann wohl pnp4nagios ;-)
PS: Kleiner Tip noch: In der nagios.cfg trägt man alle .cfg-files ein mittels cfg_file=abcde.cfg
Einfacher ist es ein Verzeichnis anzulegen und alle cfg-files mit "cfg_dir=/usr/local/nagios/etc/meimi039" einzubinden. Dann kann man in diesem Verzeichnis auch die Strukturen abbilden wie z.B. räumliche Anordnungen ... etc...