Nagios Praxisbeispiele: Webserver (mysql, http, Systemauslaustung, Domains) überwachen

Nachdem in den beiden ersten Kapiteln ausführlich die Grundlagen von Nagios und dessen Konfiguration erläutert wurde, werden in dieser Anleitung einige interessante Beispiele erläutert. Hauptfokus dieses How-To's liegt auf der Überwachung von Linux-Webservern in einem einfachen Netzwerk. Das Ergebnis dieser Anleitung ermöglicht folgende Auswertung:

Nagios: Überwachung Linux-Server (Service, Status, Last Check, Duration)
Klicken zum Vergrößern

check_ping - Erreichbarkeit prüfen

Da hier ggf. Anfänger unter uns sind, beginnen wir mit einem simplen Beispiel. Die einfachste Möglichkeit des System-Monitorings ist einen Rechner auf seine Erreichbarkeit zu prüfen. Dies erreicht mit einem einfachen PING. Somit weiß man, dass ein Rechner per TCP/IP im Netzwerk erreichbar ist. check_ping hilft dem Administrator, einzelne Rechner oder Netzwerk-Routen zu prüfen.

# 'check_ping' command definition
define command{
command_name check_ping
command_line $USER1$/check_ping -H $HOSTADDRESS$ -w $ARG1$ -c $ARG2$ -p 5
}


define service{
use local-service
hostgroup_name http Server Gruppe
service_description PING
check_command check_ping!100.0,20%!500.0,60%
}

Erklärung: $HOSTADDRESS$ ist eine Systemvariable in Nagios und repräsentiert den Remote-Client, der beim Aufruf geprüft wird. -w und -c sind die Schwellenwerte für den Status Warnung und Kritisch. Der Service verwendet das Template local-service.

check_ntp_time - Uhrzeit prüfen

Es kann immer wieder vorkommen, dass die Systemzeit nicht mehr korrekt ist. Dies kann aber zu Fehlern führen, wenn die Uhrzeit auf einem Rechner stark abweicht, so dass derAdministrator sicher gehen muss, dass auf allen Systemen in einem Netzwerk die Uhrzeit identisch ist. Abhilfe schafft hier das Network Time Protocol, kurz ntp. Nagios verfügt standardmäßig über ein Plugin namens check_ntp_time, mit dessen Hilfe die Überwachung der Uhrzeit auf einem entfernten Rechner erfolgen kann. Voraussetzung ist, dass auf dem Client der NTP-Client aktiv ist.

define command {
command_name check_remotetime
command_line $USER1$/check_ntp_time -H $HOSTADDRESS$ -c 3600 -w 600
}

define service {
service_description Uhrzeit ; Name des Service
hostgroup_name http Server Gruppe ; Prüfe alle Clients dieser Hostgroup
check_command check_remotetime ; Definition des Befehl ; Definition des Befehlss
normal_check_interval 180 ; Prüfintervall, Status OK (alle 3 Stunden)
retry_check_interval 10 ; Prüfenintervall, Status Fehler (alle 10 Minuten)
max_check_attempts 12 ; Setze Fehlerstatus nach 12 Versuchen (12*10 Min = 2 Stunden)
check_period 24x7 ; checke den ganzen Tag
notifications_enabled 1 ; aktive Service Benachrichtigungen
notification_interval 1440 ; Alarmiere erneut nach 1 Tag (1444 Min = 24 Stunden)
notification_period 24x7 ; Alarmiere rund um die Uhr
notification_options w,u,c,r ; Alarmiere bei warning, unknown, critical, and recovery
contact_groups admins ; Alarmiere alle Mitglieder der Gruppe admins
active_checks_enabled 1 ; Aktive Checks sind enabled (1)
passive_checks_enabled 1 ; Passive Checks sind enabled (1)
}

Erläuterung: die command Definition namens check_remotetime ruft das Programm check_ntp_time auf. Die Schwellenwerte für Kritisch bzw. Warnung liegen bei 3600 bzw. 600 Sekunden. Ist die Zeitabweichung also über 10 Minuten, wird eine Warnung verschickt. Beträgt die Zeitabweichung mehr als eine Stunde, wechselt der Status in kritisch und die Alarmierung der eingetragenen Kontaktpersonen erfolgt.

Das Prüfintervall wurde mit relativ weitem Abstand gesetzt. Die Uhrzeit soll nur alle 3 Stunden geprüft werden. Bei Fehlern wird alle 10 Minuten geprüft und erst nach 12 Versuchen wird eine Mail versendet. Schafft der NTP-Client auf dem Rechner nicht innerhalb einer Stunde (10 Min * 12 = 60 Min) die Uhrzeit zu korrigieren, wird die Alarmierung initiiert.

check_nrpe & check_load - Systemauslastung prüfen

Ein weiterer wichtiger Aspekt beim System-Monitoring ist die Auslastung der Ressourcen (CPU, RAM, etc). Der Administrator sollte rechtzeitig wissen, wenn ein System überlastet ist, damit er schnell eingreifen kann. Entweder ist die Hardware mit den Anwendungen überfordert oder eine Hard- bzw. Softwareproblem liegt vor. Nagios bietet hier das Plugin check_load an, welches die load average eines Systems ausliest. Die load average wird von bekannten Linux Tools wie top ausgelesen.

check_load funktioniert im Prinzip wie die vorherigen Beispiele. Das Problem ist nur, dass ein entfernter Rechner standardmäßig keine Schnittstelle anbietet, über welche auf die load average zugegriffen werden kann. Einen PING kann man ohne zusätzliche Software ausführen, da es auf dem Standard-Netzwerkprotokoll ICMP aufsetzt. Im Beispiel von check_time_ntp läuft auf dem Client ein NTP-Client, der die passende Schnittstelle liefert.

Wie ist es nun möglich, auf entfernte Systeminformationen zuzugreifen? Hierfür benötigt man eine zusätzliche Client-Software. Für Linux empfiehlt sich NRPE, welche auf dem Client zusätzlich installiert und konfiguriert wird. NRPE liefert also die erforderliche Schnittstelle auf dem Client. Genauer gesagt ermöglicht NRPE den Zugriff auf die Nagios-Plugins auf dem entfernten Rechner. Windows-Systeme greifen auf das NRPE-Pendant NSClient++ zurück.

NRPE - Nagios Client Plugin für Linux

Das Prinzip mit check_nrpe ist etwas anders: auf dem Nagios-Server definiert man wie gewohnt einen Service und einen Command:

define command {
command_name check_nrpe
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}

define service {
use generic-service
service_description Systemauslastung
hostgroup_name http Server Gruppe
check_command check_nrpe!check_load
}

Der Aufruf check_nrpe ist nicht spektakulär. Wichtig ist, dass die Option -c für command steht. Die Bezeichnung von -c muss auf dem entfernten System vorhanden und dort konfiguriert werden. Auf dem Server wird lediglich gesagt: verwende NRPE, frage $HOSTADDRESS$ an und suche auf dem Remote-Rechner einen Eintrag check_load.

Schauen wir uns die Gegenseite, also die NRPE-Konfiguration auf dem Client an:

# Auszug /etc/nagios/nrpe.cfg
command[check_load]=/usr/lib64/nagios/plugins/check_load -w 15,10,5 -c 30,25,20

In der Datei nrpe.cfg stehen die Aufrufe der lokalen NRPE-Module. Wenn der Server also nach check_load fragt, ruft der entfernte Rechner lokal den Befehl

/usr/lib64/nagios/plugins/check_load -w 15,10,5 -c 30,25,20 

auf und liefert das Ergebnis zurück. Dieses Prinzip muss auf jedem Rechner im Netzwerk manuell eingerichtet werden. Hierbei empfiehlt sich, den Name des Befehls (check_load) identisch zu benennen. Der Namecstellt quasi die Schnittstelle nach Außen dar. Wie der lokale Aufruf erfolgt, kann individuell von System zu System unterschiedlich sein.

check_nrpe & check_disk - Festplattenbelegung prüfen

Ein Problem, welches immer wieder in Serverräumen vorkommt: die Festplatte ist voll und das System hat keinen freien Speicherplatz mehr. Auch hierfür hat Nagios eine passendes Plugin namens check_disk parat, um die Festplatten-Belegung zu prüfen.

Ähnlich wie bei vorherigen Beispiel mit check_load muss man bei check_disk auf NRPE zurückgreifen, um die Festplattenbelegung auf entfernten Rechnern zu prüfen:

define command {
command_name check_nrpe
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}

define service {
use generic-service
service_description Festplatten-Belegung
hostgroup_name http Server Gruppe
check_command check_nrpe!check_disk
}

Hinweis: command_name check_nrpe muss nur einmalig definiert werden, wenn man mehrere Services basierend auf NRPE anlegt. Man ändert lediglich das Argument.

Hier die NRPE-Konfiguration auf dem entfernten Rechner:

command[check_disk]=/usr/lib64/nagios/plugins/check_disk -w 20% -c 10% -p /dev/hda1

check_http - Webserver prüfen

Um die Verfügbarkeit eines Webservers zu prüfen, benötigt man keine zusätzliche wie NRPE. Klar, ein Webserver soll öffentlich erreichbar sein, so dass er (in der Regel) über Port 80 erreichbar ist. Die Überprüfung des HTTP-Dienstes ist also trivial:

# 'check_http' command definition
define command{
command_name check_http
command_line $USER1$/check_http -I $HOSTADDRESS$ $ARG1$
}

define service {
service_description HTTP ; Name des Service
hostgroup_name http Server Gruppe ; Prüfe alle Clients dieser Hostgroup
check_command check_http ; Definition des Befehl ; Definition des Befehlss
normal_check_interval 5 ; Prüfintervall, Status OK (alle 5)
retry_check_interval 1 ; Prüfenintervall, Status Fehler (jede 1 Minute)
max_check_attempts 3 ; Setze Fehlerstatus nach 3 Versuchen
check_period 24x7 ; checke den ganzen Tag
notifications_enabled 1 ; aktive Service Benachrichtigungen
notification_interval 30 ; Alarmiere erneut nach 30 Minuten
notification_period 24x7 ; Alarmiere rund um die Uhr
notification_options w,u,c,r ; Alarmiere bei warning, unknown, critical, and recovery
contact_groups admins ; Alarmiere alle Mitglieder der Gruppe admins
active_checks_enabled 1 ; Aktive Checks sind enabled (1)
passive_checks_enabled 1 ; Passive Checks sind enabled (1)
}

check_nrpe & check_mysql - MySQL-Datenbank prüfen

Die Verfügbarkeit der MySQL-Datenbank prüft man mit der Kombination check_nrpe und check_mysql. Aus Sicherheitsgründen sollte man auf dem Client einen MySQL-Benutzer anlegen, der keinen Zugriff auf irgendeine Datenbank hat. Dem Benutzer soll lediglich eine Anmeldung möglich sein, um die Informationen über den MySQL-Status abzurufen. Die Konfiguration auf Server-Seite sieht wie folgt aus:

define command {
command_name check_nrpe
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}

define service {
use generic-service
service_description MYSQL
hostgroup_name http Server Gruppe
check_command check_nrpe!check_mysqld
}

Auf der Client-Seite die NRPE-Konfiguration:

command[check_mysqld]=/usr/lib64/nagios/plugins/check_mysql -u Jeder

Weitere Artikel zu diesem Thema

Teil 1 - Nagios Grundlagen-Einführung für Anfänger und zentrale Konfiguration
Teil 2 - Nagios Anleitung: Netzwerk-Überwachung von Windows- und Linux-Clients
Teil 3 - Nagios Praxisbeispiele: Webserver (mysql, http, Systemauslaustung, Domains) überwachen
Teil 4 - Nagios Weboberfläche zur Statusüberprüfung und Anzeige des aktuellen Netzwerk-Zustands
Teil 5 -Nagios nützliche Links (Download, Community, Plugins, Anleitungen)