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
fi

Basierend 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.sh

Und 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.cfg

Sie sollten etwas wie folgt erhalten:

Überprüfen Sie die Nagios-Konfiguration

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.service

Nach 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_nrpe

Erlauben 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.150

Definieren 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-plugin

installieren.

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
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 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.sh

Und starten Sie den NRPE-Listener neu:

sudo systemctl restart nagios-nrpe-server.service

Jetzt 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.cfg
sudo systemctl reload-or-restart nagios.service

Und 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.

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.