Es gibt mittlerweile doch so einige Beiträge im Internet, in denen beschrieben ist wie man Nagios Notifications per Jabber (XMPP) versendet. Was mich dabei immer ein wenig gestört hat war die Unübersichtlichkeit der Meldungen. Prinzipiell wurde die Konfiguration nur auf Jabber umgebogen – auf die Möglichkeiten die sich dadurch vielleicht ergeben wurde nicht eingegangen. Die Variante von der ich hier spreche hätte auch schon bei eMails angewendet werden können – warum nicht? Ich weiß es nicht.

Wohin des Weges?

Was möchte ich überhaupt? Ich möchte die Nagios Notifications per Jabber senden. Aber nicht einfach nur Text und gut, sondern Meldungen in einer vernünftigen Optik und weiteren Funktionen.

Damit meine ich:

  • farbige Meldungen -> man sieht sofort welchen Status die Meldung beinhaltet (rot, gelb, grün)
  • Links zu weiteren Diensten, die direkt aus dem Jabber Fenster zu weiteren Informationen führen

Prerequisites

Das ganze benötigt quasi nur sendxmpp als Zusatz zu einem funktionsfähigen Nagios. Wie man sendxmpp installiert möchte ich an dieser Stelle nicht beschreiben. Unter Debian Lenny befindet es sich im Repository; für RHEL muss man sich das Paket besorgen.

Es sollte soweit getestet sein, dass der Nagios Account Nachrichten mit Hilfe von sendxmpp senden kann. Dazu wird bspw. eine Konfigurationsdatei sendxmpprc angelegt. Diese habe ich im Nagios Plugins Verzeichnis abgelegt.

Und dann?

Dann geht alles ganz einfach ;-) Ich habe ein sendxmpp_wrapper Script geschrieben. Dieses Script wird von Nagios aufgerufen und verschickt am Ende die Nachricht. Die diversen Informationen werden dabei in ein HTML Gerüst verpackt, wodurch das ganze dann formatiert zum Empfänger geschickt wird. Das Script gibt es hier: sendxmpp_wrapper

Damit aus dem ganzen ein Schuh wird, muss noch die commands.cfg um die neue Möglichkeit erweitert werden:
# 'host-notify-by-jabber' command definition
define command{
        command_name    host-notify-by-jabber
        command_line    /usr/lib/nagios/plugins/sendxmpp_wrapper.sh HOST $CONTACTNAME$\@xmpp.... "$NOTIFICATIONTYPE$" "$HOSTNAME$" "$HOSTOUTPUT$" "$HOSTSTATE$" "$HOSTOUTPUT$"
        }

# 'notify-by-jabber' command definition
define command{
        command_name    notify-by-jabber
        command_line    /usr/lib/nagios/plugins/sendxmpp_wrapper.sh SERVICE $CONTACTNAME$\@xmpp.... "$NOTIFICATIONTYPE$" "$HOSTNAME$" "$SERVICEDESC$" "$SERVICESTATE$" "$SERVICEOUTPUT$"
        }
Diese Definition geht davon aus, dass der “contact_name” in Nagios auch als XMPP Adresse gilt. Der contact_name hans ist also als hans@xmpp.foo.bar vorhanden. Sollte das nicht zutreffen, kann man innerhalb einer Contact Definition auch weitere Variablen angeben und diese dann nutzen. Beispielsweise lässt sich “address1″ in den Contacts definieren und als “$CONTACTADDRESS1$” (anstelle von “$CONTACTNAME$”) dann in den commands verwenden.