18.3 Kontrolle und Überwachung mit Nagios
Nagios ist ein Open-Source-Tool, das beliebige Bestandteile Ihres Netzwerks überwacht, also ein sogenanntes System zum Netzwerk-Monitoring. Es besteht aus einem Kern, vielen Plug-ins und der optionalen Weboberfläche. Nagios überprüft die Verfügbarkeit von Diensten wie SSH, FTP oder HTTP. Es ruft Plug-ins auf, liest Daten aus einer Datei aus und gibt anschließend Statusmeldungen zurück. Hat sich der Status eines Dienstes kritisch verändert, werden Warnhinweise an vorher festgelegte Usergruppen verschickt. Dienste beziehungsweise Hosts können Windows- oder Linux-Systeme, Switches, Webserver, Router usw. sein. Das System gibt darüber hinaus Hinweise auf die Kapazitätsplanung, Speicher- und CPU-Auslastung. Mit Hilfe weiterer Programme kann der Verlauf der Checks und des Systems visualisiert werden. Es können aber auch Umgebungsbedingungen wie Temperaturwerte, Luftfeuchtigkeit etc. überwacht werden.
18.3.1 Installation
Ubuntu bietet Ihnen aktuelle Nagios-Pakete über das Software-Center an. Die Paketverwaltung nimmt Ihnen viele der folgenden Schritte ab. Wenn Sie allerdings Wert auf die neueste Version legen, dann können Sie diese selbstverständlich auch herunterladen und selbst installieren. Diesen Fall möchte ich im Folgenden näher beschreiben. Laden Sie die neueste Version von Nagios und die dazugehörigen Plug-ins von der Seite www.nagios.org/download herunter.
Anschließend entpacken Sie die Pakete auf Ihrem Rechner. Folgende Befehle tragen Sie dazu ein:
tar xzf nagios-<version>.tar.gz
tar xzf nagios-plugins-<version>.tar.gz
Erstellen Sie einen Benutzer nagios:
/usr/sbin/useradd -m nagios
Zusätzlich erstellen Sie eine Benutzergruppe nagios. Weisen Sie dieser den Nagios-Benutzer zu:
/usr/sbin/groupadd nagios
/usr/sbin/usermod -G nagios nagios
Die Gruppe nagcmd benötigen Sie, um über das Web-Interface externe Befehle erteilen zu können. Weisen Sie dieser Gruppe den Nagios-Benutzer und den Webserver-Benutzer zu:
/usr/sbin/groupadd nagcmd
/usr/sbin/usermod -a -G nagcmd nagios
/usr/sbin/usermod -a -G nagcmd wwwrun
Haben Sie alle vorbereitenden Maßnahmen erledigt, wechseln Sie in das Verzeichnis, in dem Sie Nagios entpackt haben. Dort führen Sie die Installation durch:
./configure --with-command-group=nagcmd
make install
make install-init
make install-config
make install-commandmode
Für die Plug-ins benötigen Sie folgende Befehle:
./configure --with-nagios-user=nagios --with-nagios-group=nagios \
make make install
Achten Sie darauf, dass beim Ausführen des Konfigurationsskripts keine Fehler auftreten. Unter Umständen funktioniert sonst das Kompilieren nicht. Im letzten Schritt konfigurieren Sie das Web-Interface:
make install-webconf
htpasswd2 -c /usr/local/nagios/etc/htpasswd.users nagios service apache2 restart
Dieser Befehl installiert die Datei nagios.cfg im Konfigurationsverzeichnis des Apache und legt ein Passwort für den Nagios-Benutzer fest. Starten Sie Nagios wie folgt:
- Wenn Sie Nagios zur Liste der System-Services hinzufügen, startet Nagios automatisch, sobald Sie das System hochfahren:
chkconfig --add nagios
chkconfig nagios on
Das Startskript passen Sie unter /etc/init.d/nagios folgendermaßen an:
### BEGIN INIT INFO
# Provides: nagios
# Required-Start:
# Should-Start:
# Required-Stop:
# Default-Start: 3 5
# Default-Stop: 0 1 2 6
# Short-Description: nagios
# Description: Start Nagios
### END INIT INFO - Überprüfen Sie nun die Konfigurationsdateien:
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
- Zuletzt starten Sie den Nagios-Service:
service nagios start
Auf die Weboberfläche können Sie über die URL http://[IP_des_Nagios_Hosts]/nagios zugreifen. Nagios zeigt Ihnen in einer leicht verständlichen Übersicht, welchen Status die überwachten Objekte aufweisen. Bei Bedarf können Sie die entsprechenden Objekte anpassen oder sich Informationen zu ihnen anzeigen lassen. Eine Status-Map berücksichtigt die Abhängigkeiten zwischen verschiedenen Diensten.
18.3.2 Konfiguration
Die Hauptkonfigurationsdatei nagios.cfg befindet sich im Verzeichnis /usr/local/nagios/etc. Sie enthält alle nötigen Basiseinstellungen für Nagios. Hier sind die Pfade zu allen wichtigen Dateien hinterlegt, zum Beispiel zu den Variablen log_file, resource_file, cfg_file oder status_file. Zudem enthält die Hauptkonfigurationsdatei die globalen Einstellungen für die diversen Nagios-Elemente, wie execute_host_checks, debug_level, enable_event_handlers. Diese können auf »ein« (1) oder auf »aus« (0) gestellt werden. Auch das Einstellen auf einen speziellen Wert ist möglich. Erklärungen zu der Funktionsweise der Variablen sind als Kommentare (beginnend mit #) in der Hauptkonfigurationsdatei enthalten.
- Objektdefinitionsdateien
Objektdefinitionsdateien definieren Dienste, Services, Host-Gruppen, Kontakte, Kontaktgruppen und Befehle. Hier legen Sie fest, welche Dienste Sie überwachen lassen wollen und an wen im Bedarfsfall Warnhinweise versendet werden. - Ressourcendateien
Ressourcendateien dienen der Sicherung von benutzerdefinierten Makros, zum Beispiel Passwörtern, ohne dass diese für CGIs (Common Gateway Interface) zugänglich sind. - CGI-Konfigurationsdatei
In der CGI-Konfigurationsdatei werden Variablen, die die Arbeitsweise der CGIs beeinflussen, etwa Zugriffsrechte, hinterlegt. Sie enthält zudem einen Verweis auf die Hauptkonfigurationsdatei.
Allgemeiner Aufbau
Nachfolgend finden Sie einen exemplarischen Aufbauplan. Er kann im Vergleich mit dem Ihrigen in Details variieren, aber das Gros der Dienste, Kontakt- und Service-Informationen ist ähnlich:
define contact {
contact_name <NAME>
use generic-contact # Template
alias <genauerer Name>
email <EMAIL>
}
define host {
use <Template>
host_name <HOSTNAME>
alias <genauerer Name>
address <IP>
<sonstige spezielle Eigenschaften>
}
define service {
use <Template>
host_name <HOSTNAME>
service_description <SERVICENAME>
check_command <SERVICEBEFEHL>
<sonstige spezielle Eigenschaften>
}
define host/servicegroup {
host/servicegroup_name <GRUPPENNAME>
alias <genauere Beschreibung>
members <Mitglieder>
}
Alle Eigenschaften und speziellen Einstellungen aufzuführen, würde den Rahmen dieses Kapitels sprengen, weshalb ich mich auf die wichtigsten Details beschränkt habe. Weitere Informationen finden Sie im Handbuch von Nagios.
Tipp 263: Nagios mit Templates nutzen |
Mit Hilfe von Templates erleichtern Sie Nagios die Überwachung ähnlicher Dienste und Services. Alle Einstellungen, die bei mehreren Hosts gleich sind, können Sie in einem Template zusammenfassen und durch dieses überwachen lassen. Dabei überschreiben die lokalen objektspezifischen Einstellungen diejenigen des Templates. Außerdem bietet sich die Möglichkeit, Templates in andere Templates einzufügen. Die Datei ist ähnlich wie die Nagios-Konfigurationsdateien aufgebaut, unterscheidet sich aber durch eine zusätzliche Zeile, die sie als Template definiert. |
Im Folgenden möchte ich Ihnen dies an einem Dienst-Beispiel erläutern: |
define host { |
Auf dem Host selbst sieht das dann so aus: |
define host { |
18.3.3 Benachrichtigungen
Nagios alarmiert die vorher festlegten Kontaktpersonen über Statusänderungen der Dienste, sobald diese einen kritischen Wert überschritten haben. Dabei können Sie definieren, ob die Mitteilung per E-Mail, SMS, Pager oder Telefon übermittelt werden soll. In der Regel werden nur dann Benachrichtigungen versendet, wenn die dafür eingestellten Komponenten in den Hard-Zustand wechseln, der durch max_check_attempts festgelegt wird.
Mitteilungen erhalten Sie, wenn Sie in der Hauptkonfigurationsdatei nagios.cfg die Option enable_notifications auf 1 setzen und bei allen zu überwachenden Diensten notifications_enabled einschalten.
Statusmeldungen per E-Mail
Möchten Sie Statusmeldungen per E-Mail erhalten, definieren Sie Ihre Adresse bei email und fügen die zugehörigen Kontaktgruppen unter contact_groups bei allen Diensten und Services hinzu, für die Sie Benachrichtigungen erhalten möchten. Unter notification_period legen Sie die Zeitintervalle fest, in denen Sie keine Benachrichtigungen erhalten möchten. Mit der Option first_notification_delay richten Sie Zeitverzögerungen ein. Wiederholte Benachrichtigungen erstellen Sie unter notification_interval. Die Bedingungen, die erfüllt sein müssen, damit überhaupt eine Nachricht versandt wird, richten Sie mit der Option notification_options ein.
Bei Hosts sind dies:
- d (down)
- u (unreachable)
- r (recovered)
- f (flapping)
- s (beim Starten, Beenden oder Stornieren eines Wartungsintervalls)
Die Bedingungen bei Services lauten:
- w (warning)
- u (unknown)
- c (critical)
- r (recovered)
- f (flapping)
- s (beim Starten, Beenden oder Stornieren eines Wartungsintervalls)
Diese Filtermöglichkeiten sind auch bei den Kontakten selbst möglich, und zwar über host_notification_options und service_notification_options. Definieren Sie nun bei den entsprechenden Kontaktgruppen die Variablen, mit denen Benachrichtigungen ausgelöst werden, zum Beispiel:
service_notification_commands notify-service-by-email
host_notification_commands notify-host-by-email
Aktivieren Sie die zugehörigen Kommandos in commands.cfg, indem Sie das Kommentarzeichen entfernen. Sie haben darüber hinaus die Möglichkeit, Kontaktpersonen festzulegen, an die Meldungen gesendet werden sollen, wenn eine Störung nach der ersten Mitteilung nicht behoben worden ist.
Eskalationsmanagement
Das sogenannte Eskalationsmanagement richten Sie folgendermaßen ein:
define serviceescalation {
host_name webserver
service_description HTTP
first_notification 3
last_notification 5
notification_interval 90
contact_groups managers,everyone }
In diesem Beispiel werden ab der dritten bis zur fünften Benachrichtigung diejenigen Gruppen kontaktiert, die unter managers und everyone hinterlegt sind. Die Mitteilungen werden im Abstand von 90 Minuten versendet. Es ist ebenfalls möglich, eine host escalation zu definieren, bei der jedoch nicht nur der Name, sondern eine oder mehrere Host-Gruppen angegeben werden können.
Der Eskalationsrahmen richtet sich nicht nach der Zeit, sondern nach der Menge der bereits versandten Nachrichten. In den Definitionen der Objekte, die in einer Eskalation eingebunden sind, muss deswegen die Variable notification_interval enthalten sein. Bei einer überlappenden Eskalation mit unterschiedlichem notification _interval wählt Nagios jeweils die kleinste definierte Zeiteinheit.
Sie haben die Möglichkeit, die Variablen escalation_period und escalation_options bei den Objektdefinitionen einzufügen, aber anders als notification_interval ersetzt escalation_period die notification _period nicht, sondern wirkt zusätzlich.
Abhängigkeiten
Durch die Host- und Service-Abhängigkeiten lassen sich Benachrichtigungen und Checks unterdrücken. Sie basieren auf den Zuständen, in denen sich die jeweiligen Komponenten befinden, zum Beispiel:
define servicedependency {
host_name linux01, linux02
service_description NRPE, NSCA
inherits_parent 1
dependent_host_name linux03, linux04
dependent_service_description Users, Load, Disks
notification_failure_criteria c,u
execution_failure_criteria n
}
Die Variablen host_name und service_description legen die Master-Services fest. Fällt ein Master-Service aus, fallen auf den Rechnern, die unter dependent_host _name hinterlegt sind, diejenigen Dienste aus, die unter der Option dependent _service_description definiert sind. Bitte beachten Sie, dass jeder abhängige Service von jedem möglichen Master-Service abhängig ist. Die verbleibenden Variablen legen die Optionen fest, wann Master-Services, Benachrichtigungen und Checks ausbleiben sollen.
Das obige Beispiel zeigt an, dass die Kontakte nicht über die Zustände der Dienste Users, Load und Disks auf linux03 und linux04 informiert werden, wenn die Master-Services sich im Zustand critical oder unknown befinden. Checks werden jedoch auf alle Fälle ausgeführt. Mögliche Optionen für die failure_criteria sind
- u (unknown)
- w (warning)
- c (critical)
- p (pending)
- o (ok)
- n (none)
Die Variable inherits_parent prüft zusätzlich die Master-Services daraufhin, ob diese nicht von weiteren definierten servicedependencies abhängig sind. Für hostdependency entfallen die Variablen service _description und dependent_service_description. Abhängigkeitsüberprüfungen erfolgen normalerweise nur für den Status Hard. Wünschen Sie, dass Abhängigkeitsüberprüfungen auch für den Status Soft stattfinden, ändern Sie bitte in der Hauptkonfigurationsdatei die Variable soft_state _dependencies auf 1.
18.3.4 Überwachung verschiedener Systeme
Sie können unter Nagios nicht nur allgemeine Konfigurationen vornehmen, sondern auch einrichten, dass verschiedene Dienste und Objekte überwacht werden. Die folgenden Beispiele sollen Ihnen verdeutlichen, wie Sie diese Funktionen konfigurieren.
Windows-Hosts
Sie überwachen Windows-Hosts mit Hilfe des NSClients, der ein einfacher, aber sehr effizienter Monitoring-Dienst für Windows-Betriebssysteme ist. Dieser Agent ist das Bindeglied zwischen dem Main-Host und dem entfernten Windows-Rechner. Dieser NT-Dienst läuft auf dem Windows-Host im Hintergrund und ruft über das Plug-in check_nt Systemwerte ab, die dann von dem Monitoring-Host abgefragt werden können.
Laden Sie sich die aktuelle Version des NSClients von der Seite sourceforge.net/projects/nscplus herunter. Entpacken Sie die Dateien in ein Verzeichnis Ihrer Wahl, zum Beispiel C:\ NSClient++. Bitte beachten Sie, dass der Client erst konfiguriert werden muss, bevor er gestartet und installiert werden kann. Dies können Sie in jedem beliebigen Editor vornehmen. Geben Sie nun den Befehl nsclient++ /install in der Kommandozeile ein, nachdem Sie in Ihr gewähltes Verzeichnis gewechselt sind.
Der NSClient++ läuft nun als Windows-Dienst und wird nach einem Neustart automatisch mitgestartet. Mit dem Befehl nsclient++ SysTray installieren Sie ein NSClient++-Icon im Infobereich der Taskleiste. Öffnen Sie nun bitte die Datei NSC.ini:
- Den [modules]-Abschnitt aktivieren Sie durch Entfernen der Kommentarzeichen, mit Ausnahme von CheckWMI.dll und RemoteConfiguration.dll.
- Entfernen Sie ebenfalls die Kommentarzeichen vor der allowed_hosts-Option im Settings-Abschnitt, und fügen Sie die IP-Adresse des Nagios-Servers ein. Optional können Sie dort auch ein Passwort in der password-Option hinterlegen.
- Setzen Sie den Wert in der port-Option im [NSClient]-Abschnitt auf 12489.
Nun können Sie den NSClient durch nsclient++ /start starten.
Konfiguration auf dem Nagios-Rechner
Hinterlegen Sie zunächst in der Hauptkonfigurationsdatei die Pfade zu den Konfigurationsdateien:
cfg_file=/usr/local/nagios/etc/objects/windows.cfg
cfg_file=/usr/local/nagios/etc/object/commands.cfg
Bitte beachten Sie, dass Sie jede relevante .cfg-Datei dort ebenfalls mit einem kompletten Pfad angeben müssen. Im nächsten Schritt editieren Sie windows.cfg. Definieren Sie den Host und die Services, die überwacht werden sollen, zum Beispiel so:
define host {
use windows-server
host_name winserver
address 192.168.1.2
}
define service {
use generic-service
host_name winserver
service_description CPU Load
check_command check_nt!CPULOAD!-l 5,80,90
}
Im nächsten Schritt legen Sie in commands.cfg das Kommando fest, mit dem das Plug-in check_nt aufgerufen werden soll. Im Bereich PASSWORD tragen Sie bitte dasjenige Passwort ein, das Sie im Settings-Abschnitt in NSC.ini vorgegeben haben:
define command
{
command_name check_nt
command_line $USER1$/check_nt -H $HOSTADDRESS$ -p 12489 -s PASSWORD -v $ARG1$
}
Im letzten Schritt starten Sie Nagios durch service nagios restart neu. Die Überwachung des Windows-Hosts sollte nun funktionieren. Mit Hilfe von Nagios können Sie unter anderem folgende Dienste überwachen:
- Speicherbelegung
- CPU-Auslastung
- Plattenbelegung
- Zustände von Diensten
- laufende Prozesse
Linux-Hosts
Den eigenen Linux-Rechner (Nagios-Host) überwachen Sie direkt mit Nagios. Definieren Sie hierzu die Hosts, Services und Kommandos in den entsprechenden .cfg-Dateien:
define host {
use linux-server
host_name localhost
address 127.0.0.1
}
define service {
use local-service
host_name localhost
service_description Current Users
check_command check_local_users!20!50
}
define command {
command_name check_local_users
command_line $USER1$/check_users -w $ARG1$ -c $ARG2$
}
Switch
Sie überprüfen die Erreichbarkeit von Switches mit check_ping oder check_icmp. Je nach Switch-Typ und -Alter können Sie über SNMP Informationen aus dem Switch holen, beispielsweise empfangene, gesendete und fehlerhafte Daten, aber auch die Uptime.
Ein Beispiel eines SNMP-Checks wäre:
define service {
use generic-switch
host_name <Name>
service_description <Service-Name>
check_command check_snmp!-C public ?o <SNMP-Adresse>
}
SNMP
SNMP bezeichnet die MIB (Management Information Base), die die einzelnen Objekt-IDs beschreibt und festlegt, was dort für Werte ausgegeben werden. Auf einem D-Link-Switch wäre dies zum Beispiel für die Anzahl gesendeter Bytes auf Port x:
check_command check_snmp!-C public ?o .1.3.6.1.2.1.2.2.1.16.x
Weitere Möglichkeiten sind:
Anzahl empfangener Bytes .1.3.6.1.2.1.2.2.1.10.x
Anzahl empfangener Pakete .1.3.6.1.2.1.2.2.1.11.x
Anzahl fehlerhafter Pakete .1.3.6.1.2.1.2.2.1.20.x
Uptime sysUpTime.0
Über einen Zusatz hinter der MIB können Sie auch Grenzen für -w (Warning) und -c (critical) definieren.
Drucker
Drucker, auf denen SNMP aktiviert ist, können Sie über das Plug-in check_hpjd überwachen. Bevor Sie die .cfg-Dateien definieren, achten Sie bitte darauf, dass die Pakete net-snmp und net-snmp-utils auf dem System installiert sind und dass sich das Plug-in außerdem im Dateipfad /usr/local/nagios/libexec befindet. In der Hauptkonfigurationsdatei müssen alle relevanten Pfade angegeben werden:
cfg_file=/usr/local/nagios/etc/objects/printer.cfg
In der Datei printer.cfg legen Sie beispielsweise Folgendes fest:
define host {
use generic-printer
host_name hplj2605dn
address 192.168.1.30
}
define service {
use generic-service
host_name hplj2605dn
service_description Printer Status
check_command check_hpjd!-C public
}
In der Datei commands.cfg definieren Sie die Befehle:
define command {
command_name check_hpjd
command_line $USER1$/check_hpjd -H $HOSTADDRESS$ $ARG1$
}
Starten Sie Nagios nun bitte neu:
service nagios restart
Das Plug-in kann zum Beispiel auch folgende Zustände erkennen:
- Papierstau
- kein Papier mehr
- Drucker offline
- Tonerstand niedrig
- Speicher unzureichend
- Ausgabefach voll
Ihr Kommentar
Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.