Wie man ein eigenes Nagios-Check-Plugin schreibt
Dieses Tutorial wurde mit Nagios Core 4.3.4 unter Debian 9.2 getestet.
Auch wenn Nagios Exchange Tausende von verfügbaren Plugins zum freien Download anbietet, ist der zu prüfende Status manchmal sehr spezifisch für Ihr Szenario.
Erwägungen
Es wird davon ausgegangen, dass:
- Sie haben Nagios installiert.
- Sie kennen die Grundlagen der Nagios-Administration.
Der Nagios-Server in diesem Beispiel wird auf 192.168.0.150 gehostet, und ein Beispiel-Client wird auf IP 192.168.0.200 gehostet.
Beenden-Codes
Um den Status eines überwachten Service zu ermitteln, führt Nagios ein Check-Plugin darauf aus. Nagios kann den Status des Service erkennen, indem es den Exit-Code des Checks liest.
Nagios versteht die folgenden Exit-Codes:
- 0 – Dienst ist OK.
- 1 – Dienst hat eine WARNUNG.
- 2 – Der Dienst befindet sich in einem KRITISCHEN Status.
- 3 – Der Dienst befindet sich im Status UNBEKANNT.
Ein Programm kann in jeder Sprache geschrieben werden, um als Nagios-Check-Plugin zu funktionieren. Basierend auf dem geprüften Zustand kann das Plugin Nagios auf einen nicht funktionierenden Dienst aufmerksam machen.
Beispiel-Plugin
Ich werde ein einfaches Beispiel verwenden. Ich habe ein Plugin in ein Bash-Skript geschrieben, um nach aktuellen Warnungen zu suchen. Nehmen wir an, ich habe den Nagios-Server so konfiguriert, dass er nur bei einem kritischen Status eine Warnung ausgibt, also möchte ich eine Warnung, wenn ich zu viele Dienste bei einem Warnungsstatus habe.
Beachten Sie das folgende Skript (check_warnings.sh):
#!/bin/bash countWarnings=$(/usr/local/nagios/bin/nagiostats | grep "Ok/Warn/Unk/Crit:" | sed 's/[[:space:]]//g' | cut -d"/" -f5) if (($countWarnings<=5)); then echo "OK - $countWarnings services in Warning state" exit 0 elif ((6<=$countWarnings && $countWarnings<=30)); then # This case makes no sense because it only adds one warning. # It is just to make an example on all possible exits. echo "WARNING - $countWarnings services in Warning state" exit 1 elif ((30<=$countWarnings)); then echo "CRITICAL - $countWarnings services in Warning state" exit 2 else echo "UNKNOWN - $countWarnings" exit 3 fi
Basierend auf den Informationen, die das Werkzeug nagiostats liefert, gehe ich davon aus, dass alles in Ordnung ist, wenn es fünf oder weniger Dienste im Zustand Warnung gibt.
Ich werde dieses Skript mit allen anderen Nagios-Plugins in /usr/local/nagios/libexec/ belassen (Dieses Verzeichnis kann je nach Konfiguration unterschiedlich sein).
Wie bei jedem Nagios-Plugin werden Sie den Status von der Kommandozeile aus überprüfen wollen, bevor Sie es in die Konfigurationsdateien einfügen.
Denken Sie daran, die Ausführung des Skripts zuzulassen:
sudo chmod +x /usr/local/nagios/libexec/check_warnings.sh
Und dann lassen Sie ihn wie jedes andere Skript laufen:
Das Ergebnis ist eine Textnachricht und ein Exit-Code:
Neues Prüfkommando und neuen Dienst einrichten
Dieser Schritt gilt auch für Ihre eigenen Plugins und wenn Sie ein Plugin eines Drittanbieters aus dem Internet herunterladen.
Zuerst sollten Sie einen Befehl in der Datei commands.cfg definieren. Der Speicherort dieser Datei hängt von der Konfiguration ab, die Sie vorgenommen haben, in meinem Fall ist es in /usr/local/nagios/etc/objects/commands.cfg.
Daher füge ich am Ende der Datei den folgenden Block an:
# Custom plugins commands... define command{ command_name check_warnings command_line $USER1$/check_warnings.sh }
Denken Sie daran, dass die Variable $USER1$ eine lokale Nagios-Variable ist, die in der Datei resource.cfg gesetzt ist und in meinem Fall auf /usr/local/nagios/libexec zeigt.
Nachdem Sie den Befehl definiert haben, können Sie diesen Befehl einem Service und dann einem Host zuordnen. In diesem Beispiel definieren wir einen Service und weisen ihn localhost zu, denn diese Prüfung findet auf Nagios selbst statt.
Bearbeiten Sie die Datei /usr/local/nagios/etc/objects/localhost.cfg und fügen Sie den folgenden Block hinzu:
# Example - Check current warnings... define service{ use local-service host_name localhost service_description Nagios Server Warnings check_command check_warnings }
Nun sind wir alle bereit, das einzige, was noch aussteht, ist das erneute Laden von Nagios, um die Konfigurationsdateien erneut zu lesen.
Denken Sie immer daran, vor dem Neuladen von Nagios zu überprüfen, ob es keine Fehler in der Konfiguration gibt. Sie tun dies mit dem Nagios -v-Kommando als root:
sudo /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
Sie sollten so etwas wie das hier bekommen:
Stellen Sie sicher, dass sie 0 Fehler und 0 Warnungen zurückgibt und fahren Sie fort, den Dienst neu zu laden:
sudo systemctl reload-or-restart nagios.service
Nach dem Neuladen des Dienstes werden Sie den zugehörigen Check im localhost sehen. Zunächst als ausstehend:
Und nach der Ausführung mit seinem Ergebnis:
NRPE zur Ausführung auf Clients verwenden
Um ein Skript auf einem Remote-Client auszuführen, müssen Sie den Nagios Remote Plugin Executor (NRPE) einrichten.
Da dieses Tutorial auf Debian 9 basiert, werde ich als Beispiel zeigen, wie man es installiert, aber Sie können Anleitungen für jede Distribution finden.
Generische Installation auf Debian-basiertem Client
Beachten Sie, dass die gesamte Konfiguration in diesem Abschnitt auf dem zu prüfenden Client und nicht auf dem Nagios-Server vorgenommen wird.
Installieren Sie NRPE- und Nagios-Plugins:
sudo apt-get install libcurl4-openssl-dev nagios-plugins nagios-nrpe-server nagios-nrpe-plugin --no-install-recommends sudo ln -s /usr/lib/nagios/plugins/check_nrpe /usr/bin/check_nrpe
Erlauben Sie dem Nagios-Server, Kommandos auf dem Client auszuführen, indem Sie ihn dem Eintrag allowed_hosts in /etc/nagios/nrpe.cfg hinzufügen. Die Zeile sollte wie folgt aussehen:
allowed_hosts=127.0.0.1,::1,192.168.0.150
Definieren Sie die Standardprüfungen, die Sie auf jedem Client mit NRPE durchführen werden. Definieren Sie die Prüfungen auf /etc/nagios/nrpe_local.cfg. Ein Modell für die Datei könnte zum Beispiel sein:
###################################### # Do any local nrpe configuration here ###################################### #----------------------------------------------------------------------------------- # Users command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10 # Load command[check_load]=/usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20 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 # Disk command[check_root]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p / command[check_boot]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /boot command[check_usr]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /usr command[check_var]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /var command[check_tmp]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /tmp # If you want to add a non-standard mount point: # command[check_mnt1]=/usr/lib/nagios/plugins/check_disk -w 4% -c 1% -p /export #-----------------------------------------------------------------------------------
Die Idee, diese generische Datei zu haben, ist, dass Sie auf jedem Client dasselbe überprüfen können.
Stellen Sie sicher, dass die lokale Datei und das .d-Verzeichnis in der Hauptkonfigurationsdatei mit enthalten sind mittels grep Mustersuche:
cat /etc/nagios/nrpe.cfg | grep include | grep -v ^#
Starten Sie den Dienst neu:
sudo systemctl restart nagios-nrpe-server.service
Prüfen Sie, ob der NRPE-Dienst läuft:
cat /etc/services | grep nrpe netstat -at | grep nrpe
Prüfen Sie nun eines der zuvor definierten NRPE-Kommandos vom Nagios-Server:
Beachten Sie, dass das NRPE-Kommando check_users in der Datei /etc/nagios/nrpe_local.cfg definiert wurde, um /usr/lib/nagios/plugins/check_users -w 5 -c 10 auszuführen.
Falls Sie das Plugin nicht auf dem Nagios-Server haben, können Sie es mit installieren:
sudo apt-get install nagios-nrpe-plugin
Zusammenfassend kann man also sagen, dass das NRPE ein Skript auf einem Remote-Host ausführt und den Exit-Code an den Nagios-Server zurückgibt.
Konfiguration für benutzerdefinierte Skripte
Um ein benutzerdefiniertes Skript als Plugin für die Remote-Ausführung über NRPE zu verwenden, sollten Sie das Skript zunächst auf dem Server schreiben, z. B. in /usr/local/scripts/check_root_home_du.sh:
#!/bin/bash homeUsage=$(du -s /root/ | cut -f1) if (($homeUsage<=$((1024*1024)))); then echo "OK - Root home usage is $(du -sh /root/ | cut -f1)" exit 0 elif (($((1024*1024))<$homeUsage && $homeUsage<=$((3*1024*1024)))); then echo "WARNING - Root home usage is $(du -sh /root/ | cut -f1)" exit 1 elif (($((3*1024*1024))<$homeUsage)); then echo "CRITICAL - Root home usage is $(du -sh /root/ | cut -f1)" exit 2 else echo "UNKNOWN - Value received: $homeUsage" exit 3 fi
Erlauben Sie die Ausführung des Skripts:
sudo chmod +x /usr/local/scripts/check_root_home_du.sh
Das vorherige Skript ist ein sehr einfaches Beispiel, das die Plattennutzung des Verzeichnisses /root überprüft und einen Schwellenwert für die Berücksichtigung als OK, Warnung oder Kritisch festlegt.
Fügen Sie das Kommando in die NRPE-Konfigurationsdatei auf dem Client ein (/etc/nagios/nrpe_local.cfg):
# Custom command[check_root_home_du]=/usr/local/scripts/check_root_home_du.sh
Und den NRPE-Hörer neu starten:
sudo systemctl restart nagios-nrpe-server.service
Jetzt können wir auf den Server zugreifen und ihn wie jedes Standard-Plugin testen
Setzen Sie die NRPE-Prüfung in den Server-Konfigurationsdateien
Jetzt wissen wir, dass das benutzerdefinierte Plugin sowohl auf dem Client als auch auf dem Server funktioniert und dass das NRPE korrekt kommuniziert, und wir können die Nagios-Dateien für die Überprüfung des entfernten Geräts konfigurieren. Setzen Sie also auf dem Server die Dateien:
/usr/local/nagios/etc/objects/commands.cfg:
#... define command{ command_name check_nrpe command_line /usr/lib/nagios/plugins/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ }
/usr/local/nagios/etc/objects/nrpeclient.cfg:
define host{ use linux-server host_name nrpeclient alias nrpeclient address 192.168.0.200 } define service{ use local-service host_name nrpeclient service_description Root Home Usage check_command check_nrpe!check_root_home_du }
Beachten Sie, dass die Markierung ! den Befehl von den Argumenten im Eintrag check_command trennt. Dies definiert, dass check_nrpe der Befehl und check_root_home_du der Wert von $ARG1$ ist.
Abhängig von Ihrer Konfiguration sollten Sie auch diese letzte Datei zur Hauptdatei hinzufügen (/usr/local/nagios/etc/nagios.cfg):
#... cfg_file=/usr/local/nagios/etc/objects/nrpeclient.cfg #...
Überprüfen Sie die Konfiguration und, falls keine Fehler oder Warnungen auftreten, laden Sie den Service neu:
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
sudo systemctl reload-or-restart nagios.service
Und jetzt haben Sie eine neue benutzerdefinierte Prüfung auf einem Host:
Schlussfolgerung
Nagios hat eine riesige Bibliothek von Plugins, die in der Nagios-Börse verfügbar ist. In einer großen Umgebung ist es jedoch sehr wahrscheinlich, dass es z.B. einige benutzerdefinierte Prüfungen für bestimmte Anwendungen benötigt: Überprüfung eines bestimmten Aufgabenergebnisses, Überwachung einer selbst entwickelten Anwendung, u.a.
Die Flexibilität, die Nagios bietet, ist für diese Fallszenarien perfekt.