Nagios Grundlagen-Einführung für Anfänger und zentrale Konfiguration

Administratoren möchten gewährleisten, dass in einem Netzwerk die angebotenen Dienste stets zur Verfügung stehen. Doch mit zunehmender Anzahl an Netzwerk-Komponenten und Software-Anwendungen wird die Überwachung immer komplexer. Sind die Windows- und Linux-Server erreichbar? Sind die Netzwerk-Switche online und funktionieren ordnungsgemäß? Läuft der HTTP-Dienst auf dem Webserver und beantwortet der SQL-Server Anfragen? Sind die Auslastung bestimmter Systemressourcen (CPU-Last, Arbeitsspeicher- und Festplattenbelegung) kritisch?

Nagios - Systemmonitoring und Alarmierung von Netzwerk-Clients

Fragen über Fragen und wir reden hier nur über einen kleinen Ausschnitt. Die Überwachung sämtlicher Dienste ist nicht gerade einfach. Doch wie kann man sich behelfen, um mit möglichst wenig Aufwand einen Status über sämtliche Netzwerk-Clients und -Anwendungen zu bekommen? Die Antwort ist ein Monitoring-Tool, der bestimmte Dienste regelmäßig prüft und auf etwaige Ausfälle reagiert. In diesem Zusammenhang hat sich ein bestimmtes Tool einen bekannten Namen gemacht: Nagios.

Nagios ist ein komplexes System Monitoring Tool und wurde 1999 ins Leben gerufen. Da es sich hierbei um ein Open Source Projekt handelt, ist es völlig kostenlos und wird weltweit von tausenden Helfern weiterentwickelt. Mithilfe von zahlreichen Plugins und Erweiterungen ist es möglich, nahezu jedes Ereignis in den Tiefen eines Systems abzufragen. So ist es beispielsweise möglich, den Status und die Auslastung des MySQL-Servers auf einem entfernten System abzufragen. Und das muss nicht zwingend ein Linux-System sein, da es auch für andere Betriebssysteme wie Windows einen Nagios-Client gibt, der die angeforderten Anfragen an den Nagios-Server weitergibt.

Diese Anleitung soll einen Einstieg in das Thema Nagios geben und eignet sich gut für Anfänger, welche sich in das Thema neu einarbeiten. Das Hauptaugenmerk liegt hierbei auf den Grundlagen, so dass der Leser nach diesem Artikel einen lauffähigen Nagios-Server zur Verfügung hat und die grundlegende Nagios-Konfiguration verstanden hat. Nagios ist sehr komplex und so ist es nicht verwunderlich, dass im Nagios-Handbuch offiziell zu lesen ist:

"Relax - it's going to take some time. Don't expect to be able to get things working exactly the way you want them right off the bat. it's not that easy. Setting up Nagios can involve a bit of work - partly because of the options that Nagios offers, partly because you need to know what to monitor on your network (and how best to do it)."

Also: am Anfang nicht verzweifeln, sondern einen genüsslichen Schluck aus dem Kaffee-Becher nehmen und sich langsam an das Thema Nagios herantasten!

Informationsquellen

Nach der erfolgreichen Installation von Nagios findet man im Webfrontend eine ausführliche Erklärung zur Konfiguration. Dazu klickt man im Menüpunkt auf Documentation. Hilfreich sind vor allem die Punkte Quickstart installation guide und Object definitions. Letzteres beschreibt ausführlich die Bedeutung der einzelnen Elemente der Definitionen.

Nagios Online Handbuch

Alternativ kann man folgende Online-Quellen aufsuchen: http://library.nagios.com/library/products/nagioscore/manuals/

Nagios Server und Client

Das Prinzip von Nagios ist eine klassische Server/Client Architektur. Auf einem System wird Nagios als Server konfiguriert, der nach bestimmten Vorgaben die Netzwerk-Clients überwacht (active checks). Auf dem zu überwachenden Client ist vorerst keine zusätzliche Installation notwendig, wenn es sich dabei um einfache Standard-Anfragen handelt, beispielsweise ein einfacher PING, um die Erreichbarkeit eines Clients zu prüfen.

In der Regel ist aber die alleinige Prüfung der Erreichbarkeit eines Clients nicht ausreichend. Möchte man bsp. die Festplattenbelegung überprüfen, muss man auf dem Client einen Nagios-Client installieren. Für Linux gibt es den nagios-nrpe, für Windows den NSClient++.

Nagios: Darstellung der Server-/Client-Architektur

Nagios Systemvoraussetzungen

Nagios wird über eine Weboberfläche bedient, so dass auf dem Nagios-Server ein Webserver installiert sein muss. Hierbei sei erwähnt, dass der Webserver CGI unterstützen und die Grafikbibliothek GD installiert sein muss. Letztere wird u.a. dafür benötigt, um die Netzwerktopologie grafisch darzustellen.

Anders als bei den zu überwachenden Clients muss der Nagios-Server zwingend auf einem Linux-System installiert werden. Hier eine kurze Übersicht mit den wesentlichen Systemvoraussetzungen:

  • Betriebssystem: Linux
  • Webserver: Apache (empfohlen)
  • GD Graphics Library

Eine Anleitung zur Installation von Nagios unter Gentoo Linux findet man hier: Gentoo System Monitoring with Nagios.

Nagios - Konfiguration und wichtige Verzeichnisse

Wesentliche Definitionen

Welche Clients wie geprüft werden sollen, werden in bestimmten Konfigurationsdateien (.cfg) auf dem Nagios Server definiert. Dabei handelt es sich im wesentlichen um folgende Definitionen:

Host: Wer soll geprüft werden? Das können PCs, Server, Switche, Drucker, usw. sein. Für jeden zu überprüfenden Client muss ein Host definiert sein!

define host {   
host_name pc001
alias Test-PC
address 194.50.50.184
}

Service: Was soll geprüft werden? Beispiele hierfür wären PING, Festplattenbelegung, CPU-Last, usw. Mithilfe der Service-Definition wird der Host mit dem Command verknüpft. Unter host_name definiert man die zu prüfenden Hosts (bsp. komma-separierte Liste). Alternativ könnte man auch eine ganze Gruppe definieren. Mit check_command wird dann festgelegt, welcher Befehl den Hosts geschickt wird. Der Befehl wird dann in der Command-Definition konfiguriert.

define service {   
use generic-service
host_name pc001
service_description Client Versions Prüfung
check_command check_nt!CLIENTVERSION
}

Command: Genaue Definition, wie die unter Service definierten Hosts geprüft werden sollen. Hier wird das Nagios-Plugin bzw. das Shell-Skript (mit Optionen) angegeben, wie ein Dienst/Ressource geprüft wird.

define command {   
command_name check_nt
command_line $USER1$/check_nt -H $HOSTADDRESS$ -p 12489 -v $ARG1$ $ARG2$
}

Was ist ein Command? Was bedeutet in diesem Beispiel check_nt? Letzteres ist nichts anderes als ein kleines Programm, welches man auf auf der Shell ausführen kann. Standardmäßig liegen diese kleinen Programme in /usr/lib/nagios/plugins/

# ls /usr/lib/nagios/plugins/
check_apt check_ftp check_mrtgtraf check_overcr check_tcp
check_breeze check_http check_mysql check_ping check_time
check_by_ssh check_icmp check_mysql_query check_pop check_udp
check_clamd check_ide_smart check_nagios check_procs check_ups
check_cluster check_imap check_nagios_db.pl check_real check_users
check_dhcp check_ircd check_nntp check_rpc check_wave
check_dig check_jabber check_nntps check_sensors contrib
check_disk check_ldap check_nt check_simap negate
check_disk_smb check_ldaps check_ntp check_smtp urlize
check_dns check_load check_ntp_peer check_spop utils.pm
check_dummy check_log check_ntp_time check_ssh utils.sh
check_file_age check_mailq check_nwstat check_ssmtp
check_flexlm check_mrtg check_oracle check_swap

Und wie gewöhnliche Linux-Programme kann man diese manuell auf der Shell ausführen:

./check_load -w 1,5,15 -c 2,10,50 
OK - load average: 0.00, 0.00, 0.00

Hilfreich ist es, sich mit --help die erforderlichen Argumente anzeigen zu lassen. Wichtig sind die Optionen -w und -c, welche die Werte definieren, wann ein Zustand den Wert Warnung oder Kritisch annimmt.

Das ist eigentlich das Grundprinzip von Nagios. Es gibt natürlich noch weitere Definitionen wie hostgroup oder contacts. Dazu aber später mehr. In dieser Grundlagen Anleitung soll der Zusammenhang der einzelnen Definitionen und der Nagios-Plugins deutlich werden:

Nagios Beispiel: Definition von Hosts, Hostgroups und Services
Klicken zum Vergrößern

Nagios - Aktueller Systemstatus und Monitoring der Hosts, Services
Klicken zum Vergrößern

Hinweis: Grundsätzlich ist es Nagios unwichtig, wie die Dateinamen lauten und in welchen Dateien die Definition liegen. Man kann Host, Service und Command in eine einzige Datei schreiben oder diese auch in mehrere Dateien verteilen. In großen Netzwerken macht es natürlich Sinn, sich Gedanken über eine sinnvolle Aufteilung zu machen.

Tip: Bevor man die Konfiguration zur Überwachung in Nagios vornimmt, sollte man das Plugin erst auf dem Client lokal auf der Shell ausführen, dann per Remote-Zugriff vom Server testen und nach erfolgreichem Test in die Konfiguration von Nagios aufnehmen. Somit kann man bei der Fehlersuche genau feststellen, an welcher Stelle (Plugin oder Konfiguration in Nagios) das Problem vorliegt.

Wichtige Verzeichnisse und Konfigurationsdateien von Nagios

/etc/nagios/nagios.cfg: Das ist die Hauptkonfigurationsdatei von Nagios. Die zahlreichen Parameter beziehen sich auf den Nagios-Server und sollten mit sorgfältig eingestellt werden. Für diese Anleitung sind die Zeilen mit cfg_file entscheidend. Hiermit sagt man Nagios, welche Dateien die Definitionen für Host, Service, Command usw. enthalten. Wenn man also eine neue Datei mit Definitionen in /etc/nagios/objects angelegt hat, muss man diese Datei anschließend in der nagios.cfg eintragen. Ansonsten liest Nagios diese Datei nicht ein, sprich sie wird ignoriert:

# AUSZUG /etc/nagios/nagios.cfg 
# You can specify individual object config files as shown below:
cfg_file=/etc/nagios/objects/contacts.cfg
cfg_file=/etc/nagios/objects/commands.cfg
cfg_file=/etc/nagios/objects/commands-nrpe.cfg
cfg_file=/etc/nagios/objects/timeperiods.cfg
cfg_file=/etc/nagios/objects/templates.cfg

/etc/nagios/resource.cfg: In der beispielhaften Definition eines Commands wurde gar nicht auf die Variable $USER1$ (command_line $USER1$/check_nt) eingegangen. Wohin die Variable $USER1$ zeigt, wird in der resource.cfg definiert. Des Weiteren hat man die Möglichkeit, weitere Variablen anzulegen:

# AUSZUG resource.cfg 
# Sets $USER1$ to be the path to the plugins
$USER1$=/usr/lib/nagios/plugins
# Store some usernames and passwords (hidden from the CGIs)
$USER3$=testuser
$USER4$=geheim

/etc/nagios/objects/: In diesem Verzeichnis werden standardmäßig die Dateien abgelegt, welche die Hosts, Services, Commands, Hostgroups, usw. enthalten. Unter Gentoo findet man viele Beispiele, welche einem am Anfang helfen, eigene Definitionen zu erstellen:

contacts.cfg: Definition der Kontaktpersonen und -adressen.
windows.cfg, printer.cfg, switch.cfg, localhost.cfg: Viele schöne Beispiele, wie man Windows-Clients, Drucker, Netzwerkswitche oder den eigenen Server (localhost) prüfen kann.
commands.cfg: Definitionen der Commands (Befehle bzw. Aufruf der Nagios-Plugins).
templates.cfg: Enthält Vorlagen für Hosts, Services, usw., welche direkt in der Definition eingebunden werden können.

Nützlich: Verwendung von Templates

Im Beispiel einer Service-Definition setzt Nagios ca. ein Dutzend von Parametern voraus, die festgelegt werden müssen, damit der Service grundlegend einsatzfähig ist. Ansonsten quittiert Nagios den Start mit einem Fehler. Die zahlreichen zusätzlichen Parameter fallen dann in die Kategorie "Feintuning". Trotzdem kann es auf Dauer aufwendig werden, wenn man für jeden Service die grundlegenden Parameter erstellen muss.

Mithilfe von use kann man ein vordefiniertes Template einbinden. Man erspart sich die Arbeit, indem die Werte aus dem Template verwendet werden. Voraussetzung natürlich ist, dass die Standard-Werte aus dem Template passend sind.

# Beispiel eines einfachen Service 
define service {
use generic-service ; Verwende Template
service_description MYSQL
host_name pc001
check_command check_nrpe!check_mysqld
}

Das hier genannte Beispiel eines Service wäre normalerweise gar nicht lauffähig und würde einen Fehler verursachen. Nagios weiß beispielsweise gar nicht, in welchen Zeitabständen (check_interval) der Befehl ausgeführt wird oder welche Personen (contacts) kontaktiert werden sollen. Des Rätsels Lösung ist der Parameter use, mit dessen Hilfe die Parameter aus dem generic-service übernommen werden.

# AUSZUG aus template.cfg define service{   
name generic-service
active_checks_enabled 1
passive_checks_enabled 1
parallelize_check 1
obsess_over_service 1
check_freshness 0
notifications_enabled 1
event_handler_enabled 1
flap_detection_enabled 1
failure_prediction_enabled 1
process_perf_data 1
retain_status_information 1
retain_nonstatus_information 1
is_volatile 0
check_period 24x7
max_check_attempts 3
normal_check_interval 10
retry_check_interval 2
contact_groups admins
notification_options w,u,c,r
notification_interval 60
notification_period 24x7
register 0 ; Kein richtiger Service, nur Template!
}

Unser kleines Beispiel mit insgesamt vier Zeilen kann in Wirklichkeit viel mehr, da sämtliche Parameter von generic-service übernommen werden.

Fazit

Mit diesen Kenntnissen sollte man nun in der Lage sein, Nagios grundlegend bedienen zu können. Aller Anfang ist schwer und die Fülle an Möglichkeiten wirken erst einmal erdrückend. Mit den hier genannten Kenntnissen sollte man aber ein wenig Licht am Ende des Tunnels sehen. Viel Spaß beim Ausprobieren!

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)