Icinga 2 · 6 min read · Nov 18, 2025

Fügen Sie einen neuen Host und Dienste hinzu, die von Icinga 2 überwacht werden sollen

In diesem Tutorial zeige ich Ihnen, wie Sie einen neuen Host hinzufügen, der von Icinga 2 überwacht werden soll, und wie die Dienste des Hosts, wie ein Web-HTTP-Server, von Icinga überwacht werden können. Ich werde Ihnen auch zeigen, wie Sie Ihren eigenen benutzerdefinierten Icinga-Plugin-Befehl erstellen, um UDP-Dienste in Ihrer Netzwerk-Infrastruktur zu überwachen.

Icinga 2 bietet eine Plugin-Infrastruktur, die es ermöglicht, Server- und Dienstprüfungen sowie Benachrichtigungen einfach umzusetzen. Diese Tatsache ermöglicht es Systemadministratoren und Programmierern, neue Funktionen für Icinga 2 zu erstellen und spezielle Befehle zu erstellen, die auf die Überprüfung verschiedener Aspekte eines Hosts, eines Netzwerkdienstes oder einer Netzwerkfunktionalität spezialisiert sind.

Icinga 2 speichert Hostdefinitionen mit Objektattributen, die für Dienstregeln, Benachrichtigungen, Abhängigkeiten und geplante Ausfallzeiten in der Datei hosts.conf verwendet werden, die sich im Verzeichnis /etc/icinga2/conf.d/ befindet. In dieser Datei können Sie eine neue Hostdefinition hinzufügen, die vom Icinga2-Überwachungsprozess überprüft werden soll. Im folgenden Beispiel fügen wir eine neue Definition hinzu, damit unser Standardgateway-Router regelmäßig von Icinga2 überprüft werden kann, um zu sehen, ob er über ICMP-Überprüfungen online ist.

nano /etc/icinga2/conf.d/hosts.conf

Gehen Sie zum Ende der Datei und fügen Sie die folgenden Zeilen hinzu, um die neue Hostdefinition hinzuzufügen.

object Host "Router" {  
  address = "192.168.1.1"  
  check_command = "hostalive"  
}

Zum Beispiel möchten wir beim Haupt-Router auch den Status des HTTP-Webservers überprüfen, der für die Authentifizierung und die Einstellungen verwendet wird. Die folgenden Zeilen überprüfen den Webserver auf dem Router, um zu sehen, ob der HTTP-Server aktiv ist und mit den richtigen HTTP-Codes antwortet.

object Service "http" {  
  host_name = "Router"  
  check_command = "http"  
}

Webserver mit Icinga 2 überwachen

Damit Icinga 2 die neuen Hostdefinitionen aufnimmt und die neue Ressource regelmäßig überwacht, müssen Sie den Prozess neu starten, indem Sie den folgenden Befehl ausführen.

systemctl restart icinga2.service

Um den Status des neu hinzugefügten Hosts, in diesem Fall des Routers, zu überprüfen, melden Sie sich im Icinga 2 Web-Panel an und navigieren Sie zu Übersicht -> Hosts. Im rechten Bereich sollten Sie den Status des neu hinzugefügten Hosts sehen, wie im folgenden Bild dargestellt, das den Status unseres Routers beschreibt. Hostprüfungen werden im Grunde genommen über das ICMP-Protokoll durchgeführt, und Icinga2 zeigt die durchschnittliche Rundreisezeit für einen Host im Web-Panel an.

Icinga 2 Hoststatus

Wenn Sie den Status der Host-HTTP-Dienstprüfungen anzeigen möchten, navigieren Sie zu Übersicht -> Dienstgruppen und klicken Sie auf HTTP-Prüfungen. Im rechten Bereich sollten Sie den Status des Router-HTTP-Dienstes sehen, wie im folgenden Screenshot dargestellt.

Hostdienststatus

Icinga 2 wird mit einer Reihe von vordefinierten Befehlen geliefert, die verwendet werden können, um eine Vielzahl von Diensten zu überwachen. Aber diese Standardbefehle sind manchmal nicht ausreichend, um benutzerdefinierte Dienste zu überprüfen. In diesem Fall besteht ein Ansatz darin, Ihr eigenes benutzerdefiniertes Befehls-Skript zu erstellen, das von Icinga 2 aufgerufen werden kann, um den Dienst zu überwachen. Im folgenden Beispiel zeigen wir Ihnen, wie Sie ein neues benutzerdefiniertes Befehls-Skript hinzufügen, um den Status verschiedener UDP-Dienste in Ihrem Netzwerk zu überprüfen. Der benutzerdefinierte Befehl muss parametrisiert sein und muss mindestens zwei Parameter in der Form von –H hostname oder IP und –p Portnummer enthalten. Das benutzerdefinierte Befehls-Skript zur Überprüfung eines UDP-Dienstport sollte im Verzeichnis /usr/lib/nagios/plugins/ abgelegt werden und sollte den Inhalt wie im folgenden Beispiel haben.

nano /usr/lib/nagios/plugins/check_udpport

check_udpport Datei-Auszug.

#!/bin/bash  
while getopts H:p: option  
do  
 case "${option}"  
in  
H) addr=${OPTARG};;  
p) port=${OPTARG};;  
esac  
done  
  
/bin/nc -vz -u "$addr" "$port" > /dev/null 2>&1  
  
stat=`echo $?`  
  
if test $stat -eq 0; then  
echo "Port $port ist geöffnet auf $addr"  
exit 0  
else  
echo "Port $port ist nicht geöffnet auf $addr"  
exit 2  
fi

Icunga benutzerdefiniertes UDP-Plugin

Lassen Sie uns versuchen zu verstehen, wie dieses Skript funktioniert. Wie Sie sehen können, ist das Plugin nichts anderes als ein einfaches Bash-Skript. Wir verwenden einen while-Kontrollausdruck, um durch zwei Parameter zu schleifen, die durch die Buchstaben H und p definiert sind. Die beiden Buchstaben H und p der Shell-Variablen sind parametrisiert und werden als Befehlszeilenargumente mit der case-Anweisung analysiert. Die case-Anweisung testet, ob die Parameter existieren und erklärt sie für die Variablen addr und port. Als nächstes werden die Variablen $ addr und $ port als Befehlsoptionen für den netcat-Befehl hinzugefügt, der wiederum überprüft, ob die Portnummer, die in der $port-Variable definiert ist, für den Host mit der IP-Adresse, die durch die $addr-Variable definiert ist, geöffnet ist. Die Ausgabe des netcat-Befehls und eventuelle Fehler sind für dieses Plugin von keinem Interesse, daher werden sie in die Linux-Schwarze-Hole-Datei /dev/null verworfen. Was wir benötigen, ist der Rückgabecode des netcat-Befehls. Nachdem netcat den Port auf dem Host überprüft hat, gibt es immer den Rückgabecode 0 zurück, falls der überprüfte UDP-Port geöffnet ist. Der Rest des Befehls ist ziemlich einfach. Eine if-else-Fallbedingung gibt Folgendes aus: Wenn der UDP-Port auf der angegebenen IP-Adresse geöffnet ist, wird der String mit dem Inhalt „Port ist geöffnet“ für diese Host-IP-Adresse zusammen mit dem Rückgabecode 0 ausgegeben. Der Rückgabecode 0 ist immer der Erfolgs- oder Fehlercode, der von einem Prozess in Linux zurückgegeben wird. Wenn der UDP-Port nicht geöffnet ist (der Rückgabecode von netcat ist etwas anderes als 0), wird der String ausgegeben, der besagt, dass „der Port nicht geöffnet ist“ für den Host, und der Rückgabecode 2 angehängt. Die Rückgabecodes, die nach jedem ausgegebenen String in diesem Skript hinzugefügt werden, haben eine große Bedeutung für die Icinga2-Prüfungen, wie unten erklärt.

Befehls-Plugin-Rückgabecode für den Dienststatus oder Hoststatus in Icinga 2:

0 = OK für Dienste und UP für Hosts

1 = WARNUNG für Dienste und UP oder DOWN/UNREACHABLE für Hosts (der Host fluktuiert oder ändert häufig seinen Status)

2 = KRITISCH für Dienste und DOWN/UNREACHABLE für Hosts

3 = UNBEKANNT DOWN/UNREACHABLE

Im Grunde genommen wird Icinga 2 dieses Skript mit Host- und Portparametern ausführen und zwei Zustände zurückgeben: entweder der UDP-Port ist nicht erreichbar und wird Sie darauf hinweisen, dass der UDP-Dienst des Hosts kritisch ist, oder der UDP-Port ist erreichbar und wird Ihnen mitteilen, dass der UDP-Dienst unter guten Bedingungen läuft und in Ordnung ist.

Nachdem Sie die Skriptdatei bearbeitet haben, speichern Sie sie und schließen Sie sie und stellen Sie sicher, dass die Datei ausführbar ist, indem Sie die Ausführungsberechtigungen mit dem folgenden Befehl hinzufügen.

chmod +x /usr/lib/nagios/plugins/check_udpport

Um zu testen, ob das Skript wie erwartet funktioniert, führen Sie den Befehl gegen einen geöffneten UDP-Port und einen geschlossenen UDP-Port über einen Host in Ihrem Netzwerk aus, indem Sie die folgende Syntax verwenden.

Hier wird der TFTP-Server für den Host 192.168.1.2 überprüft.

/usr/lib/nagios/plugins/check_udpport –H 192.168.1.2 –p 69 

Simulieren Sie die Überprüfungen gegen einen UDP-Port, von dem Sie sicher wissen, dass er geschlossen ist.

/usr/lib/nagios/plugins/check_udpport –H 192.168.1.2 –p 68

UDP-Port testen

Damit dieses neue benutzerdefinierte Plugin in Icinga 2 weit verbreitet verwendet werden kann, fügen Sie eine neue Befehlsdefinition in der Icinga 2-Befehlskonfigurationsdatei hinzu, wie im folgenden Beispiel gezeigt.

nano /etc/icinga2/conf.d/commands.conf

Gehen Sie zum Ende dieser Datei und fügen Sie die Befehlsdefinition wie folgt hinzu:

object CheckCommand "myudp" {  
  command = [ PluginDir + "/check_udpport" ]  
    
    arguments = {  
    "-H" = "$addr$"  
    "-p" = "$port$"  
}  
  vars.addr = "$address$"  
}

Fügen Sie die Icinga-Befehlsdefinition hinzu

Der Name des Befehls, der in den Icinga 2-Konfigurationen verwendet wird, um den check_udpport-Befehl aufzurufen, wäre „myudp“. Wir müssen die Adresse nicht angeben, wenn wir den Befehl für eine Dienst-Hostdefinition aufrufen, da sie durch die Icinga 2-Makrovariable $address$ fest codiert ist.

Um zu überprüfen, ob der Befehl wie erwartet funktioniert, fügen Sie eine neue Dienstdefinition für einen Host hinzu, um zu überprüfen, ob ein bestimmter UDP-Dienst geöffnet ist oder nicht. Zum Beispiel, um zu überprüfen, ob der DHCP-Port für den Host 192.168.1.2 geöffnet ist, fügen Sie die folgende Definition in die Icinga2 hosts.conf-Datei ein.

object Service "dhcp" {  
  host_name = "Pi.hole"  
  check_command = "myudp"  
vars.port = "67"  
}

UDP-Portprüfung in Icinga 2 hinzufügen

Starten Sie anschließend Icinga 2 neu, um die Änderungen zu übernehmen, und navigieren Sie zum Icinga 2 Web-Panel, Übersicht -> Hosts, klicken Sie auf Ihren spezifischen Host und überprüfen Sie den Status des UDP-Dienstes, wie im folgenden Screenshot dargestellt.

UDP-Dienststatus

Das ist alles! Sie haben erfolgreich einen Host hinzugefügt, und seine Dienste werden regelmäßig von der Icinga 2-Netzwerküberwachungsanwendung überprüft. Für weitere benutzerdefinierte Konfigurationen bezüglich der Icinga 2-Überwachungsengine und des benutzerdefinierten Befehls-Skripts besuchen Sie die Dokumentationsseite unter folgender Adresse: https://www.icinga.com/docs/icinga2/latest/doc/03-monitoring-basics/#check-commands

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.