Nagios Plugin · 7 min read · Nov 18, 2025
Wie man ein benutzerdefiniertes Nagios-Check-Plugin schreibt
Dieses Tutorial wurde mit Nagios Core 4.3.4 auf Debian 9.2 getestet.
Obwohl Nagios Exchange Tausende von verfügbaren Plugins zum kostenlosen Download hat, muss manchmal der zu überprüfende Status sehr spezifisch für Ihr Szenario sein.
Überlegungen
Es wird angenommen, dass:
- Sie haben Nagios installiert und laufen (Sie können dieses Tutorial folgen, wenn nicht).
- 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 der IP 192.168.0.200 gehostet.
Exit-Codes
Um den Status eines überwachten Dienstes zu identifizieren, führt Nagios ein Check-Plugin darauf aus. Nagios kann den Status des Dienstes 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 - Dienst ist in einem KRITISCHEN Status.
- 3 - Dienststatus ist UNBEKANNT.
Ein Programm kann in jeder Sprache geschrieben werden, um als Nagios-Check-Plugin zu fungieren. Basierend auf der überprüften Bedingung kann das Plugin Nagios auf einen fehlerhaften Dienst aufmerksam machen.
Beispiel-Plugin
Ich werde ein einfaches Beispiel verwenden. Ich habe ein Plugin in einem Bash-Skript geschrieben, um aktuelle Warnungen zu überprüfen. Angenommen, ich habe den Nagios-Server so konfiguriert, dass er nur bei kritischen Status warnt, also möchte ich eine Warnung, wenn ich zu viele Dienste im Warnstatus habe.
Betrachten 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 Dienste im Warnzustand"
exit 0
elif ((6<=$countWarnings && $countWarnings<=30)); then
# Dieser Fall macht keinen Sinn, da er nur eine Warnung hinzufügt.
# Es dient nur als Beispiel für alle möglichen Ausgänge.
echo "WARNUNG - $countWarnings Dienste im Warnzustand"
exit 1
elif ((30<=$countWarnings)); then
echo "KRITISCH - $countWarnings Dienste im Warnzustand"
exit 2
else
echo "UNBEKANNT - $countWarnings"
exit 3
fiBasierend auf den Informationen, die das Nagiostats-Tool bereitstellt, gehe ich davon aus, dass alles in Ordnung ist, wenn fünf oder weniger Dienste im Warnstatus sind.
Ich werde dieses Skript mit all den anderen Nagios-Plugins im Verzeichnis /usr/local/nagios/libexec/ belassen (Dieses Verzeichnis kann je nach Ihrer Konfiguration unterschiedlich sein).
Wie bei jedem Nagios-Plugin möchten Sie es von der Kommandozeile aus überprüfen, bevor Sie es zu den Konfigurationsdateien hinzufügen.
Denken Sie daran, die Ausführung des Skripts zu erlauben:
sudo chmod +x /usr/local/nagios/libexec/check_warnings.shUnd dann führen Sie es wie jedes andere Skript aus:
Das Ergebnis ist eine Textnachricht und ein Exit-Code:
Einen neuen Überprüfungsbefehl und Dienst festlegen
Dieser Schritt wird der gleiche sein wie bei Ihren eigenen Plugins, und wenn Sie ein Drittanbieter-Plugin 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 befindet sie sich in /usr/local/nagios/etc/objects/commands.cfg.
Ich werde also am Ende der Datei den folgenden Block hinzufügen:
# Benutzerdefinierte Plugin-Befehle...
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 resource.cfg-Datei festgelegt ist, in meinem Fall zeigt sie auf /usr/local/nagios/libexec.
Nachdem Sie den Befehl definiert haben, können Sie diesen Befehl einem Dienst und dann einem Host zuordnen. In diesem Beispiel werden wir einen Dienst definieren und ihn localhost zuweisen, da diese Überprüfung auf Nagios selbst erfolgt.
Bearbeiten Sie die Datei /usr/local/nagios/etc/objects/localhost.cfg und fügen Sie den folgenden Block hinzu:
# Beispiel - Überprüfen Sie aktuelle Warnungen...
define service{
use local-service
host_name localhost
service_description Nagios Server Warnungen
check_command check_warnings
}Jetzt sind wir bereit, das Einzige, was noch aussteht, ist, Nagios neu zu laden, um die Konfigurationsdateien erneut zu lesen.
Denken Sie immer daran, vor dem Neuladen von Nagios zu überprüfen, dass keine Fehler in der Konfiguration vorhanden sind. Sie tun dies mit dem Befehl nagios -v als Root:
sudo /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfgSie sollten etwas wie folgt erhalten:

Stellen Sie sicher, dass es 0 Fehler und 0 Warnungen zurückgibt und fahren Sie fort, den Dienst neu zu laden:
sudo systemctl reload-or-restart nagios.serviceNach dem Neuladen des Dienstes sehen Sie die zugehörige Überprüfung im localhost. Zuerst als ausstehend:
Und nach der Ausführung mit ihrem Ergebnis:
Verwenden Sie NRPE, um auf Clients auszuführen
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 Anweisungen für jede Distribution finden.
Allgemeine Installation auf Debian-basiertem Client
Beachten Sie, dass alle Konfigurationen in diesem Abschnitt auf dem zu überprüfenden Client und nicht auf dem Nagios-Server vorgenommen werden.
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_nrpeErlauben Sie dem Nagios-Server, Befehle auf dem Client auszuführen, indem Sie ihn in den allowed_hosts-Eintrag in /etc/nagios/nrpe.cfg hinzufügen. Die Zeile sollte wie folgt aussehen:
allowed_hosts=127.0.0.1,::1,192.168.0.150Definieren Sie die Standardüberprüfungen, die Sie auf jedem Client mit NRPE durchführen werden. Definieren Sie die Überprüfungen in /etc/nagios/nrpe_local.cfg. Zum Beispiel könnte ein Modell für die Datei so aussehen:
######################################
# Führen Sie hier alle lokalen NRPE-Konfigurationen durch
######################################
#-----------------------------------------------------------------------------------
# Benutzer
command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10
# Last
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
# Festplatte
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
# Wenn Sie einen nicht standardmäßigen Mount-Punkt hinzufügen möchten:
# 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 dasselbe auf jedem Client überprüfen können.
Stellen Sie sicher, dass die lokale Datei und das .d-Verzeichnis in der Hauptkonfigurationsdatei mit:
cat /etc/nagios/nrpe.cfg | grep include | grep -v ^#enthalten sind.
Starten Sie den Dienst neu:
sudo systemctl restart nagios-nrpe-server.serviceÜberprüfen Sie, ob der NRPE-Dienst läuft:
cat /etc/services | grep nrpe
netstat -at | grep nrpeÜberprüfen Sie jetzt einen der zuvor definierten NRPE-Befehle vom Nagios-Server:
Beachten Sie, dass der NRPE-Befehl 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:
sudo apt-get install nagios-nrpe-plugininstallieren.
Zusammenfassend wird NRPE ein Skript auf einem Remote-Host ausführen und den Exit-Code an den Nagios-Server zurückgeben.
Konfiguration für benutzerdefinierte Skripte
Um ein benutzerdefiniertes Skript als Plugin zu verwenden, das über NRPE remote ausgeführt wird, sollten Sie zuerst das Skript auf dem Server schreiben, zum Beispiel in /usr/local/scripts/check_root_home_du.sh:
#!/bin/bash
homeUsage=$(du -s /root/ | cut -f1)
if (($homeUsage<=$((1024*1024)))); then
echo "OK - Die Nutzung des Root-Heims beträgt $(du -sh /root/ | cut -f1)"
exit 0
elif (($((1024*1024))<$homeUsage && $homeUsage<=$((3*1024*1024)))); then
echo "WARNUNG - Die Nutzung des Root-Heims beträgt $(du -sh /root/ | cut -f1)"
exit 1
elif (($((3*1024*1024))<$homeUsage)); then
echo "KRITISCH - Die Nutzung des Root-Heims beträgt $(du -sh /root/ | cut -f1)"
exit 2
else
echo "UNBEKANNT - Erhaltener Wert: $homeUsage"
exit 3
fiErlauben Sie die Ausführung des Skripts:
sudo chmod +x /usr/local/scripts/check_root_home_du.shDas vorherige Skript ist ein sehr einfaches Beispiel, das die Festplattennutzung des Verzeichnisses /root überprüft und einen Schwellenwert für die Einstufung als OK, Warnung oder kritisch festlegt.
Fügen Sie den Befehl zur NRPE-Konfigurationsdatei auf dem Client ( /etc/nagios/nrpe_local.cfg) hinzu:
# Benutzerdefiniert
command[check_root_home_du]=/usr/local/scripts/check_root_home_du.shUnd starten Sie den NRPE-Listener neu:
sudo systemctl restart nagios-nrpe-server.serviceJetzt können wir auf den Server zugreifen und ihn wie jedes Standard-Plugin testen.
Den NRPE-Check in den Serverkonfigurationsdateien festlegen
Jetzt wissen wir, dass das benutzerdefinierte Plugin auf dem Client und auf dem Server funktioniert und dass NRPE korrekt kommuniziert, können wir die Nagios-Dateien für die Überprüfung des Remote-Geräts konfigurieren. Stellen Sie also auf dem Server die Dateien ein:
/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 das !-Zeichen den Befehl von den Argumenten im check_command-Eintrag trennt. Dies definiert, dass check_nrpe der Befehl ist und check_root_home_du der Wert von $ARG1$ ist.
Außerdem sollten Sie je nach Ihrer Konfiguration diese letzte Datei zur Hauptdatei ( /usr/local/nagios/etc/nagios.cfg) hinzufügen:
#...
cfg_file=/usr/local/nagios/etc/objects/nrpeclient.cfg
#...Überprüfen Sie die Konfiguration und, falls keine Fehler oder Warnungen vorhanden sind, laden Sie den Dienst neu:
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfgsudo systemctl reload-or-restart nagios.serviceUnd jetzt haben Sie eine neue benutzerdefinierte Überprüfung auf einem Host:
Fazit
Nagios hat eine riesige Bibliothek von Plugins, die im Nagios Exchange verfügbar sind. In einer großen Umgebung ist es jedoch sehr wahrscheinlich, dass einige benutzerdefinierte Überprüfungen für spezifische Anwendungen benötigt werden, zum Beispiel: Überprüfung eines bestimmten Aufgabenresultats, Überwachung einer intern entwickelten Anwendung und vieles mehr.
Die Flexibilität, die Nagios bietet, ist perfekt für diese Szenarien.
Erhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.