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 https://www.icinga.org/ 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:
- http://www.lug-wr.de/wiki/index.php/UMTS
- http://wiki.debian.org/Wvdial
- http://www.lug-kr.de/wiki/Monitoring.Icinga
- http://www.lug-kr.de/wiki/MobilesInternet
- http://superuser.com/questions/225327/how-can-i-get-wvdial-to-run-from-etc-network-interfaces
- http://manpages.debian.net/cgi-bin/man.cgi?sektion=5&query=interfaces&apropos=0&manpath=sid&locale=en
- http://linux.die.net/man/5/wvdial.conf
- http://wiki.siduction.de/index.php?title=UMTS/GPRS_Internet_Zugang_erstellen_mit_Hilfe_von_wvdial
- http://www.eric-scheibler.de/ericsblog/blog/2012/04/09/Verwenden-des-UMTS-Modems-Huawei-E160-unter-Debian-Squeeze/
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 }
Gruppieren von Einträgen#
Es gibt zwei Systeme, um Host-Einträge zu gruppieren. Zum einen kann man host-Eigenschaften mit "use" vererben. Das ist sinnvoll, um Einträge in der host-Definition nur einmal schreiben zu müssen. Ein Beispiel hierfür kann z.B. die Definition von Bildern für das angezeigte Icon sein. Das sieht dann beispielsweise so aus:
define host{ name laptop icon_image didier/Laptop.png vrml_image didier/Laptop.png statusmap_image didier/Laptop.png notes Laptop-Rechner register 0 }
define host{ use laptop name meinrechner alias meinrechner address 192.168.2.50 ... }
Diese Art, Eigenschaften durch Vererbung zu gruppieren, geht auch mit anderen Objekttypen als nur mit Hosts. Näheres hierzu findet sich natürlich am besten in der Icinga-Anleitung zu Objektdefinitionen.
Eine andere Form von Gruppierungen kann man über den Eintrag hostgroups erreichen. Hier wird eine Gruppe einmal definiert. Dann kann man einzelne Hosts in diese Gruppe aufnehmen. Diese Gruppierung kann dann später z.B. in einer Auswertung benutzt werden, d.h. icinga-web erlaubt einem, alle Hosts einer bestimmten Abteilung in einer Liste anzuzeigen. Beispiel:
define hostgroup{ hostgroup_name abteilung1 }
define host{ use laptop name meinrechner alias meinrechner address 192.168.2.50 hostgroups abteilung1 ... }
Bilder vergeben#
Für die beiden Web-Oberflächen kann man für die Hosts kleine Bilder als Icons auswählen. In der Debian-Standardinstallation liegen diese im Verzeichnis /usr/share/nagios/htdocs/images/logos/ in verschiedenen Unterverzeichnissen je nach der Quelle der Files. Die Einträge für die Bilder können ganz gut von einer einheitlichen Host-Definition abgeleitet werden (wie oben im Beispiel für die Gruppierungen geschehen).
Notifications#
Bis hierhin kann unser Icinga auf der Weboberfläche schön anzeigen, welche Hosts und Services laufen und welche nicht. Schön wäre jetzt natürlich, wenn man diese Weboberfläche nicht den ganzen Tag anstarren muss, sondern automatisch informiert würde, wenn im Netzwerk etwas schiefgeht. Dazu dienen Notifications.
In der Standard-Konfiguration ist in der Definition für "generic-hosts" (in der Datei "generic-host_icinga.cfg"), von der alle Hosts abgeleitet werden, vorgegeben, das im Falle einer Notification alle Kontakte informiert werden, die in der Gruppe "admin" versammelt sind. Das kann man natürlich ändern, aber wir nehmen das erst einmal so hin und wollen nun für uns selbst einen Kontakt definieren, der dann Mitglied dieser Gruppe sein soll.
define contact{ contact_name tbayen alias Thomas Bayen service_notification_period 24x7 host_notification_period 24x7 service_notification_options w,u,c,r host_notification_options d,r service_notification_commands notify-service-by-jabber host_notification_commands notify-host-by-jabber pager bayen@jabber.org contactgroups admin }
Die Notification per EMail ist in allen Beispielen ausreichend erklärt, deshalb stelle ich hier eine Lösung per Jabber vor. Dazu habe ich das Debian-Paket "sendxmpp" installiert und die folgenden Kommandos definiert:
define command{ command_name notify-host-by-jabber command_line echo '$SHORTDATETIME$ $HOSTNAME$ $HOSTSTATE$/$NOTIFICATIONTYPE$: $HOSTOUTPUT$' | /usr/bin/sendxmpp -f /etc/icinga/sendxmpprc $CONTACTPAGER$ }
define command{ command_name notify-service-by-jabber command_line echo '$SHORTDATETIME$ $HOSTNAME$/$SERVICEDESC$ $SERVICESTATE$/$NOTIFICATIONTYPE$: $SERVICEOUTPUT$' | /usr/bin/sendxmpp -f /etc/icinga/sendxmpprc $CONTACTPAGER$ }
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:
- https://github.com/visibilityspots/scripts
:
"script can be used to display the output of icinga on your desktop conky setup.
Usage in conkyrc configfile: ${execpi 53 PATH/TO/conky-icinga.sh}" - https://github.com/arioch/scripts/blob/master/conky-icinga.sh
: "Scripts written for making daily life more comfortable"
- http://www.visibilityspots.com/conky-colors.html
: Farben, Icinga und Conky
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.