Debian Nagios
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.
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:
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.
Services
Mit dem Menüpunkt Monitoring/Servicedetail keine eine Auflistung incl. Status der definierten Services pro Host ausgegeben werden.
z.B.
Status Map
Mit dem Menüpunkt Monitoring/Status Map kann die Topologie des Netzwerkes incl. Status der einzelnen Hosts graphisch ausgegeben werden.
Z.B.
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, 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
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 }
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/python2.5 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)
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 }