Zuletzt aktualisiert am 10. Januar 2026 von Lars
Was ist Nagios und was ist Nagios Core?
Nagios ist ein weitverbreitetes System zur Überwachung von IT-Infrastrukturen. Es wird in zwei unterschiedlichen Varianten angeboten: Nagios Core ist die Open-Source-Variante. Nagios XI baut auf Nagios Core auf, bietet zusätzliche Funktionalitäten und Support und ist kostenpflichtig.
Primärer Einsatz für mich war das Pingen von Systemen, meist Websites, um festzustellen, ob diese noch am "Leben" sind. Ursprünglich habe ich dazu einen Gratis-Account eines Dienstleisters genutzt. Da ich halt doch so einiges am Laufen habe, meinte dieser, ich dürfe den Gratis-Account nicht behalten, da der nicht für "Professionals" wäre. Das war Ansporn genug, mich mit Nagios auseinanderzusetzen. Zunächst auch primär zum Pingen. Seit ich mich dann zunehmend mit Raspberry Pi beschäftige und einige eigene Systeme habe, bin ich auch an weiteren Checks dran.
Inhaltsverzeichnis
Nagios Core
Ich setze bei mir Nagios Core ein, um meine kleine Umgebung zu überwachen. Nagios Core bietet immerhin auch eine Weboberfläche, auch wenn diese nicht so arg schick ist. Die Produkt-Homepage findest du hier.
Zunächst habe ich mir Nagios auf einem externen Server unter Ubuntu installiert. Inzwischen läuft es aber auf einem Raspberry Pi 4 bei mir in meinem Home-Lab.
Ich bin Einsteiger und habe sicherlich vieles nicht korrekt oder Best Practice gemacht. Diese Mitschrift dient mir selbst als Doku, damit ich Nagios schnell wieder einrichten kann. Ich werde den Artikel regelmässig mit neuen Learnings updaten.
Installation Nagios
Zur Vorbereitung erst einmal auf dem Server
$ sudo apt update
$ sudo apt upgradeDanach die nötigen Abhängigkeiten herunterladen
$ sudo apt-get update
$ sudo apt-get install -y autoconf gcc libc6 make wget unzip apache2 php libapache2-mod-php libgd-dev ufw
$ sudo apt-get install -y openssl libssl-devBeim Raspberry Pi fehlt ausserdem
$ sudo apt install -y libssl-devDownloading Quellcode Nagios
$ cd /tmp
$ wget -O nagioscore.tar.gz $(wget -q -O - https://api.github.com/repos/NagiosEnterprises/nagioscore/releases/latest | grep '"browser_download_url":' | grep -o 'https://[^"]*')
$ tar xzf nagioscore.tar.gzKompilieren des Quellcodes
$ cd /tmp/nagios-*
$ sudo ./configure --with-httpd-conf=/etc/apache2/sites-enabled
$ sudo make allUser und Group anlegen
Mit den folgenden Kommandos werden der Nagios-User und die Nagios-Gruppe angelegt. Der www-data User wird ausserdem der Nagios-Gruppe hinzugefügt.
$ sudo make install-groups-users
$ sudo usermod -a -G nagios www-dataInstallieren der Binaries
Dieser Schritt installiert die Binärdateien, CGIs und HTML-Dateien.
$ sudo make install$ sudo make install-initExternal Command File installieren
$ sudo make install-commandmodeWas ist das External Command File?
- Es ermöglicht externen Programmen oder Skripten, Befehle an das Monitoring-System zu senden, z. B. um den Status von Diensten zu ändern, Benachrichtigungen zu deaktivieren oder geplante Downtimes zu setzen.
- Die Datei fungiert als Kommunikationsschnittstelle zwischen externen Tools und dem Monitoring-System.
Configuration Files installieren
Mit dem folgenden Kommando installierst du die BEISPIEL-Konfigurationsdateien. Sie sind notwendig, weil Nagios einige Konfigurationsdateien benötigt, um überhaupt starten zu können.
sudo make install-configInstallieren von Service / Daemon
Hier werden die Dienst- oder Daemon-Dateien installiert und so konfiguriert, dass sie beim Systemstart automatisch gestartet werden.
sudo make install-daemoninitInstallieren der Apache Config Files
Damit installierst du die Konfigurationsdateien für den Apache-Webserver und richtest die entsprechenden Einstellungen ein.
sudo make install-webconf
sudo a2enmod rewrite
sudo a2enmod cgiFirewall konfigurieren
Du musst in deiner lokalen Firewall eingehenden Datenverkehr über Port 80 erlauben, damit du auf die Nagios-Core-Weboberfläche zugreifen kannst.
sudo ufw allow Apache
sudo ufw reloadAuch SSH, damit du dich nicht aussperrst.
sudo ufw allow 22/tcpUnd VNC, falls benötigt.
sudo ufw allow 5900/tcp
Bei mehreren Displays VNC ggf.:
sudo ufw allow 5900:5905/tcpUnd natürlich eventuell andere Dienste nicht vergessen.
nagiosadmin User Account erstellen
Du brauchst einen httpasswd-User, um dich in Nagios einloggen zu können. Mit dem folgenden Befehl legst du einen Benutzer namens "nagiosadmin" an. Du wirst aufgefordert, ein Passwort für diesen Account festzulegen.
sudo htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadminApache Webserver starten
sudo service apache2 restartNagios Service / Daemon starten
sudo systemctl start nagios.serviceNagios Plugins installieren
Nagios-Plugins sind kleine Programme, die den Zustand von Diensten und Ressourcen überprüfen. Damit kannst du wichtige Kennzahlen wie CPU-Auslastung oder Netzwerkverbindungen überwachen. Die Ergebnisse der Plugins nutzt Nagios, um Benachrichtigungen zu verschicken oder Aktionen auszulösen.
Plugins herunterladen und auspacken
$ cd /tmp
$ wget -O nagios-plugins.tar.gz $(wget -q -O - https://api.github.com/repos/nagios-plugins/nagios-plugins/releases/latest | grep '"browser_download_url":' | grep -o 'https://[^"]*')
$ tar zxf nagios-plugins.tar.gzPlugins Kompilieren und installieren
$ cd /tmp/nagios-plugins-*/
$ sudo ./configure
$ sudo make
$ sudo make installNagios Service / Daemon Kommandos
Du wirst häufig den Nagios-Service starten, stoppen, neu starten müssen. Die notwendigen Kommandos findest du hier:
$ sudo systemctl start nagios.service
$ sudo systemctl stop nagios.service
$ sudo systemctl restart nagios.service
$ sudo systemctl status nagios.serviceNagios kann nicht gestartet werden?
Beispiel-Ausgabe
$ sudo systemctl restart nagios.service
Job for nagios.service failed because the control process exited with error code.
See "systemctl status nagios.service" and "journalctl -xeu nagios.service" for details.Was da schief läuft, siehst du mit dem folgenden Befehl:
$ sudo /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfgInstallations-Orte - was ist wo?
nagios.conf
Die nagios.conf ist die Hauptkonfigurationsdatei für Nagios. Sie definiert grundlegende Einstellungen wie Pfade, Logging, Konfigurationen und mehr.
nagios.conf ist in
/usr/local/nagios/etc/Objektdateien
Steuerdateien sind in
/usr/local/nagios/etc/objectsIn diesem Verzeichnis sind unter anderem die Dateien commands.cfg, contacts.cfg, localhost.cfg, timeperiods.cfg, templates.cfg und weitere Beispiele. Sie enthalten Definitionen für Kommandos, Kontakte, Host-Einstellungen, Zeiträume und Vorlagen.
Plugins
Die Plugins befinden sich unter
/usr/local/nagios/libexec/nagios.cfg
Die Datei nagios.cfg ist die zentrale Konfigurationsdatei von Nagios Core – dem Kern des Überwachungssystems Nagios. In dieser Datei werden alle globalen Einstellungen definiert, die das Verhalten und den Betrieb von Nagios bestimmen. Du findest dort zum Beispiel die Zeile
log_file=/usr/local/nagios/var/nagios.logSie legt fest, in welche Datei Nagios Core seine Protokolleinträge schreibt.
Jede Aktivität von Nagios (wie Host- und Serviceüberprüfungen, Benachrichtigungen oder Warnungen) wird in dieser Logdatei vermerkt, damit sie später ausgewertet oder archiviert werden kann.
In der nagios.cfg werden über die Zeilen
cfg_file=/usr/local/nagios/etc/objects/commands.cfg
cfg_file=/usr/local/nagios/etc/objects/contacts.cfg
cfg_file=/usr/local/nagios/etc/objects/timeperiods.cfg
cfg_file=/usr/local/nagios/etc/objects/templates.cfg
:einzelne zusätzliche Konfigurationsdateien angegeben, die Nagios beim Starten (bzw. bei einem Reload) einliest. Das bedeutet konkret:
- commands.cfg: Enthält Definitionen aller Befehle (Commands), die Nagios für Checks und Benachrichtigungen ausführt.
- contacts.cfg: Enthält Informationen über Kontakte bzw. Kontaktgruppen, die bei einem Alarm benachrichtigt werden sollen.
- timeperiods.cfg: Legt fest, wann und in welchen Zeitfenstern Checks oder Benachrichtigungen durchgeführt werden dürfen.
- templates.cfg: Enthält Vorlagen (Templates) für Hosts, Services oder Kontakte, um wiederkehrende Einstellungen zu vereinfachen.
Das definiert, dass diese Dateien von Nagios verarbeitet werden und die dort definierten Objekte (Befehle, Kontakte, Zeitfenster, Vorlagen) in die Gesamt-Konfiguration übernommen wird.
Let's Encrypt Zertifikat für Nagios
Für die Weboberfläche solltest du auch ein SSL-Zertifikat installieren. Hier bietet sich ein kostenloses Let’s-Encrypt-Zertifikat an.
Dazu Certbot installieren.
$ sudo apt install certbot python3-certbot-apacheZertifikat ausstellen lassen
$sudo certbot --apache -d nagios.meine-domain.deLet’s Encrypt-Zertifikate sind standardmässig 90 Tage gültig. Certbot konfiguriert in der Regel automatisch einen Cronjob bzw. systemd-Timer, der regelmässig die Zertifikate erneuert und den Webserver neu lädt. Du kannst manuell prüfen, ob eine Erneuerung klappt, indem du testweise ausführst:
$ sudo certbot renew --dry-runNagios aufrufen
Die Nagios-Weboberfläche ist jetzt über den Webserver im Unterverzeichnis /nagios erreichbar. Beispiel: Du hast eine URL meinserver.test.de, dann würdest du Nagios unter meinserver.test.de/nagios erreichen.
Die Oberfläche wirkt sehr old-fashioned, aber sie ist recht gut strukturiert. In der Regel solltest du nach einiger Zeit ganz gut damit zurecht kommen.

E-Mail Benachrichtigung konfigurieren
Für E-Mail-Benachrichtigungen brauchst du einen installierten E-Mail-Service. Am besten verwendest du Postfix. Die Anleitung dazu findest du unter Postfix auf Raspberry Pi
E-Mail hinterlegen
Die E-Mail hinterlegst du in der contacts.cfg
$ sudo vim /usr/local/nagios/etc/objects/contacts.cfg###############################################################################
#
# CONTACTS
#
###############################################################################
# Just one contact defined by default - the Nagios admin (that's you)
# This contact definition inherits a lot of default values from the
# 'generic-contact' template which is defined elsewhere.
define contact {
contact_name nagiosadmin ; Short name of user
use generic-contact ; Inherit default values from generic-contact template (defined a
bove)
alias Nagios Admin ; Full name of user
email
@
; <<***** CHANGE THIS TO YOUR EMAIL ADDRESS ******
service_notification_period 24x7
service_notification_options w,u,c,r
service_notification_commands notify-service-by-email
}
###############################################################################
#
# CONTACT GROUPS
#
###############################################################################
# We only have one contact in this simple configuration file, so there is
# no need to create more than one contact group.
define contactgroup {
contactgroup_name admins
alias Nagios Administrators
members nagiosadmin
}Konfig prüfen
$ sudo /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfgNagios neu starten
$ sudo systemctl restart nagios.serviceZu den Benachrichtigungsoptionen kommen wir noch weiter unten.
Nagios-Konfiguration
Im gezeigten Ausschnitt aus der Nagios-Konfiguration siehst du mehrere Objekttypen, die mit dem Schlüsselwort define beginnen: host, hostgroup und service. Nagios unterteilt seine Konfigurationsobjekte in verschiedene Kategorien, die jeweils eigene Pflicht- und Zusatzattribute haben.
Host-Definition
define host {
use linux-server
host_name localhost
alias localhost
address 127.0.0.1
}use: Verweist auf ein Host-Template (z. B. linux-server), sodass Standardwerte (z. B. Check-Intervalle, Benachrichtigungs-Optionen) übernommen werden.
- host_name: Eindeutiger Name des Hosts in Nagios.
- alias: Eine lesbare Bezeichnung für den Host (z. B. "Datenbankserver" o. Ä.). Der Alias wird aber auch in der E-Mail-Benachrichtigung verwendet. Du solltest also schon einen Namen wählen, der einen eindeutigen Rückschluss auf das Gerät zulässt.
- address: IP-Adresse oder Hostname (DNS-Name).
Diese Definition sagt Nagios, dass es sich um einen Host namens localhost handelt, dessen Adresse 127.0.0.1 ist. Dank des Templates linux-server erbt dieser Host Einstellungen aus einer vordefinierten Vorlage.
Hostgroup-Definition
define hostgroup {
hostgroup_name linux-servers
alias Linux Servers
members localhost
}- hostgroup_name: Der interne Name der Hostgruppe, unter dem Nagios die Gruppe führt.
- alias: Eine lesbare Bezeichnung für die Hostgruppe.
- members: Liste der Hosts, die zu dieser Hostgruppe gehören (kommagetrennt, wenn es mehrere sind).
Wichtig: Eine Hostgruppe ermöglicht es dir, mehrere Hosts zu einer logischen Gruppe zusammenzufassen. Später kann man in Service-Definitionen, Benachrichtigungen oder Reports gezielt auf diese Gruppe verweisen (z. B. Checks für alle Linux-Server auf einmal).
Beispiel - eine Definition einer Gruppe von Webserver
define hostgroup {
hostgroup_name Web-Server ; The name of the hostgroup
alias Web-Server ; Long name of the group
members it-zeugs.de,lars-schlageter.com
}Beispiel - eine Definition einer Gruppe von mehreren Linux-Servern
define hostgroup {
hostgroup_name linux-servers
alias Linux Servers
members rasp-nas,nextcloudpi,rasp-backupDu kannst eigene Hostgruppen definieren. Damit Nagios diese kennt, musst du sie in der nagios.conf einbinden.
$ sudo vim /usr/local/nagios/etc/nagios.cfgSuche nach dem entsprechenden Abschnitt und ergänze.
cfg_file=/usr/local/nagios/etc/objects/websites.cfg
cfg_file=/usr/local/nagios/etc/objects/mailservers.cfg
cfg_file=/usr/local/nagios/etc/objects/linux-hosts.cfg
:
:Service-Definition
In der Datei kannst du direkt auch die zugehörigen Services definieren.
Beispiel Service-Definition für eine ganze Gruppe
define service {
use local-service
hostgroup_name linux-servers
service_description PING
check_command check_ping!100.0,20%!500.0,60%
notifications_enabled 1
contact_groups admins
notification_interval 1440
}- use: Definiert das verwendete Template. Alle dort definierten Einstellungen werden übernommen, ausser du überschreibst sie hier explizit.
- hostgroup_name: Dieser Service gilt für alle Hosts, die Mitglied der Hostgruppe
linux-serverssind. - service_description: Name des Services, so wie er im Webinterface angezeigt wird.
- check_command: Check, der ausgeführt wird
check_ping= Plugin100.0,20%= WARNING (Latenz / Paketverlust)500.0,60%= CRITICAL
- notifications_enabled: Aktiviert Benachrichtigungen für diesen Service
- contact_groups: Nur Mitglieder der Kontaktgruppe
adminsbekommen Benachrichtigungen. - notification_interval: Wiederholungsintervall für Benachrichtigungen in Minuten.
1440 = 1× pro Tag, solange das Problem besteht.
Beispiel Service-Definition für einen einzelnen Server
define service {
use local-service
host_name raspz-web01
service_description HTTP
check_command check_http!-H 192.168.0.212 -p 80 -s "Willkommen"
notifications_enabled 0
}Hier wird statt hostgroup_name host_name verwendet. Die Notifcations sind disabled.
Template
Mit use wird ein Template definiert, aber wo ist das definiert?
Suchen kannst du es mit
$ grep -R "define service" .Bei mir ist das in templates.cfg definiert.
Gerade relevant für Einsteiger dürften local-service und generic-service.
local-service ist eigentlich gedacht für den Nagios-Server selbst und generic-service können für Services im lokalen Netz verwendet werden.
Linux-Server im lokalen Subnet überprüfen
Damit du weitere lokale Linux-Server verwalten kannst, musst du auf diesen erst einmal den nrpe-Agent installieren und eventuell konfigurieren:
$ sudo apt-get update
$ sudo apt-get install nagios-nrpe-server nagios-pluginsDie Client-Konfiguration findest du unter:
$ sudo vim /etc/nagios/nrpe.cfgHier musst du in jedem Fall die IP des Nagios-Servers ergänzen, z. B.
allowed_hosts=127.0.0.1,192.168.0.100Je nach Check sind weitere Anpassungen nötig, siehe weiter unten.
Den Agenten starten
$ sudo systemctl restart nagios-nrpe-server
$ sudo systemctl enable nagios-nrpe-serverAber auch auf dem Server muss das Tool vorhanden sein, das mit den Agenten kommunizieren kann. Es heisst check_nrpe.
$ sudo apt install nagios-nrpe-pluginNagios kennt jetzt aber zunächst den Befehl check_nrpe gar nicht. Daher musste ich auf dem Nagios-Server erst einmal in der commands.cfg ergänzen:
define command {
command_name check_nrpe
command_line /usr/lib/nagios/plugins/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}Anschliessend auf dem Nagios-Server
$ sudo systemctl restart nagios.serviceUm die Verbindung vom Nagios-Server auf den Client zu testen, kann man folgenden Befehl verwenden
$ /usr/lib/nagios/plugins/check_nrpe -H <IP Client>Erwartetes Ergebnis
NRPE v4.0.xNRPE arbeitet über TCP Port 5666. Wenn du also einen Fehler erhältst, prüfe, ob auf dem Client in der /etc/nagios/nrpe.cfg der allowed_hosts= Eintrag passt oder eine Firewall den Verkehr blockt.
Für Windows gibt es auch einen Agenten. Da ich im Moment aber keine passende Windows-Maschine habe, lasse ich das erst einmal aussen vor.
Häufige Anpassungen
Check auf Root-File-System
Ergänze in /etc/nagios/nrpe.cfg
command[check_root]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /Starte NRPE neu
$ sudo systemctl restart nagios-nrpe-serverFrage auf dem Nagios-Server den Check zum Beispiel so ab:
define service {
use generic-service
hostgroup_name linux-servers
service_description Root Partition
check_command check_nrpe!check_root
notification_interval 1440
}Check auf alle Partitionen
Schicker ist ein Check auf alle Partitionen. Hier gibt es aber Besonderheiten zu beachten. Je nach System sind bestimmte Mounts auszuschliessen. Zum Beispiel weil der Agent auf diese keine Berechtigung hat. Der unten stehende Check muss daher möglicherweise auch erweitert werden. Bei meiner Umgebung – Raspberry Pis – hat das so funktioniert.
Ergänze in /etc/nagios/nrpe.cfg
command[check_all_disks]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -l -A -X tmpfs -X devtmpfs -X squashfs -i '^/run/user' -i '^/tmp'-w 20% (Warning): Schwellwert für den Warnzustand. Erzeugt eine Warnung, wenn der freie Speicherplatz unter 20 % fällt.
-c 10% (Critical): Schwellwert für den kritischen Zustand. Erzeugt einen Alarm, wenn der freie Speicherplatz unter 10 % fällt.
-l (Local): Beschränkt die Prüfung auf lokale Dateisysteme. Verhindert, dass hängende Netzwerk-Mounts (wie NFS oder SMB) das Plugin blockieren.
-A (All): Wählt explizit alle Pfade für die Prüfung aus. Dies ist technisch notwendig, damit die nachfolgenden Filter (-i) eine Basis zum Arbeiten haben.
-X [Typ] (Exclude Type): Schliesst komplette Dateisystem-Klassen aus:
tmpfs/devtmpfs: Virtuelle RAM-Speicher.squashfs: Read-Only Container (z. B. Ubuntu Snaps), die immer als "100% voll" gemeldet würden.
-i '[Regex]' (Ignore): Ignoriert Pfade basierend auf einem regulären Ausdruck:
^/run/user: Ignoriert benutzerbezogene Laufwerke (gvfs, doc-Portale), auf die Nagios keinen Zugriff hat.^/tmp: Ignoriert temporäre Mounts (wie AppImages oder Collabora-Instanzen), die dynamische Namen haben.
Starte NRPE neu
$ sudo systemctl restart nagios-nrpe-serverFrage auf dem Nagios-Server den Check zum Beispiel so ab:
define service {
use generic-service
hostgroup_name linux-servers
service_description Check All Disks
check_command check_nrpe!check_all_disks
notification_interval 1440
}CPU-Load Check
Ergänze in /etc/nagios/nrpe.cfg
command[check_load]=/usr/lib/nagios/plugins/check_load -r -w 0.8,0.7,0.6 -c 1.5,1.2,1.0Der Parameter -r gibt die Last prozentual zu den Kernen zurück. Somit kannst du den Check unabhängig von der Anzahl der CPUs des Systems einsetzen.
Starte NRPE neu
$ sudo systemctl restart nagios-nrpe-serverFrage auf dem Nagios-Server den Check zum Beispiel so ab:
define service {
use local-service
hostgroup_name linux-servers
service_description Current Load
check_command check_nrpe!check_load
notification_interval 1440
}Testmöglichkeit wäre hier das Tool stress_ng
$ sudo apt install stress-ngBeispiel: 4 Kerne für 60 Sekunden voll auslasten
$ stress-ng --cpu 4 --timeout 60s...to be continued...
Und sonst?
Wo ist eigentlich die Apache-Config?
Die befindet sich bei mir unter
/etc/apache2/sites-enabled/nagios.conf
CPU Load durch NRPE-Agent
Der Client-Agent scheint doch ordentlich Last generiert zu haben. Denn beide meiner Raspberry Pi Zeros sind über Nacht getaucht.
Natürlich war das hier auch übertrieben, auf diesen auch alle Parameter zu überwachen, aber die sind ja eigentlich auch nur Test-System. Werde diese nur noch per Ping prüfen.
So deinstalliere ich den Agent wieder:
$ sudo apt-get purge nagios-nrpe-server nagios-plugins
$ sudo apt purge monitoring-plugins*
$ sudo apt-get autoremove --purgeReste entfernen
$ sudo rm -rf /etc/nagios /etc/nrpe.d /etc/nagios-pluginAnschliessend rebooten.
Zeit gespart? Dann unterstütze doch it-zeugs.de
Wenn dieser Tipp dir geholfen hat, Zeit zu sparen, überlege bitte, eine kleine Spende zu hinterlassen. Dein Beitrag hilft mir, weiterhin wertvolle Inhalte zu erstellen. Du kannst unter diesem Linke spenden: Spende it-zeugs.de
Falld du nicht spenden willst oder kannst, dann wäre es toll, wenn du deinen nächsten Amazon Einkauf mit diesem Link beginnen würdest: Amazon Link. Für dich wird es nicht teurer, ich bekomme aber einen kleinen Beitrag.
Vielen herzlichen Dank ❤️

Hallo, hier schreibt Lars. Dipl-Ing. Ingenieurinformatik (FH). Seit Jahrzehnten in der IT tätig. Geprüfter (und begeisterter) Webmaster. Ebenso begeisterter Windows-, Apple-, und Office-User. Ich schreibe über alle möglichen Themen rund um IT. Mehr über mich erfährst du hier: Über mich. Danke für deinen Besuch!
