Der klassische Weg um Benachrichtigung an Nutzer zu verschicken ist bei Icinga 2 (wie bei so vielen anderen Systemen auch) das Versenden einer Email. Für zeitnahe und mobilere Benachrichtigung gibt es den Versands von SMS, Sprachanrufe oder andere Optionen.

Mit dem Aufkommen und der starken Verbreitung von Chat-Diensten ist die Einbindung eines solchen Benachrichtigungsfunktion der offensichtliche nächste Schritt (oder zumindest eine tolle Spielerei). So gibt es Skripts für Slack Rocket Chat, Matrix, Telegram, selbstverständlich IRC und gerüchteweise auch Iridium. Wie man aus der Überschrift entnehmen kann geht hier es hier dann um einen weiteren Dienst, nämlich XMPP/Jabber (Jabber ist der alte Name des Protokolls).

XMPP ist ein freier Standard, erweiterbar und es gibt zahlreiche Implementierungen für Server und Clients. Der allgemeine Bekanntheitsgrad ist eher gering, obwohl der Einsatzbereich sehr groß ist. Zahlreiche größere Internetfirmen haben ihre Nachrichtenaustauschfunktionalität zu Beginn schlicht auf XMPP aufgebaut und mit freier Software umgesetzt (und dann natürlich einen “walled garden” um die Nutzer gebaut). Die Kommunikation verläuft ähnlich wie Email, ein Client (ein Nutzer bzw. sein(e) Endgerät(e)) verbindet sich mit einem Server und übergibt diesem eine Nachricht; diese wird dann zu dem Zielserver transportiert, welcher sie dann an den Empfänger weiterleitet. Ähnlich wie bei Email ist es ein föderiertes System, prinzipiell kann jeder sich einen XMPP-Server aufsetzen und mit allen anderen reden. Dementsprechend wird ein Nutzer auch durch eine JID identifiziert, die aus einem Nutzername und einem Domänenteil in der Form nutzer@domaene.tld besteht.

Es gibt nun drei Gründe für die Benachrichtigung via XMPP:

  1. Ganz generell ist ein zweiter Kanal sinnvoll, da der erste Kanal ausfallen kann. Sollte das Mailsetup ausfallen, kann niemand darüber per Email benachrichtigt werden und natürlich wären alle weiteren Benachrichtigungen ebenfalls nicht mehr möglich.
  2. XMPP ist ein sehr mächtiges vielfältiges Protokoll und kann einen Nutzer zeitnah auf einem quasi beliebigen Endgerät erreichen (vorausgesetzt dieses Endgerät ist in irgendeiner Form online, Stichwort: PUSH-Nachrichten). Zusätzlich kann eine XMPP-Infrastruktur in einer beliebigen Größenordnung selbst betrieben werden ohne sich weitere externe Abhängigkeiten ins Haus zu holen.
  3. Der Autor dieses Artikel ist ein XMPP-Fan und würde gerne ein wenig Werbung dafür machen. Auch als Alternative zu den populären proprietären IM-Lösungen fragwürdiger Unternehmen.

Was die Umsetzung angeht, so gibt es hier schon genug Vorlagen, unter anderem diesen Artikel aus gleichem Hause, welcher das Thema zwar abdeckt, aber nach sechs Jahren doch auch ein Update verdient. Zwei Punkte bedürfen im besonderen einer Aktualisierung:

  1. Der Wechsel von Python2 auf Python3
  2. Die eingesetzte XMPP-Bibliothek hat etwas Rost angesetzt

Aus diesem Grund wurde auch diese Variante entwickelt, aber die Verwendung von Umgebungsvariablen für die Übergabe von sensiblen Daten ist im Moment bei der Verwendung des Directors nicht möglich. Zusätzlich wird die sleekxmpp-Bibliothek mittlerweile nicht mehr weiterentwickelt oder gewartet. Diese und weitere Anpassungen  wurden in diese Version  integriert um die sich dann auch dieser Artikel dreht.

Wenn man nun XMPP-Benachrichtigungen von dem eigenen Icinga 2-System erhalten möchte, benötigt man vorher schon die Möglichkeit XMPP-Nachrichten zu versenden, also mindestens einen Account bei einem Anbieter entsprechender Infrastruktur, beispielsweise einer von conversations.im oder jabber.at. Alternativ kann auch eine eigene Infrastruktur erstellt werden. Zur Installation des Skriptes müssen zuerst die Abhängigkeiten erfüllt werden, was in den meisten Fällen durch die Installation von Python3 mit Standardbibliotheken und der Bibliothek slixmpp abgeschlossen sein sollte. Dann muss das Skript selbst an einen passenden Ort kopiert werden und die Konfiguration aus dem Ordner icinga2_config in die eigene Konfiguration integriert werden. Besonders ist hier natürlich das Eintragen des Pfads zum Skript, dem|den eigenen XMPP-Account(s) (sowohl des Senders als auch des Empfängers) und des Passworts. Alternativ kann die Konfiguration auch mit dem Director erstellt werden.

Das ganze sieht dann beispielsweise in Conversations so aus:

Das Ganze ist noch recht minimalistisch und hilfreiche Ideen|Vorschläge|Kritik sind herzlich willkommen. Dann bleibt an dieser Stelle nicht viel mehr übrig als zu hoffen, dass dies hier jemandem nützt, was übrigens auch gerne mal kurz als Feedback gegeben werden kann 🙂

Lorenz Kästle
Lorenz Kästle
Consultant

Lorenz hat seinen Bachelor der Informatik an der FAU gemacht und sich zuletzt mit Betriebssystemen dort beschäftigt. In seiner Freizeit beschäftigt er sich ein wenig mit XMPP und der Programmiersprache Erlang.