Nagios - Automatische Überwachung einer IT-Infrastruktur, Teil 3
Aufbau einer einfachen Konfiguration
Wir machen Gebrauch von $HOSTADDRESS$
und $ARG1$
. Ersteres enthält die Adresse des zu prüfenden Rechners. Wird das Kommando beispielsweise in einem Service verwendet, der zur Hostgruppe Debian gehört, und Krakatau gehört zu dieser Hostgruppe, dann hat $HOSTADDRESS$
den Wert krakatau
(oder dessen IP-Adresse, das spielt keine Rolle). $ARG1$
hingegen enthält das erste im Aufruf des Kommandos angegebene Argument. Der oben verwendete Aufruf remote!tcp111
wird daher bei Anwendung auf den Host Krakatau das folgende Kommando ergeben:
check_nrpe -H krakatau -t 60 -c tcp111
Wir haben hier den Timeout auf 60 Sekunden gesetzt (Standard: 10 Sekunden), damit langsame Hosts bei komplexeren Kommandos genug Zeit haben. so werden daher nicht definiert zu werden. Es bleibt noch das ominöse tcp111
zu erklären, das wir hier als Kommando (Option -c
) an den Host übergeben.
Dazu muss man wissen, dass nrpe auf jedem überwachten Host einen kleinen Daemon voraussetzt. Diesen installieren wir mit
aptitude install nagios-nrpe-server nagios-plugins-basic
Wie gesagt, dies muss auf allen Rechnern erledigt werden. Damit nicht genug, es ist auch noch eine Konfiguration auf jedem Rechner anzulegen. Standardmäßig ist bereits eine Konfiguration unter /etc/nagios vorhanden. Die Datei nrpe.cfg weist jedoch einen Fehler auf. Der Eintrag pid_file=/var/run/nrpe.pid
führt dazu, dass die PID-Datei beim Beenden des Daemons nicht gelöscht werden kann. Wir ändern ihn in pid_file=/var/run/nrpe/nrpe.pid
und passen das System folgendermaßen an:
mkdir /var/run/nrpe chown nagios.nagios /var/run/nrpe
Ferner fügen wir in local.cfg folgende Zeile ein:
command[[tcp111] = /usr/lib/nagios/plugins/check_tcp -p 111
Eine weitere Maßnahme ist nötig. Da der Daemon mit der tcpwrap-Bibliothek gelinkt ist, muss in der Datei /etc/hosts.allow sichergestellt sein, dass zumindest der Nagios-Server Krakatau Zugriff erhält:
ALL: krakatau
Nun können wir zunächst einmal den nrpe-Daemon neu starten, damit die neue Konfiguration wirksam wird:
/etc/init.d/nagios-nrpe-server restart
Wir sollten auf jeden Fall in der System-Logdatei (/var/log/daemon.log, je nach Konfiguration) nachsehen, ob der Daemon auch wirklich gestartet wurde.
Es bleibt immer noch unser tcp111
zu erklären. nrpe erlaubt nicht die Ausführung von beliebigen Kommandos, sondern nur von solchen, die in den Konfigurationsdateien definiert wurden. Dazu wird eine Definition verwendet, die an ein Array erinnert, wie dieser Auszug aus der Standardkonfiguration zeigt:
command[check_users] = /usr/lib/nagios/plugins/check_users -w 5 -c 10 command[check_zombie_procs] = /usr/lib/nagios/plugins/check_procs -w 5 -c 10 -s Z command[check_total_procs] = /usr/lib/nagios/plugins/check_procs -w 150 -c 200
Wir haben dies vorhin erweitert um:
command[tcp111] = /usr/lib/nagios/plugins/check_tcp -p 111
Wenn wir nun das Kommando mit dem (willkürlich gewählten) Namen tcp111 via unser remote-Kommando aufrufen, dann wird auf dem Client das Kommando /usr/lib/nagios/plugins/check_tcp -p 111
ausgeführt. Der einzige benötigte Parameter ist fest codiert, und der Pfad zum Kommando ist, obwohl es ein Nagios-Plugin ist, vollständig angegeben - der nrpe-Daemon besitzt wohl kein Wissen über den Pfad zu den Plugins. Das Ergebnis des Aufrufs wird vom nrpe-Daemon an den Nagios-Server zurückgegeben, der es an der Web-Oberfläche darstellen kann.
Wenn wir jetzt noch unseren Host Krakatau in die Hostgruppe Debian aufnehmen, sind wir bereit, den neuen Service zu testen. Hier die geänderte Host-Definition.
krakatau.cfg
define host { host_name krakatau use generic-host hostgroups Debian, HTTP Servers }
Wie vorhin prüfen wir die Konfiguration mit nagios2 -v /etc/nagios2/nagios.cfg
und laden dann die Konfiguration mit /etc/init.d/nagios2 reload
neu. Nach einigen Minuten sollte der neue Service den Status PENDING verlassen haben und OK zeigen, sofern Portmap läuft.
Die Einrichtung des nrpe-Plugins war insgesamt eine Menge Arbeit. Bei einer größeren Zahl von Hosts muss man diese irgendwie automatisieren oder ein anderes Plugin einsetzen. Wenn man nrpe verwendet, sollte man dafür sorgen, dass die Konfiguration auf jedem Client identisch ist. Wir werden noch sehen, wie wir das erreichen können.
Services
Um einen neuen Service zu definieren, fügen wir ihn einfach zur passenden Hostgroup hinzu. Beispielsweise können wir auf allen Rechnern der Hostgroup Debian den Status der Paketverwaltung prüfen. Liegen Sicherheitsupdates vor, dann wird Nagios den Status CRITICAL anzeigen, bei normalen Updates den Status WARNING. Die Definition ist einleuchtend:
define service { hostgroup_name Debian service_description Paketstatus check_command remote!apt use generic-service }
Allerdings müssen wir auf jedem betroffenen Host die Datei /etc/nagios/local.cfg um eine Zeile erweitern:
command[apt] = /usr/lib/nagios/plugins/check_apt -t 60
Natürlich muss der nrpe-Daemon dann wieder neu gestartet werden. Ebenso ist Nagios auf dem Server wieder zu prüfen und dann die Konfiguration neu zu laden.