Notifications von Icinga oder Nagios per WhatsApp verschicken

Ich habe in einem anderen Post bereits erklärt, wie man WhatsApp-Nachrichten per Kommandozeile verschicken kann. Wenn die Voraussetzungen erfüllt sind, sind der Fantasie quasi keine Grenzen mehr gesetzt. Was ich als erstes mit den neuen Möglichkeiten gemacht habe ist, sämtliche Host- und Service-Notification meines Icinga-Servers von SMS auf WhatsApp umzustellen.

Das Ganze lässt sich ziemlich leicht umsetzen, wenn man erst einmal die Einrichtung von Yowsup, dem Python-Skript zum Verschicken von Nachrichten, abgeschlossen hat.

Ich erkläre hier kurz, wie man sich also in Zukunft seine Host- und Service-Notifications per WhatsApp zuschicken lassen kann.
In diesem Beispiel gehe ich davon aus, das sämtliche Yowsup-Komponenten Nagios/Icinga Plugin-Verzeichnis liegen. In diesem Fall ist es das Verzeichnis „/usr/lib/nagios/plugins/“ und wurde in der Nagios/Icinga-Konfiguration auf die „$USER1“ Variable gesetzt.

Contact-Definition erweitern

Bereits bestehende Contact-Definitionen, über die bisher Notifications an Nutzer des Nagios/Icinga ausgelöst werden, müssen um ein weiteres Attribut erweitert werden: Die Handynummer. Anfangs habe ich in meinem Fall das bereits vorhanden Attribut „pager“ genutzt, um die Handynummer für WhatsApp dem Kontakt/Nutzer zuzuweisen. Sauberer ist es allerdings, wenn dazu eine benutzerdefinierte Variable benutzt wird. Diese so genannten „Custom-Variables“ zeichnen sich durch den am Anfang stehenden Unterstrich (_) aus und können in beliebiger Anzahl angelegt werden.

Eine Contact-Definiton (/etc/icinga/objects/contacts.cfg) könnte wie folgt aussehen:

define contact{
        contact_name                    timo
	use				generic-contact
        alias                           Timo Schlueter
        email                           me@timo.in
	_whatsapp			4915777818466
	}

Um diese Benutzerdefinierte Variable (_whatsapp) nun in anderen Objekt-Definitionen von Nagios/Icinga zu nutzen, muss fortan die Variable $_CONTACTSWHATSAPP$ verwendet werden.

Command-Definition anlegen

Nach der Anpassung der Contact-Definition muss eine neue Command-Definition angelegt werden, über die der Versand der Nachrichten ausgelöst wird. An sich unterscheidet sich diese Definition kaum von der bereits im Umfang von Nagios/Icinga enthaltenen E-Mail-Notification.

Eine Command-Definition (/etc/icinga/objects/commands.cfg) könnte wie folgt aussehen:

define command {
        command_name    notify-host-by-whatsapp
        command_line    /usr/bin/python $USER1$/yowsup/yowsup-cli -c $USER1$/yowsup/config -s $_CONTACTWHATSAPP$ '$NOTIFICATIONTYPE$ Host : $HOSTNAME$ is $HOSTSTATE$ @ $LONGDATETIME$'
}
 
define command {
        command_name    notify-service-by-whatsapp
        command_line    /usr/bin/python $USER1$/yowsup/yowsup-cli -c $USER1$/yowsup/config -s $_CONTACTWHATSAPP$ '$NOTIFICATIONTYPE$ Host : $HOSTNAME$ - Service : $SERVICEDESC$ is $SERVICESTATE$ @ $LONGDATETIME$'
}

Host- und Service-Commands können selbstverständlich auch zusammengefasst werden. Da in diesem Beispiel allerdings unterschiedliche Ausgaben erfolgen sollen, bietet sich die Trennung zwischen „notify-host-by-whatsapp“ und „notify-service-by-whatsapp“ an.

Command-Definition zuordnen

Sind Contact-Definition erweitert und die Command-Definition angelegt, muss anschließend noch die Command-Definition einem Contact zugeordnet werden. In meinem Fall nutze ich Templates für die Zuordnung von Optionen zu Kontakten. Die Zuordnung kann allerdings auch direkt am einzelnen Kontakt erfolgen. Zur Vereinfachung hier die Contact-Definition von oben, welche um die Command-Definiton erweitert wurde:

        contact_name                    timo
	use				generic-contact
        alias                           Timo Schlueter
        email                           me@timo.in
	_whatsapp			4915777818466
	service_notification_commands   notify-service-by-email notify-service-by-whatsapp
	host_notification_commands      notify-host-by-email notify-host-by-whatsapp

Durch diese Definition wird dem Benutzer „timo“ ab sofort im Falle einer Status-Änderung eines Hosts oder Services nicht nur eine Mail, sondern auch eine Nachricht per WhatsApp zugeschickt.

Noch einige Hinweise:

  • Es sollten immer zwei Wege des Versands von Notifications geben. Gerade WhatsApp hat in letzter Zeit häufiger mit Serverproblemen zu kämpfen, weshalb es sich anbietet, neben WhatsApp auch noch eine Mail oder SMS zu versenden.
  • Aus Sicht des Datenschutzes ist der Versand von Nachrichten über WhatsApp gesondert zu betrachten. WhatsApp wird im Ausland betrieben und hält sich daher mit hoher Wahrscheinlichkeit nicht an die Datenschutzrichtlinien Deutschlands. Ich würde daher nicht empfehlen, sensible Daten (Server-IPs, Hostnamen etc.) über WhatsApp zu verschicken. Ich verwende Nagios/Icinga hauptsächlich zur Überwachung von Web-Anwendungen und Websites und einigen Web-Servern. In diesem Fall versende ich also ohnehin nur öffentlich zugängliche Informationen. Dies sollte im Vorfeld auf jeden Fall abgewogen werden.

Fragen oder Feedback zu der Anleitung bitte jederzeit gerne als Kommentar, Tweet oder Mail hinterlassen.

WhatsApp-Nachrichten über Kommandozeile verschicken

Es gibt mittlerweile eine ziemlich einfache Möglichkeit, per Kommandozeile Nachrichten per WhatsApp zu verschicken. Möglich ist das Ganze über die ein kleines Python-Tool namens „Yowsup„. Mit diesem Tool ist es möglich, die WhatsApp-Registrierung durchzuführen und anschließend Nachrichten zu versenden und zu empfangen. Da ich dem Empfang noch nicht getestet habe, beschreibe ich hier erst einmal, wie der Versand von Nachrichten funktioniert.

Voraussetzungen

  • eine gültige Handynummer
  • Python
    • python-dateutil
    • argparse for python < 2.7
    • libxml2
  • Yowsup

Yowsup downloaden und entpacken

Zuerst einfach das git Repository von Yowsup auf den lokalen Rechner/Server klonen. Das erledigt man über folgenden Befehl:

git clone https://github.com/tgalal/yowsup

Anschließend in den Unterordner „src“ von „yoswum“ wechseln, da dort die Kommandozeilen-Tools (yowsup-cli) liegen, die nun benötigt werden:

cd yowsup/src/

Registrierung

Bevor man Nachrichten versenden kann, muss die eigene Handynummer bei WhatsApp registriert werden. Als erstes muss die Handynummer, die zum versenden von Nachrichten genutzt werden soll, in der Config-Datei angegeben werde. Ich habe dazu einfach, weil Nerds wie ich ja tendenziell eher faul sind, einfach die Beispiel-Datei (config.example) geöffnet und angepasst:

vi config.example
cc=49 #if not specified it will be autodetected
phone=491751234321
id=
password=

Wichtig sind hier im ersten Schritt nur die Parameter „cc“ und „phone“. Unter „cc“ muss die Landeskennung angegeben werden. Für Deutschland wäre dies die „49“. Unter „phone“ muss die Handynummer angegeben werden, die für WhatsApp registriert werden soll. Das Format lautet in meinem Fall: 491751234321.

Anschließend die Datei speichern und folgenden Befehl ausführen (wir befinden uns immer noch im Ordner yowsup/src/):

python yowsup-cli -c config.example -r sms

Die Antwort könnte wie folgt aussehen:

status: sent
retry_after: 25205
length: 6
method: sms

Auf dem angegeben Handy sollte nun eine SMS mit einem Freischaltcode für WhatsApp angekommen sein. Als Beispiel dient hier mal der Code „123-987“.
Abgeschlossen wird die Registrierung mit dem Befehl:

python yowsup-cli -c config.example -R 123-987

Das Ergebnis sollte wie folgt aussehen:

Detected cc: 49
status: ok
kind: free
pw: 74beaae5d1af0c04c57c37ff0045573603ff34dd=
price: 0,89 €
price_expiration: 1389688778
currency: EUR
cost: 0.89
expiration: 1418553624
login: 491751234321
type: existing

Wichtig ist nun das Attribut „pw“. Dort steht das Passwort, mit dem der Login auf den WhatsApp-Servern durchgeführt wird. Dieses Passwort muss nun in der Config-Datei angegeben werden. Also wieder die Datei öffnen und anpassen:

vi config.example
cc=49 #if not specified it will be autodetected
phone=491751234321
id=
password=74beaae5d1af0c04c57c37ff0045573603ff34dd=

Die Registrierung und Konfiguration ist abgeschlossen. Jetzt kommt der lustige Teil.

Nachricht versenden

Nachdem die Konfiguration abgeschlossen ist, kann nun eine Nachricht versendet werden. Hierzu gibt es zwei Möglichkeiten: Zum einen kann man eine Nachricht stumpf versenden, ohne auf Antworten zu warten („Fire-and-forget“) und zum anderen kann man den interaktiven Modus starten, über welchen man im klassischen Chat-Stil Nachrichten empfangen und versenden kann.

Der Befehl für ein einfaches verschicken lautet:

python yowsup-cli -c config.example -s 4915777818466 'Hallo Welt'

Das Ergebnis dürfte in etwa so aussehen:

Detected cc: 49
Authed 491751234321
Sent message

Es wurde somit eine Nachricht vom Absender 491751234321 (der registrierten Nummer) mit dem Inhalt „Hallo Welt“ an die Nummer 4915777818466 geschickt.

Wenn der interaktive „Chat-Modus“ gestartet werden soll, genügt der Befehl:

python yowsup-cli -c config.example -i 4915777818466

Jetzt wird ein Chat-ähnlicher Dialog gestartet, über den nicht nur Nachrichten abgeschickt, sondern auch empfangen werden können.

Diese Spielerei kann nun für alle möglichen Schweinereien genutzt werden. Der Fantasie sind keine Grenzen gesetzt. Ich selbst spiele gerade mit dem Gedanken, Nagios/Icinga Notifications aus meinem Monitoring-System über WhatsApp zu verschicken.

Fragen oder Feedback zu der Anleitung bitte jederzeit gerne als Kommentar, Tweet oder Mail hinterlassen.

Das Internet vergisst nicht!

Gefunden beim „selbst googlen“: Ein Artikel auf netzwelt.de (nicht die kleinste Website im deutschsprachigen Raum), der mich und mein damaliges Prestige-Projekt phoneseven.de, welches ich im August 2011 an das Biel-Netzwerk verkauft habe, zitiert.

Liest sich eigentlich ganz schön:

Der deutsche Windows Phone 7 Blog „Phoneseven“ kommt bei einer ähnlichen Auswertung ebenfalls zu der Erkenntnis, dass die Preise für die WP7-Handys extrem nachlassen. Einen Vergleich mit einem anderen Handy-OS zieht die Plattform aber nicht. Stattdessen erläutert Blogger Timo Schlüter die Vor- und Nachteile der Entwicklung.

Natürlich sind die Preise für die Käufer mehr als attraktiv, andererseits konkurrieren die Highend-Handys nun preislich mit Einsteiger- und Mittelklasse-Modellen anderer Plattformen, was für das Image der Geräte und WP7 allgemein nicht nur positiv sein dürfte. Zudem fürchtet Schlüter, dass der Grund für die massiven Preisnachlässe schlechte Verkaufszahlen seien. Die Preisentwicklung würde zudem die Mobilfunkanbieter treffen: Ein subventioniertes WP7-Handy mit Vertrag sei bei den derzeitigen Straßenpreisen nicht mehr attraktiv, lautet sein Fazit. Dennoch führen alle Netzbetreiber bis auf E-Plus derzeit noch WP7-Handys.

weiterlesen