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 (Admin-Nutzer: nagiosadmin). 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. Es sind bereits eine ganze Zahl von Plugins vorhanden, die sehr viele Monitoring Aufgaben abdecken. Es gibt aber zahlreiche weitere Plugins im Internet z.B. auf der Nagios Exchange Seite: http://exchange.nagios.org/ .

Diese Plugins sind ausführbare Programme und können separat gestartet werden. Mit Hilfe der Option -h bzw. --help bzw. -help kann die Hilfe des jeweiligen 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 Userauthorisierung 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. 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
       }


FTP Server

Überwachung eines FTP-Servers:

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


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
       }

Überwachung IMAPS-Server (z.B. Cyrus mit SSL Verschlüsselung):

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


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).


Samba

Leider befindet sich kein Plugin für Samba im Lieferumfang von Nagios. Auf der Seite http://exchange.nagios.org/directory/Plugins/System-Metrics/File-System/SMB/check_smb/details steht das Plugin check_smb zur Verfügung, das zur Überwachung eines Samba-Servers dient.

Da das Plugin von obiger Seite nicht direkt auf den Server heruntergeladen werden kann, sondern nur auf den PC, wird es hier direkt veröffentlicht, um ein manuelles Übertragen auf den Server zu vermeiden.


Plugin (Shell Script) erstellen:

vi /usr/lib/nagios/plugins/check_smb

Folgende Zeilen einfügen:

#!/bin/sh

# Check anon access to SMB for nagios.
# Dave Love <fx@gnu.org>, 2005-07-15

REVISION=1.0
PROGNAME=`/usr/bin/basename $0`
PROGPATH=`echo $0 | /bin/sed -e 's,[\\/][^\\/][^\\/]*$,,'`

. $PROGPATH/utils.sh

usage () {
   echo "\
Nagios plugin to check if (anonymous) access to SMB on host works.

Usage:
  $PROGNAME -H <host>
  $PROGNAME --help
  $PROGNAME --version
"
}

help () {
    print_revision $PROGNAME $REVISION
    echo; usage; echo; support
} 

if [ $# -lt 1 ] || [ $# -gt 2 ]; then
    usage
    exit $STATE_UNKNOWN
fi

while test -n "$1"; do
    case "$1" in
        --help | -h)
            help
            exit $STATE_OK;;
        --version | -V)
            print_revision $PROGNAME $REVISION
            exit $STATE_OK;;
        -H)
            shift
            host=$1;;
        *)
            usage; exit $STATE_UNKNOWN;;
    esac
    shift
done

stdout=`/usr/bin/smbclient -U guest -N -L "$host" 2>&1`

if [ $? -eq 0 ]; then
    header=`echo "$stdout" | grep Server= | head -n 1`
    echo "OK $header"
    exit $STATE_OK
else
    err=`echo "$stdout" | head -n 1`
    echo "CRITICAL SMB anon access: $err"
    exit $STATE_CRITICAL
fi


Kommando für das Plugin check_smb erstellen:

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

Folgende Zeilen einfügen:

define command{
       command_name    check_smb
       command_line    /usr/lib/nagios/plugins/check_smb -H '$HOSTADDRESS$'
       }


Service Definition:

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


Prozesse überwachen

Standardmäßig wird bereits bei der Installation ein Service zur Überwachung der Anzahl der Prozesse eingerichtet. Zu diesem Zweck wird das Nagios Plugin check_procs verwendet.

define service{
       use                             generic-service         ; Name of service template to use
       host_name                       localhost
       service_description             Total Processes
       check_command                   check_procs!250!400
       }

Mit Hilfe dieser Definition wird eine Warnung generiert, wenn mehr als 250 Prozesse laufen und ein Critical Status, wenn mehr als 400 Prozesse laufen. Diese Parameter können bei Bedarf angepasst werden.


Das Plugin check_procs kann aber auch zur Überwachung einzelner Prozesse (Programme) eingesetzt werden. Für diesen Zweck sind aber mehr Optionen erforderlich, als im Kommando check_procs definiert sind. Deshalb werden hier drei weitere Kommandos angelegt, die das Plugin check_procs verwenden.

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

Folgende Zeilen einfügen:

define command{
       command_name    check_process
       command_line    /usr/lib/nagios/plugins/check_procs -C '$ARG1$' -a '$ARG2$' -w '$ARG3$' -c '$ARG4$'
       }

define command{
       command_name    check_process_cmd
       command_line    /usr/lib/nagios/plugins/check_procs -C '$ARG1$' -w '$ARG2$' -c '$ARG3$'
       }

define command{
       command_name    check_process_arg
       command_line    /usr/lib/nagios/plugins/check_procs -a '$ARG1$' -w '$ARG2$' -c '$ARG3$'
       }

Dadurch stehen folgende Kommandos zur Verfügung:

  • check_process_cmd: Prüft die Anzahl der Prozesse, die mit dem Kommando $ARG1$ gestartet wurden
  • check_process_arg: Prüft die Anzahl der Prozesse, die mit dem Argument $ARG1$ gestartet wurden
  • check_process: Prüft die Anzahl der Prozesse, die mit dem Kommando $ARG1$ und Argument $ARG2$ gestartet wurden


Diese Kommandos können eingesetzt werden, um z.B. Open-Xchange zu überwachen. Open-Xchange (Java-Anwendung) wird mit dem Kommando /usr/bin/java gestartet. Im Argument ist openexchange vorhanden. Open-Xchange besteht aus zwei Prozessen. Ein Admin-Prozess und ein Groupware-Prozess. Deshalb sind die Warn- und Critical- Level jeweils auf 2:2 gesetzt. D.H. es wird ein Critical Status geliefert, wenn weniger als 2 Prozesse und mehr als 2 Prozesse von Open-Xchange laufen.

Die Service-Definition für Open-Xchange könnte folgendermaßen aussehen:

define service{
       use                     generic-service         ; Inherit default values from a template
       host_name               localhost
       service_description     OX
       check_command           check_process!java openexchange!2:2!2:2
       }


Fritzbox DHCP-Server

Nagios kann auch einen DHCP-Server, z.B. den der Fritzbox, überwachen. Das nötige Plugin ist bereits im Standard Pluginspaket enthalten.

Damit das DHCP-Plugin mit den Userrechten von Nagios funktioniert, muss das Setuid-Flag gesetzt werden:

chmod +s /usr/lib/nagios/plugins/check_dhcp


Service-Definition (z.B. für Fritzbox; Nagios verwendet das eth0-Interface - evtl. anpassen):

define service{
       use                     generic-service         ; Inherit default values from a template
       host_name               fritzbox
       service_description     DHCP
       check_command           check_dhcp_interface!eth0
       }


Fritzbox DNS-Server

Neben dem DHCP-Server kann mittels Nagios auch der DNS-Server überwacht werden. Das Plugin ist ebenfalls im Standard Pluginpaket enthalten.


Service-Definition:

define service{
       use                     generic-service         ; Inherit default values from a template
       host_name               fritzbox
       service_description     DNS
       check_command           check_dig!fritz.box
       }


Fritzbox DSL Status

Mittels UPNP ist es möglich, den DSL Status (Connected ja/nein) auszulesen. Dazu muss ein Plugin und ein Kommando erstellt werden. Daneben sind noch zwei Python-Module erforderlich:

apt-get install python-pycurl python-libxml2


Nagios Plugin check_fritzbox

vi /usr/lib/nagios/plugins/check_fritzbox

Folgende Zeilen einfügen:

#!/usr/bin/python

import os, sys

import pycurl
import libxml2

class Response:
    def __init__(self):
        self.contents = 
    def body_callback(self, buf):
        self.contents = self.contents + buf

# use your IP here!
url = "http://fritz.box:49000/upnp/control/WANIPConn1"
if len(sys.argv) > 1:
   url = "http://"+sys.argv[1]+":49000/upnp/control/WANIPConn1"

data = """
<?xml version="1.0"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"
  s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
   <s:Body>
      <u:GetStatusInfo xmlns:u="urn:schemas-upnp-org:service:WANIPConnection:1" />
   </s:Body>
</s:Envelope>"""

r = Response()
c = pycurl.Curl()
try:
    try:
        c.setopt(pycurl.URL, url)
        c.setopt(pycurl.POST, 1)
        c.setopt(pycurl.POSTFIELDS, data)
        c.setopt(pycurl.INFILESIZE, len(data))
        c.setopt(pycurl.WRITEFUNCTION, r.body_callback)
        c.setopt(pycurl.CONNECTTIMEOUT, 30)
        c.setopt(pycurl.TIMEOUT, 300)
        c.setopt(pycurl.HTTPHEADER, ['SOAPACTION: "urn:schemas-upnp-org:service:WANIPConnection:1#GetStatusInfo"', 'CONTENT-TYPE: text/xml;', 'User-Agent: nagios'])
        c.perform()
    except:
        print "ERROR - HTTP request to UPNP server not possible"
        sys.exit(2)
finally:
    c.close()

exitcode = 2
try:
    try:
        doc = libxml2.parseDoc(r.contents)
        ctxt = doc.xpathNewContext()
        ctxt.xpathRegisterNs('s',"http://schemas.xmlsoap.org/soap/envelope/")
        ctxt.xpathRegisterNs('u',"urn:schemas-upnp-org:service:WANIPConnection:1")
        elements = ctxt.xpathEval('/s:Envelope/s:Body/u:GetStatusInfoResponse/NewConnectionStatus')
        state = elements[0].content
        elements = ctxt.xpathEval('/s:Envelope/s:Body/u:GetStatusInfoResponse/NewUptime')
        uptime = elements[0].content
        print "OK - %s: uptime: %ss" % (state, uptime)
        if state == "Connected":
            exitcode = 0
        else:
            exitcode = 1
    finally:
        doc.freeDoc()
except:
    print "ERROR - cannot parse UPNP response or response invalid"

sys.exit(exitcode)


Nagios Kommando:'

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

Folgende Zeilen einfügen:

define command{
       command_name    check_fritzbox
       command_line    /usr/lib/nagios/plugins/check_fritzbox
       }

Service Definition: define service{

       use                     generic-service         ; Inherit default values from a template
       host_name               fritzbox
       service_description     DSL
       check_command           check_fritzbox
       }


Überwachung anderer Rechner/Server

Neben Netzwerkdiensten können auch Prozesse, Speicher, Festplattenplatz und Ähnliches auf anderen Rechnern/Servern mit Hilfe von Nagios überwacht werden. Dazu wird auf dem zu überwachenden Rechner der Nagios-NRPE-Server und auf dem Nagios-Host das NRPE-Client-Plugin installiert. Auf dem NRPE-Server stehen alle bekannten Nagios-Plugins zur Verfügung.

NRPE-Server (zu überwachender Linux-Rechner)
apt-get install nagios-nrpe-server

Anpassen der Konfiguration:

vi /etc/nagios/nrpe.cfg

Folgende Änderung durchführen:

dont_blame_nrpe=1

Verfügbare Nagios-Checks definieren:

/etc/nagios/nrpe_local.cfg

Folgende Zeilen einfügen:

allowed_hosts=IP_des_NAGIOS-HOST
command[check_process]=/usr/lib/nagios/plugins/check_procs -C $ARG1$ -a $ARG2$ -w $ARG3 -c $ARG4
command[check_process_arg]=/usr/lib/nagios/plugins/check_procs -a $ARG1$ -w $ARG2$ -c $ARG3
command[check_process_cmd]=/usr/lib/nagios/plugins/check_procs -C $ARG1$ -w $ARG2$ -c $ARG3
command[check_all_disks]=/usr/lib/nagios/plugins/check_disk -w '$ARG1$' -c '$ARG2$' -e

Bei Bedarf weitere Nagios-Kommandos ergänzen (siehe Kommandos oben)

Nagios NRPE-Server neu starten:

/etc/init.d/nagios-nrpe-server restart


NRPE-Client (Nagios Host)
apt-get install nagios-nrpe-plugin

Service-Definition, um z.B. Fail2Ban auf einem anderen Server/virtuellen Server zu checken:

define service{
       use                     generic-service         ; Inherit default values from a template
       host_name               webserver
       service_description     Fail2Ban
       check_command           check_nrpe!check_process_cmd!fail2ban-server 1:1 1:1
       }