Ersetzen von NRPE mit Hilfe von Nag(ix)SC

Statt eine "statische" XML-Datei auf einen Web-Server zu legen, kann man diese auch "on demand" generieren lassen - und somit eine Alternative zu NRPE schaffen.

Beteiligte Rechner

  • Der zu überwachende Server ("server")
  • Der Nagios-Server ("nagios")

Vorgehensweise

Auf dem zu überwachenden Server

  1. Download der Software
  2. Anlegen einer (oder mehrerer) conf-Dateien
  3. Konfiguration des HTTP-Servers
  4. Starten des HTTP-Servers

Download der Software

1 root@server:~ % cd /usr/local
2 root@server:/usr/local % wget -O /tmp/nagixsc.tar.gz http://github.com/wAmpIre/nagixsc/tarball/master
3 [...]
4 root@server:/usr/local % tar xzf /tmp/nagixsc.tar.gz
5 root@server:/usr/local % mv wAmpIre-nagixsc-* nagixsc

Anlegen einer (oder mehrerer) conf-Dateien

1 root@server:/usr/local % cd nagixsc
2 root@server:/usr/local/nagixsc % mkdir -p etc/conf

In dem hier angelegten Verzeichnis liegen später die "conf"-Dateien, die die auszuführenden Plugins enthält. Für einen Test-Setup kann man mit mitgelieferten Dateien (nagixsc_debian.conf und nagixsc_usrlocal.conf) verwenden:

1 root@server:/usr/local/nagixsc % cp sample-configs/conf/nagixsc* etc/conf/

Konfiguration des HTTP-Servers

Für den HTTP-Server nagixsc_conf2http liegt ebenfalls eine Beispielkonfigurationsdatei im Verzeichnis sample-configs/, sie heisst conf2http.cfg und auch sie sollte man nach "etc/conf2http.cfg" kopieren:

 1 [server]
 2 ip: 0.0.0.0
 3 port: 15666
 4 ssl: false
 5 sslcert: server.pem
 6 
 7 conf_dir: /usr/local/nagixsc/etc/conf
 8 
 9 [users]
10 ; echo -n "Password" | md5sum -
11 nagixsc: 019b0966d98fb71d1a4bc4ca0c81d5cc ; PW: nagixsc
Im Abschnitt "[server]" werden folgende Netzwerk-Einstellungen festgelegt:
  • ip: Auf welcher IP der Server hören soll, 0.0.0.0 bedeutet alle IPs bzw. Netzwerkkarten
  • port: Port-Nummer für den Server, hier 15666
  • ssl: Mit true wird die HTTP-Verbindung SSL-verschlüsselt
  • sslcert: Pfad zum SSL-Key und -Zertifikat

Dazu kommt noch "conf_dir", mit dem man den - am Besten absoluten - Pfad zu den "conf"-Dateien festlegt. Für einen produktiven Server sollte man hier z.B. das oben angelegte "/usr/local/nagixsc/etc/conf"-Verzeichnis angeben.

Der Abschnitt "[users]" enthält einen oder mehrere Benutzer, die sich authentifizieren können. Um keine Klartext-Passwörter speichern zu müssen, wird ein MD5-Hash des Passworts gespeichert. Diesen kann man ganz einfach an einer Shell berechnen (Achtung! "HISTSIZE=0" speichert keine Shell-History mehr!)

1 root@server:... % HISTSIZE=0
2 root@server:... % echo -n "nagixsc" | md5sum -
3 019b0966d98fb71d1a4bc4ca0c81d5cc -

FIXME ACLs

Starten des HTTP-Servers

Zum Testen bietet sich das Starten als normaler Prozess an:

1 root@server:/usr/local/nagixsc % ./nagixsc_conf2http.py -c etc/conf2http.cfg

Bei jedem Zugriff gibt der Server eine Zeile aus, sodass man sehr schnell sieht, ob und von wo zugegriffen wurde.

Funktioniert alles, kann man später den HTTP-Server zusätzlich mit dem Schalter "-d" starten. Der Prozess schiebt sich dann als Daemon in den Hintergrund:

1 root@server:/usr/local/nagixsc % ./nagixsc_conf2http.py -c etc/conf2http.cfg -d

FIXME Init.d-Scripts

Auf dem Nagios

  1. Download der Software
  2. Testen der HTTP-Verbindung
  3. Zusammensetzung der URLs
  4. Konfiguration des Nagios

Download der Software

1 root@nagios:~ % cd /usr/local
2 root@nagios:/usr/local % wget -O /tmp/nagixsc.tar.gz http://github.com/wAmpIre/nagixsc/tarball/master
3 [...]
4 root@nagios:/usr/local % tar xzf /tmp/nagixsc.tar.gz
5 root@nagios:/usr/local % mv wAmpIre-nagixsc-* nagixsc

Testen der HTTP-Verbindung

1 root@nagios:/usr/local % cd nagixsc
2 root@nagios:/usr/local/nagixsc % ./nagixsc_xml2nagios.py -u http://SERVER:15666/nagixsc_debian/ -l nagixsc -a nagixsc -O passive -p /dev/stdout
Aufruf-Parameter:
  • -u URL: URL zum XML-File, hier vom Server beim Zugriff erzeugt
  • -l USER: HTTP-User zur Anmeldung
  • -a PASSWORT: HTTP-Passwort zur Anmeldung
  • -O MODE: Ausgabe der Ergebnisse
    • passive: Schreibt in das External Command File/Pipe, keine Ausgaben am Bildschirm (z.B. für Aufruf durch cron)
    • passive_check: Schreibt in das External Command File/Pipe, Ausgabe wie Nagios-Plugin
    • checkresult: Schreibt Check Result Files, keine Ausgabe am Bildschrim (z.B. für Aufruf durch cron)
    • checkresult_check: Schreibt Check Result Files, Ausgabe wie Nagios-Plugin
    • active: Wird nur ein Service-Check im XML zurückgegeben, beendet sich das Tool mit den im XML angegebenen Output und Returncode
  • -p PIPE: Pfad zum External Command File (passive und passive_check)
  • -r RESULTDIR: Pfad zum Check Result Spool Directory (checkresult und checkresult_check)

Dies liefert die Ausgabe:


[1276636413] PROCESS_HOST_CHECK_RESULT;host1;0;OK - 127.0.0.1 responds to ICMP. Packet 1, rta 0.057ms|pkt=1;;0;5 rta=0.057;1000.000;1000.000;;
[1276636413] PROCESS_SERVICE_CHECK_RESULT;host1;Disk_Root;0;DISK OK - free space: / 6926 MB (49% inode=71%);| /=7156MB;12674;13378;0;14083
[1276636413] PROCESS_SERVICE_CHECK_RESULT;host1;Disk_Home;0;DISK OK - free space: /home 23547 MB (50% inode=96%);| /home=22910MB;42241;44588;0;46935
[1276636413] PROCESS_SERVICE_CHECK_RESULT;host1;Load;0;OK - load average: 0.21, 0.32, 0.33|load1=0.210;5.000;10.000;0; load5=0.320;5.000;10.000;0; load15=0.330;5.000;10.000;0;
[1276636413] PROCESS_SERVICE_CHECK_RESULT;host2.foo.bar;Procs_Total;0;PROCS OK: 182 processes
[1276636413] PROCESS_SERVICE_CHECK_RESULT;host2.foo.bar;Swap;0;SWAP OK - 95% free (1806 MB out of 1906 MB) |swap=1806MB;953;476;0;1906
[1276636413] PROCESS_SERVICE_CHECK_RESULT;host2.foo.bar;Users;1;USERS WARNING - 12 users currently logged in |users=12;10;15;0

Man erkennt den Host-Check für "host1" und je 3 Service-Checks für "host1" und "host2.foo.bar".

Zusammensetzung der URLs

Die URL besteht mindestens aus folgenden Teilen:
  • Das Protokoll http oder https
  • Die IP oder der Name des Servers
  • Der Port, auf dem der Server läuft
  • Der Name der "conf"-Dateien
Man hat nun die Möglichkeit, die Checks weiter einzuschränken:
  • Der Host- bzw. Abschnittsname (z. B. "host1") => http://SERVER:15666/nagixsc_debian/host1
  • Eine Service-Description (z. B. "Disk_Root") => http://SERVER:15666/nagixsc_debian/host1/Disk_Root

Ruft man obigen Befehl mit den beiden, längeren URLs auf, bekommt man folgende Ausgaben:


[1276636413] PROCESS_HOST_CHECK_RESULT;host1;0;OK - 127.0.0.1 responds to ICMP. Packet 1, rta 0.057ms|pkt=1;;0;5 rta=0.057;1000.000;1000.000;;
[1276636413] PROCESS_SERVICE_CHECK_RESULT;host1;Disk_Root;0;DISK OK - free space: / 6926 MB (49% inode=71%);| /=7156MB;12674;13378;0;14083
[1276636413] PROCESS_SERVICE_CHECK_RESULT;host1;Disk_Home;0;DISK OK - free space: /home 23547 MB (50% inode=96%);| /home=22910MB;42241;44588;0;46935
[1276636413] PROCESS_SERVICE_CHECK_RESULT;host1;Load;0;OK - load average: 0.21, 0.32, 0.33|load1=0.210;5.000;10.000;0; load5=0.320;5.000;10.000;0; load15=0.330;5.000;10.000;0;

... und ...


[1276636413] PROCESS_SERVICE_CHECK_RESULT;host1;Disk_Root;0;DISK OK - free space: / 6926 MB (49% inode=71%);| /=7156MB;12674;13378;0;14083

Konfiguration des Nagios

Natürlich müssen auch bei diesem Weg die Hosts und Services im Nagios gepflegt bzw. eingerichtet werden. Um dafür ein Grundgerüst zu bekommen, kann man die XML-Datei und das Tool "nagixsc_xml2cfg" nutzen:

1 root@nagios:/usr/local/nagixsc/ % ./nagixsc_xml2cfg.py -u http://SERVER:15666/nagixsc_debian/ -l nagixsc -a nagixsc
2 define host {
3 [...]
4 root@nagios:/usr/local/nagixsc/ % ./nagixsc_xml2cfg.py -u http://SERVER:15666/nagixsc_debian/ -l nagixsc -a nagixsc >/tmp/nagios-objects.cfg