Zentrale Verwaltung von Systembenachrichtigungen mit MQTTwarn

Für einige Dienste verwende ich verschiedene Benachrichtigungsverfahren. Nagios benachrichtigt mich wenn Festplatten überlaufen oder Backups nicht durchgeführt worden sind. Einige Kommandozeilen Programme überwachen meine Openvpn Verbindungen oder meine DynDNS Konfigurationen.

Jede Menge verschiedene Stellen an denen Benachrichtigungen konfiguriert sind. Wechsele ich von Pushover zu xyz kann ich an all diesen Stellen die Konfigurationen suchen und ändern.

Jan-Piet Mens hat an dieser Stelle einen Ansatz beschrieben, wie über einen zentralen Messaging Bus eine “Schaltzentrale” aufgebaut werden kann. Bisher habe ich mich daran nicht so richtig getraut aber dieses Wochenende kam ich mal dazu. Die Basisinstallation geht eigentlich recht einfach.

Zuerst die Installation von MQTT (auf einem Raspberry Pi)

curl -O http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key
sudo apt-key add mosquitto-repo.gpg.key
rm mosquitto-repo.gpg.key
cd /etc/apt/sources.list.d/
sudo curl -O http://repo.mosquitto.org/debian/mosquitto-repo.list
sudo apt-get update
sudo apt-get install mosquitto mosquitto-clients python-mosquitto

Da ich hier mit einem internen Raspberry Pi arbeite sind keine weiteren Einstellungen notwendig.

Dann die Voraussetzungen für mqttwarn installieren

apt-get install python-pip
pip install paho-mqtt

und dann das eigentliche mqttwarn Programm, die Beispielkonfiguration kopieren und osxnotify aus “launch” entfernen

cd /opt/caserio
git clone https://github.com/jpmens/mqttwarn mqttwarn
cd mqttwarn
cp mqttwarn.ini.sample mqttwarn.ini
vi mqttwarn.ini
launch	 = file, log ~~,osxnotify~~

In der sample.ini ist ein Beispiel enthalten das ich für den ersten Test verwendet habe.

[hello/1]
targets = log:info
format = u'{name}: {number} => {_dthhmm}'

Von der Kommandozeile kann man nun an das Ziel “Hello” die Nachricht “Hello” senden

mosquitto_pub -t hello/1 -m "Hello"

und diese Nachricht wird in das Logfile geschrieben.

tail mqttwarn.log 
DEBUG [mqttwarn] Connected to MQTT broker, subscribing to topics...
DEBUG [mqttwarn] Subscribing to hello/1 (qos=0)
DEBUG [mqttwarn] Subscribing to owntracks/+/+ (qos=0)
DEBUG [mqttwarn] Message received on hello/1: Hello
DEBUG [mqttwarn] Section [hello/1] matches message on hello/1. Processing...
DEBUG [mqttwarn] Message on hello/1 going to log:info
DEBUG [mqttwarn] New `log:info' job: hello/1
DEBUG [mqttwarn] Processor is handling: `log' for info
DEBUG [log] *** MODULE=services/log.pyc: service=log, target=info
INFO  [log] Hello

Ich weiß wirklich noch nicht so richtig wie hier was geht aber es sieht schon mal gut aus. Irgendetwas passiert. Ändere ich jetzt in der Beispieldatei die Bedeutung von info auf error

vi mqttwarn.ini

[hello/1]
targets = log:error
format = u'{name}: {number} => {_dthhmm}'

Dann wird nach einem Neustart von mqttwarn durch den Aufruf von

mosquitto_pub -t hello/1 -m "Hello"

dies auch in das Logfile geschrieben

DEBUG [mqttwarn] Section [hello/1] matches message on hello/1. Processing...
DEBUG [mqttwarn] Message on hello/1 going to log:error
DEBUG [mqttwarn] New `log:error' job: hello/1
DEBUG [mqttwarn] Processor is handling: `log' for error
DEBUG [log] *** MODULE=services/log.pyc: service=log, target=error
ERROR [log] Hello

Es klappt also schon mal was und die Installation scheint zu laufen. Das ganze ist alles noch recht langweilig und diente erst mal nur zum Test ob die Installation im Prinzip läuft.

Jetzt wollen wir unsere Nachricht aber nicht nur in einem Logfile sehen sondern über Pushover auf das Handy bekommen. In unsere Konfiguration sind dazu folgende Änderungen notwendig

launch   = file, log, pushover

[config:pushover]
targets = {
    'beispiel'      : [ 'userkey','appkey],
    	}

[hello/1]
targets = log:error,pushover:beispiel
format = u'{name}: {number} => {_dthhmm}'

Und dann bekommt man jetzt neben dem Eintrag im Logfile auch die Nachricht per Pushover zugestellt

DEBUG [mqttwarn] Message received on hello/1: Hallo hagen
DEBUG [mqttwarn] Section [hello/1] matches message on hello/1. Processing...
DEBUG [mqttwarn] Message on hello/1 going to log:error
DEBUG [mqttwarn] New `log:error' job: hello/1
DEBUG [mqttwarn] Processor is handling: `log' for error
DEBUG [mqttwarn] Message on hello/1 going to pushover:beispiel
DEBUG [mqttwarn] New `pushover:beispiel' job: hello/1
DEBUG [log] *** MODULE=services/log.pyc: service=log, target=error
ERROR [log] Hallo hagen
DEBUG [mqttwarn] Processor is handling: `pushover' for beispiel
DEBUG [pushover] *** MODULE=services/pushover.pyc: service=pushover, target=beispiel
DEBUG [pushover] Sending pushover notification to beispiel [{'priority': 0, 'retry': 60, 'expire': 3600, 'title': 'mqttwarn'}]...
DEBUG [pushover] Successfully sent pushover notification

So das sieht schon mal ganz nett aus. Mal sehen was man damit noch alles anstellen kann.

pushover mqttwarn