Debian Nagios

Aus Wiki
Zur Navigation springen Zur Suche springen

Allgemein

Nagios ist ein Netzwerkmonitoring Tool, das sowohl lokale Ressourcen und Dienste, als auch andere Server und Netzwerkgeräte wie Router, NAS- Laufwerke und PC's überwachen kann. Der Zustand der Dienste wird mit Hilfe zahlreicher Reports und Auflistungen auf der komfortablen Webseite dargestellt. Falls Probleme vorliegen, kann der Admin via Email benachrichtigt werden.

Beispiel:

Heimnetzwerk, bestehend aus einem Debianserver, auf dem Nagios läuft, einem Switch, einem WLAN-Router, einem Desktop-PC und Laptop und noch einige weitere WLan- und Netzwerkclients.

Debian Nagios1.png

Die Fritzbox wurde der Übersichtlichkeit halber in zwei Geräte aufgeteilt. Zum Einen der Switch-Teil, an dem Clients per Netzwerkkabel angeschlossen sind und zum Anderen der WLAN-Teil. Diese könnte auch in einem Gerät abgebildet werden. Der Laptop wird in rot dargestellt, da dieser ausgeschaltet war.

Um eine Network-Map wie im Bild zu realisieren sind zahlreiche Konfigurationsschritte erforderlich. Zunächst müssen die einzelnen Geräte (Hosts) definiert werden. Dann die Abhängigkeiten der Geräte untereinenander (Parents). Nagios kann unzählige Services pro Host überwachen, die ebenfalls definiert werden müssen.

Nagios besteht aus einer ganzen Reihe von Plugins, um die verschiedensten Geräte und Services zu überwachen. Eine ganze Reihe von Plugins werden bereits bei einer Standardinstallation installiert. Zahlreiche weitere Plugins sind im Internet zu finden.


Voraussetzung:

→ Apache2 Webserver


Installation

apt-get install nagios3 

Bei der Installation wird das Passwort NAGIOS_ADMIN_PWD für den Nagios-Admin festgelegt. Dieses zweimal eingeben.


Nagios Webinterface

Das Nagios Webinterface ist unter der Adresse http://IP_DES_SERVER/nagios3 erreichbar. Unmittelbar nach der Installation zeigt dieses allerdings nur einige vorkonfigurierte Dienste des Servers an. Damit auch andere Netzwerkgeräte und Dienste verfügbar sind, müssen diese erst konfiguriert werden. Hinweise dazu siehe Kapitel Konfiguration.

Hosts

Mit dem Menüpunkt Monitoring/Hostdetail kann eine Auflistung incl, Status aller definierter Hosts ausgegeben werden.

z.B.

Debian Nagios Host.png


Services

Mit dem Menüpunkt Monitoring/Servicedetail keine eine Auflistung incl. Status der definierten Services pro Host ausgegeben werden.

z.B.

Debian Nagios Service.png


Status Map

Mit dem Menüpunkt Monitoring/Status Map kann die Topologie des Netzwerkes incl. Status der einzelnen Hosts graphisch ausgegeben werden.

Z.B.

Debian Nagios Map.png


Konfiguration

Sämtliche Konfigurationsfiles für Nagios liegen unter: /etc/nagios3/

Im Unterverzeichnis /etc/nagios3/conf.d/ werden sämtliche Host- und Service- Konfigurationsfiles abgelegt. Es werden alle Files mit der Endung .cfg eingebunden. Es spielt damit keine Rolle, ob sämtliche Hosts und Services in einer einzigen Konfigurationsdatei abgelegt werden, oder ob pro Host und Service eine eigene angelegt wird. Der Übersichtlichkeit halber sollte jeweils ein Host und sämtliche Services dieses Hosts in ein Konfigfile wandern.

Unter /etc/nagios-plugins/config sind Konfigurationsfiles von Plugins abgelegt (Details siehe Kommandos und Plugins).

Im folgenden werden einige Hinweise zur Konfiguration gegeben. Eine allgemeingültige Anleitung kann hier nicht erfolgen, da jedes Netzwerk anders aufgebaut ist und deshalb eine individuelle Konfiguration erfordert.


Kommandos und Plugins

Nagios bietet zahlreiche Plugins, die im Ordner /usr/lib/nagios/ abgelegt sind. Diese Plugins sind ausführbare Programme und können separat gestartet werden. Mit Hilfe der Option -h kann die Hilfe des Plugins angezeigt werden. Z.B.

/usr/lib/nagios/check_http -h

Beispielanwendung:

/usr/lib/nagios/check_http --ssl -H localhost -p 8888 -a user:password

Mit diesem Befehl kann der HTTPS-Server (--ssl), der auf Port 8888 (-p) lauscht und eine Useranuthorisierung erfordert (-a), getestet werden.

Die Verbindung zwischen Plugin und Nagios sind sog. Kommandos. Es sind bereits zahlreiche Kommandos definiert, die übliche Optionen der Plugins bieten, definiert. diese sind im Ordner /etc/nagios-plugins/config/ abgelegt. Z.B. check_http in /etc/nagios-plugins/config/http.cfg zur Überprüfung eines HTTP-Servers:

# 'check_http' command definition
define command{
       command_name    check_http
       command_line    /usr/lib/nagios/plugins/check_http -H '$HOSTADDRESS$' -I '$HOSTADDRESS$'
       }

Kommandodefinitionen bestehen neben dem Rahmen (define command { ... }) nur aus:

  • command_name: Name des Kommandos so, wie es in den Servicedefinitionen Verwendung findet
  • command_line: Kommandozeile des Plugins wie oben beschrieben. Die Optionen werden mittels Parameter:
    • '$HOSTADDRESS$' bzw. '$HOSTNAME$' (siehe Hostdefinition)
    • '$ARG$' '$ARG2$' '$ARG3' usw: Parameter die an das Plugin übergeben werden

Es können aber auch selbst beliebig viele Kommandos angelegt werden. z.B. check_https_spezial in /etc/nagios-plugins/config/my-commands.cfg

# 'check_https_spezial' command definition
define command{
       command_name    check_https_spezial
       command_line    /usr/lib/nagios/plugins/check_http --ssl -H '$HOSTADDRESS$' -I '$HOSTADDRESS$' -p '$ARG1$' -a '$ARG2$'
       }

In einer Servicedefinitionen könnte dieses Kommando schließliche folgendermaßen verwendet werden:

check_command   check_https_spezial!8888!user:password

Dadurch werden die Argumente folgendermaßen belegt:

$ARG1$=8888
$ARG2$=user:password

Dadurch wird das Plugin /usr/lib/nagios/plugins/check_http mit folgender Befehlszeile von Nagios gestartet:

/usr/lib/nagios/check_http --ssl -H localhost -p 8888 -a user:password


Zeitfenster

Mittels Zeitfenster kann festgelegt werden, zu welchen Zeiten Hosts und Services überwacht werden sollen und wann Benachrichtigungen erfolgen sollen. Es sind bereits einige Standard Zeitfenster (24x7, workhours, nonworkhours und never) angelegt, die bei Bedarf geändert aber auch komplett neue angelegt werden können. Die Standardzeitfenster sind im Konfigfile /etc/nagios3/conf.d/timeperiods_nagios2.cfg abgelegt. Für eigene Zeitfenster kann dieses File erweitert werden, oder ein neues angelegt werden.

Z.B. wird hier ein Zeitfenster sat für den Satreceiver VU+ angelegt, da dieser nicht rund um die Uhr erreichbar ist. Diese wird mittels Enigma2 Plugin Elektro über Nacht in Deep Standby versetzt, um Stromzu sparen. Der Sat- Receiver is Montags-Freitags von 17:00 Uhr bis 23:30 und am Wochenende von 08:00 bis 23:30 definitiv online. Nur in dieser Zeit soll dieser überwacht werden.

define timeperiod{
       timeperiod_name sat
       alias           sat
       sunday          08:05-23:25
       monday          16:05-23:25
       tuesday         16:05-23:25
       wednesday       16:05-23:25
       thursday        16:05-23:25
       friday          16:05-23:25
       saturday        08:05-23:25
       }


Hosts

Host Template

Für die Erstellung einer Host Definition ist ein Template erforderlich. Das Standard Template generic-host im File /etc/nagios3/conf.d/generic-host_nagios2.cfg wurde bereits bei der Installation angelet. Ein Template für Hosts kann relativ einfach selbst angelegt werden.

Template für PC's:

Da PC's nicht ständig eingeschaltet sind, sollen nicht ständig Benachrichtigungsmails erscheinen, sondern lediglich der Status online auf der Webpage ersichtlich sein.

vi /etc/nagios3/conf.d/pcs-template_nagios2.cfg

Folgende Zeilen einfügen:

# pc- host definition template - This is NOT a real host, just a template!

define host{
       name                            pc-host    ; The name of this host template
       notifications_enabled           0       ; Host notifications are enabled
       event_handler_enabled           0       ; Host event handler is enabled
       flap_detection_enabled          0       ; Flap detection is enabled
       failure_prediction_enabled      0       ; Failure prediction is enabled
       process_perf_data               1       ; Process performance data
       retain_status_information       1       ; Retain status information across program restarts
       retain_nonstatus_information    1       ; Retain non-status information across program restarts
               check_command                   check-host-alive
               max_check_attempts              10
               notification_interval           0
               notification_period             never
               notification_options            d,u,r
               contact_groups                  admins
       register                        0       ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL HOST, JUST A TEMPLATE!
       }

Template für Satreceiver:

Nachdem der Satreceiver nicht ständig eingeschaltet ist, wird hier ein Template definiert, das oben definiertes Zeitfenster sat verwendet.

vi /etc/nagios3/conf.d/sat-template_nagios2.cfg

Folgende Zeilen einfügen:

# sat- host definition template - This is NOT a real host, just a template!

define host{
       name                            sat-host    ; The name of this host template
       notifications_enabled           1       ; Host notifications are enabled
       event_handler_enabled           1       ; Host event handler is enabled
       flap_detection_enabled          1       ; Flap detection is enabled
       failure_prediction_enabled      1       ; Failure prediction is enabled
       process_perf_data               1       ; Process performance data
       retain_status_information       1       ; Retain status information across program restarts
       retain_nonstatus_information    1       ; Retain non-status information across program restarts
               check_command                   check-host-alive
               max_check_attempts              10
               notification_interval           0
               notification_period             sat
               notification_options            d,u,r
               contact_groups                  admins
       register                        0       ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL HOST, JUST A TEMPLATE!
       }


Hostdefinition

Bei der Installation wurde bereits eine Hostdefinition für den lokalen Server (localhost) erstellt. Diese liegt in der Datei /etc/nagios3/conf.d/localhost_nagios2.cfg

Dies sieht beispielsweise folgendermaßen aus:

define host{
       use                     generic-host            ; Name of host template to use
       host_name               localhost
       alias                   localhost
       address                 127.0.0.1
       }

Eine (einfache) Hostdefinition besteht aus folgenden Teilen:

  • use': Host-Template, das verwendet werden soll. Die Standardvorlage heißt generic-host (siehe auch Host Template)
  • host_name: Name unter dem der Host in Nagios ansprechbar ist.
  • alias: alternativer Name des Host. Nicht erforderlich
  • adress: IP-Adresse des Hosts

Wie bereits erwähnt, empfiehlt es sich pro Host ein Host-Konfigurationsfile anzulegen.

Hier ein weiteres Beispiel:

 define host{
       use                     sat-host            ; Name of host template to use
       host_name               vu+
       alias                   vu+
       address                 192.168.177.12
       }

Ein spezieller Host ist der Switch, da dieser keine eigene IP-Adresse hat. Nichtsdestotrotz kann Nagios ermitteln, ob dieser Online ist, wenn angeschlossenen Geräte "dahinter" auf Ping anfragen antworten:

  define host{
       use                     generic-host            ; Name of host template to use
       host_name               switch
       }


Beziehungen der Hosts festlegen

Nachdem die Hosts angelegt wurden, können Beziehungen zwischen diesen festgelegt werden, damit die logische Struktur auf der Networkmap ersichtlich wird. Dies geschieht mit dem Parameter parents in den Hostdefinitionen. Der Host, auf dem Nagios läuft ist die Wurzel des Abhängigkeitsbaums und kann entsprechend keine parents haben.

Für den Desktop-PC und Switch im obigen Beispiel sehen die Hostsdefinitionen z.B. folgendermaßen aus:

define host{
       use                     generic-host            ; Name of host template to use
       host_name               desktop
       address                 192.168.0.21
       parents                 switch
       }

 define host{
       use                     generic-host            ; Name of host template to use
       host_name               switch
       parents                 localhost
       }


Icons

Es besteht die Möglichkeit jedem Host ein Icon zuzweisen (so wie im obigen Bild dargestellt). Ansonsten wird lediglich ein Fragezeichen angezeigt. Dabei können zwei Icons festgelegt werden:

  • icon_image: Icon, das in der Hostübersicht und der Serviceübersicht verwendet wird
  • statusmap_image: Icon das in der Map (siehe Bild oben) verwendet wird

Die Images liegen im Verzeichnis /usr/share/nagios/htdocs/images/logos/ Eine Vorschau (und zusätzliche) können hier angesehen werden: http://exchange.nagios.org/directory/Graphics-and-Logos/Images-and-Logos

define hostextinfo{
       host_name              switch
       icon_image             cook/network_switch.png
       statusmap_image        cook/network_switch.gd2
       }


Services

Für den localhost wurden bereits bei der Installation zahlreiche Services eingerichtet wie z.B. Überwachung von freiem Festplattenplatz, Anzahl der Prozesse, Load, Anzahl der User, usw. Wie bereits erwähnt, empfiehlt es sich der Übersichtlichkeit halber die Services pro Host mit in dessen Konfigfile zu legen. Es ist aber keine Erfordernis dies zu tun.


Service-Definition

Eine Service-Definition besteht aus folgenden Elementen:

define service{
       use                     service-template        ; Inherit default values from a template
       host_name               host
       service_description     Service-name
       check_command           Kommando
       }
  • use: Serice-Template, das verwendet werden soll. Bei Installation wurde das Template generic-service (File /etc/nagios3/conf.d/ generic-service_nagios2.cfg) angelegt. Dieses bietet eine 24h Überwachung incl. Benachrichtigung per Mail. Templates können beliebig vom Admin angelegt werden
  • host_name: Hostname auf dem der Service geprüft werden soll
  • service_description: Bezeichnung des Service in der Weboberfläche (z.B. http)
  • check_command: Kommando (Nagios-Plugin), das ausgeführt werden soll. Die verfügbaren Kommandos sind unter /etc/nagios-plugins/config abgelegt.


HTTP-Server

Übwerwachung eines Apache HTTP-Servers:

define service{
       use                     generic-service         ; Inherit default values from a template
       host_name               localhost
       service_description     HTTP
       check_command           check_http
       }


HTTP Nonstadard Port

Da Funambol, Webmin und das JDownloader-Webinterface nicht auf dem Standard HTTP-Port 80 lauschen, können diese nicht mit dem Standard-Kommando check-http geprüft werden. Es ist aber kein großes Problem auch diese zu übwerwachen. Es muss lediglich ein eigenes Kommando angelegt werden, das es ermöglicht einen Port zu übergeben. Nachdem JDownloader HTTP und Webmin HTTPS erfordert, werden zwei Kommandos angelegt.

Eigenes Kommando anlegen:

vi /etc/nagios-plugins/config/my-commands.cfg

Folgende Befehle eingeben:

# 'check_http_port' command definition
define command{
       command_name    check_http_port
       command_line    /usr/lib/nagios/plugins/check_http -I '$HOSTADDRESS$' -p '$ARG1$'
       }
 
# 'check_https_port' command definition
define command{
       command_name    check_https_port
       command_line    /usr/lib/nagios/plugins/check_http --ssl -I '$HOSTADDRESS$' -p '$ARG1$'
       }

Service Definition für Webmin (HTTPS Port 10000):

define service{
       use                     generic-service         ; Inherit default values from a template
       host_name               localhost
       service_description     Webmin
       check_command           check_https_port!10000
       }


Service Definition für JDownloader (HTTP auf Port 8765):

define service{
       use                     generic-service         ; Inherit default values from a template
       host_name               localhost
       service_description     JD-Web
       check_command           check_http_port!8765
       }

Service Definition für Funambol (HTTP auf Port 8080):

define service{
       use                     generic-service         ; Inherit default values from a template
       host_name               localhost
       service_description     Funambol
       check_command           check_http_port!8080
       }


Mailserver

Überwachung SMTP-Server (z.B. Postfix):

define service{
       use                     generic-service         ; Inherit default values from a template
       host_name               localhost
       service_description     SMTP
       check_command           check_smtp
       }

Überwachung IMAP-Server (z.B. Cyrus):

define service{
       use                     generic-service         ; Inherit default values from a template
       host_name               localhost
       service_description     IMAP
       check_command           check_imap
       }


SSH-Zugang

Überwachung SSH-Zugang:

define service{
       use                     generic-service         ; Inherit default values from a template
       host_name               localhost
       service_description     SSH
       check_command           check_ssh
       }


Telnet

Überwachung eines Telnet Zugangs (z.B. Dreambox) :

define service{
       use                     generic-service         ; Inherit default values from a template
       host_name               dm600
       service_description     Telnet
       check_command           check_telnet
       }


TCP/IP Port

Analog zu Telnet (Port 22) kann auch ein beliebiger anderer Port überwacht werden. Z.B. Ethersex bietet das sog. ECMD Interface via Telnet auf Port 2701 an.:

define service{
       use                     generic-service         ; Inherit default values from a template
       host_name               steckdose
       service_description     ECMD
       check_command           check_tcp!2701
       }


CUPS

Überwachung des Cups Printservers:

define service{
       use                     generic-service         ; Inherit default values from a template
       host_name               localhost
       service_description     CUPS
       check_command           check_cups
       }


MySQL

Nechdem die meisen MySQL-Server keinen anonymen Zugang erlauben, wird zunächst einen Dummy-User ohne Rechte angelegt werden, mit dem sich das Nagios-plugin am SQL-Server anmelden kann.

mysql -u root -p

MySQL Root PWD eingeben.

 create USER nagios IDENTIFIED BY 'nagiospwd';
 exit
Bulbgraph.png Hinweis:
Das Passwort des Dummyusers nagios kann getrost nagiospwd bleiben, da dieser User keinerlei Rechte hat und das Passwort auf der Nagios Weboberfläche ausgelesen werden kann. Es sollte also auf keinen Fall ein Passwort, das an anderer Stelle verwendet wird, hier eingesetzt werden.


MYSQL Nagios Definition:

define service{
       use                     generic-service         ; Inherit default values from a template
       host_name               localhost
       service_description     MySQL
       check_command           check_mysql_cmdlinecred!nagios!nagiospwd
       }

Mit dieser Definition meldet sich das Nagios-Plugin am MySQL-Server mit User nagios und Passwort nagiospwd an.


VNC-Server

Mit Nagios können auch VNC-Server (wie z.B. unter JDownloader beschrieben) überwacht werden. Analog wie für HTTP auf einem nicht Standardport (80/443) ist auch für die Überwachung eines VNC-Servers ein selbstdefiniertes Kommando erforderlich:

vi /etc/nagios-plugins/config/my-commands.cfg

Folgenden Befehl einfügen:

# 'check_vnc' command definition
define command{
       command_name    check_vnc
       command_line    /usr/lib/nagios/plugins/check_tcp -H '$HOSTADDRESS$' -p '$ARG1$' -w 5 -c 8 -e "RFB"
       }

Service Definition für VNC-Server:

define service{
       use                     generic-service         ; Inherit default values from a template
       host_name               localhost
       service_description     JD-VNC
       check_command           check_vnc!5901
       }
Bulbgraph.png Hinweis:
Der Befehl check_vnc!5901 überprüft einen VNC-Server auf Port 5901 (Display 1). Für Displaynummer 10 wäre der Port dann entsprechend 5910 (check_vnc!5910).