Wir möchten einen Server haben, der unser Netzwerk und unsere Services überwacht und ggf. einen Überblick über den Status ausgibt sowie uns im Notfall auf dem Handy alarmiert, wenn etwas wichtiges nicht läuft. Hierzu haben wir uns Nagios und https://www.icinga.org/ Icinga angesehen und uns letztlich für letzteres entschieden.

Basissystem#

Als Basis habe ich auf einem ausrangierten Netbook ein Debian Jessie (Testing Version Juli 2013) installiert. Debian Linux benutzt als Paketmanager das Programm "aptitude", das es erlaubt, einzelne Pakete mitsamt ihren Abhängigkeiten zu installieren oder zu deinstallieren.

Als Zusatz habe ich wie immer joe installiert. Außerdem bietet sich je nach Netzwerkzugang das Paket resolvconf an.

  aptitude install joe resolvconf

Netzwerkkonfiguration#

Da der Monitoring-Rechner möglichst viele Aspekte des Netzes testen soll aber gleichzeitig von diesem nicht abhängig sein sollte, konfiguriere ich drei mögliche Netzwerkverbindungen: Ein Netzwerkkabel (eth0), ein WLAN (wlan0) und eine Verbindung über einen UMTS-Stick (ppp0).

...to be done

Jabber#

Die Kommunikation mit der Außenwelt, insbesondere mit einem Mobiltelefon, soll über das XMPP (Jabber) Protokoll stattfinden.

...to be done

vorläufige Linkliste zum Thema:

Installation#

Ich möchte nicht nur das "nackte" Icinga nutzen, sondern auch die neue, erweiterte Web-Oberfläche. Diese ist im Paket "icinga-web" enthalten. Die klassische Oberfläche ist im Paket "icinga-cgi" enthalten. Will man beide gleichzeitig installieren, ergibt sich ein Konflikt zwischen den zwei empfohlenen Varianten des Apache Webserver. Deshalb kommt noch das Paket apache2-mpm-prefork hinzu. Des weiteren möchte ich gerne meine Datenbank in einem PostgreSQL-Server und nicht in MySQL haben, weswegen ich noch einige Pakete bzgl. der Anbindung an PostgreSQL hinzugefügt habe:

  aptitude install icinga icinga-web apache2-mpm-prefork postgresql php5-pgsql libdbd-pgsql postgresql-client

Bei der Installation werde ich (für das Paket "icinga-cgi", wie man im Titel des Fensterchens sehen kann) nach dem Passwort für den Benutzer icingaadmin gefragt. Das ist der Benutzer, mit dem ich mich später in die klassische Weboberfläche unter http://inicinga.bayen.loc/icinga einloggen kann.

Für das "icinca-ido" Paket werde ich nach einem Datenbank-Passwort gefragt. Ich richte die Datenbank in PostgreSQL automatisch durch die Debian-Installationsskripte (und nicht manuell) ein und vergebe hier ein Passwort (meins ist leicht ähnlich dem vorhergehenden).

Danach wurde ich nach dem Passwort (für das Paket "icinga-web") für den Benutzer "root" gefragt. Hier kann man ggf. wieder ein ähnliches Passwort wie gerade (oder ein ganz anderes) verwenden. Dieses gilt dann für die neue Weboberfläche unter http://icinga.bayen.loc/icinga-web.

Es erscheint eine Frage, ob ich externe Befehle benutzen möchte. Dies wird als ein potentielles Sicherheitsrisiko beschrieben. Da ich hiermit erst einmal experimentieren möchte, erlaube ich es dennoch.

Aus mir nicht ganz nachvollziehbaren Gründen ergab die "modernere" Oberfläche unter /icinga-web keine Anzeige. Nach ein bisschen Suchen und lesen sah ich in der Debian.README-Datei zum Paket icinga-idoutils, das man ein Icinga-Modul aktivieren muss, damit Icinga per ido Daten in die Datenbank schreibt. Meiner Meinung nach sollte das bei der Paketinstallation von selber so eingerichtet werden, wird es aber nicht... Das habe ich dann mit folgendem Befehl nachgeholt:

  cp /usr/share/doc/icinga-idoutils/examples/idoutils.cfg-sample /etc/icinga/modules/idoutils.cfg

Im Icinga-Web waren alle Zeitangaben in der falschen Zeitzone (GMT anstatt CEST). Das konnte ich beheben wie auf http://www.monitoring-portal.org/wbb/index.php?page=Thread&threadID=24741 beschrieben (ist zwar IMHO nicht ganz sauber, weil es im Server geändert wird und nicht in der Applikation, aber für mich läufts so).

Konfigurationsdateien#

Grundsätzlich stehen alle Konfigurationen im Verzeichnis /etc/icinga/objects/ in Dateien mit der Endung ".cfg". Im Prinzip ist auch egal, was wir hier in welche Datei schreiben. für mich sieht es sinnvoll aus, für jeden Host im Netzwerk, den ich überwachen will, eine Datei anzulegen. In dieser Datei definiere ich dann den Host sowie alle auf diesem host ablaufenden Services.

Neue Kommandos definiere ich zentral in der Datei commands.cfg, um diese nur einmal zentral zu verwalten. Viele Kommandos sind übrigens bereits von den Debian-Paketen vorkonfiguriert. Diese command-Definitionen stehen in /etc/nagios- plugins/config/.

Neuen Host anlegen#

Ich erzeuge im Verzeichnis /etc/icinga/objects/ für den Host "krefix" eine Datei "krefix.cfg". Dort schreibe ich als erstes folgendes hinein:

  define host{
        use                     generic-host
        host_name               krefix
        alias                   Krefix Router
        address                 192.168.2.1
  }

Damit die Änderung an der Konfiguration gültig wird, muss noch der Icinga-Server neu gestartet werden:

  invoke-rc.d icinga restart

Auf der Weboberfläche kann man nun bereits sehen, ob dieser Host (per Ping) erreichbar ist.

Services anlegen#

Nun schreibe ich in die Datei des Hosts weitere Einträge für die Services, die dieser Host bietet:

  define service{
        use                     generic-service
        host_name               krefix
        service_description     DNS Nameserver intern
        check_command           check_dig!krefix
  }

Bei "check_dig" handelt es sich um ein "command". Dieses ist bereits vordefiniert. Manche Commands sind durch die Debian-Pakete vordefiniert, andere muss man selber noch definieren (z.B. in der Datei commands.cfg, siehe unten).

Im folgenden beschreibe ich einige Services, die ich eingerichtet habe:

DHCP#

Damit ein DHCP-Server getestet werden kann, muss ein command definiert werden (z.B. in der Datei commands.cfg).

  define command{
                command_name            check_dhcp_service
                command_line            $USER1$/check_dhcp -i eth0
  }

Dann geht es aber immer noch nicht, weil der hierin benutzte Befehl check_dhcp nämlich root-Rechte benötigt:

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

Die entsprechende Service-Definition sieht folgendermassen aus:

  define service{
        use                     generic-service
        host_name               krefix
        service_description     DHCP-Server
        check_command           check_dhcp_service
  }

Icinga-Werte mit Conky auf den Desktop beamen#

Wieso entdecke ich diese spannende Seite erst jetzt?
Danke an Thomas für die ausführliche Anleitung.
Hier ein paar Notizen meiner Gehversuche mit Icinga und Conky. (Markus Monderkamp, 23.07.2013)

Ist Icinga erst einmal soweit konfiguriert, bietet sich das Zeichnen seiner Sensorenwerte auf den Desktop an.

 sudo aptitude install conky

Dann:

Eine geschmackvollere Ausgabe erzeugt laut c't Linux Spezial Magazin die Conky-Konfiguration aus Reloj Conky (http://votritis.deviantart.com/art/Reloj-Conky-208415121). Granular einstellen lässt sich Conky u.a. für Icinga mit ConkyWizard (http://code.google.com/p/conkywizard/). Weitere Infos zu Conky liefert auch die betreffende Linksammlung aus der c't: http://www.heise.de/ct/special/13/02/links/086.shtml .

ältere Version dieses Artikels (ca. aus 2011)#

Icinga ist ein inzwischen ordentlich verbesserter Fork von Nagios.

Installation#

Basissystem#

Ich habe Nagios auf einem dedizierten, akkugestützten System installiert (sprich: auf einem eigenen, preiswerten Netbook), auf dem am besten sonst nichts anderes läuft. Es sollte tunlichst vermieden werden, daß dieses System von irgendwelchen anderen Problemen in Mitleidenschaft gezogen werden kann (schließlich ist der Monitoring-Dienst der einzige, der nicht vom Monitoring überwacht werden kann...), daher sollte es möglichst autark sein. Später werde ich ihm dazu noch einen eigenen UMTS-Stick (für einen Internet-Zugang und SMS-Meldungen) spendieren.

Zur Installation auf einem Debian Squeeze Basissystem habe ich folgendes gemacht:

Da ich eine aktuelle Icinga-Version einspielen möchte, habe ich (nach einem normalen upgrade) die Squeeze Backports eingebunden.

Icinga#

  aptitude install postgresql
  su postgres
  pgsql
      create language plpgsql;
  \d
  \d
  aptitude -t squeeze-backports install icinga
  aptitude -t squeeze-backports install icinga-docs icinga-idoutils

Commandfile freigeben#

Icinga kann über ein sogenanntes Command File gesteuert werden. Das benutzt insbesondere die Weboberfläche, um Befehle, z.B. für einen Reschedule zu geben. Diese Schnittstelle muss aber zuerst freigegeben werden:

In /etc/icinga/icinga.cfg ändern:

  check_external_commands=1

Nun gibt es aber noch ein anderes Problem: In der Standard-Debian-Installation hat die Weboberfläche keinen Zugang zum Commandfile /var/lib/icinga/rw.icinga.cmd.

Laut dem an sonsten recht hilfreichen Artikel http://suckup.de/2010/09/26/icinga/ kann man mit "dpkg-statoverride" die Zugriffsrechte dauerhaft (auch Paketupdate-übergreifend) ändern.

  dpkg-statoverride --update --add nagios www-data 660 /var/lib/icinga/rw/icinga.cmd

Leider fehlt dort erstens der Hinweis, das man auch ein "x"-Recht für das "rw"-Verzeichnis braucht und zweitens blieben bei mir die Zugriffsrechte immer genau so lange bestehen, bis ich den Icinga-Server neu gestartet habe. :-(

Also habe ich mir das Problem nochmal betrachtet und stttdessen den Webserver in die Nagios-Gruppe aufgenommen:

  addgroup www-data nagios

Icinga-Web#

Bis hierhin komme ich erst mal so weit, das die klassische Weboberfläche unter http://monitorserver/icinga läuft. Leider gibt es für die neue, viel hübschere Weboberfläche Icinga Web, die für mich ein wichtiger Grund war, mich für Icinga und gegen Nagios zu entscheiden, kein Debian Paket.

Hier steht beschrieben, wie man icinga-web aufsetzt, für das es scheinbar noch kein Debian-Paket gibt:

...ich werde hier also weiter berichten.

SMS-Versand#

Ich habe mein Skript zum SMSVersand nach "/root" installiert, es ausführbar gemacht und benutze dieses dann aus den Icinga-Konfigurationen heraus.

  aptitude install groovy
  scp smsversand.groovy root@monitorserver:.

Ergebnis bis hierhin#

Bis hierhin komme ich erst mal so weit, das die klassische Weboberfläche unter http://monitor/icinga läuft.