Icinga Notifications mit Briar
Posted on Mo 25 Jänner 2021 in Blog
Wie medial sehr breit berichtet wurde, gab es massive Probleme bei Signal. Deren Server waren mit den Nutzeransturm überfordert (Beispielsweise heise.de: Messenger Signal: Server ächzen unter neuer Last ). Prinzipiell ist das natürlich ein gutes Zeichen, wenn neue Nutzer zu Signal kommen. Allerdings sind es Serverprobleme nicht, wenn man auch Monitoring Benachrichtigungen per Signal bekommt. Hier kommt die große Schwachstelle von Signal zu tragen. Es läuft alles über zentrale Server. Daher habe ich mich auf die Suche nach Alternativen gemacht.
Inhalt:
Idee
Für das Monitoring unserer Infrastruktur kommt Icinga zum Einsatz. Die Benachrichtigungen bei Problemen laufen bisher per E-Mail und Signal ab. Um eine gewisse Ausfallssicherheit zu gewährleisten, wenn beispielsweise Signal nicht richtig funktioniert, war ich auf der Suche nach Alternativen. In Beispielen wird auch beispielsweise gerne auf XMPP verwiesen (siehe auch Back to the Future: Icinga2 notifications via XMPP).
Aber warum nicht einmal etwas Neues versuchen ;-) Daher habe ich mich für einen Peer-to-Peer Instant Messenger entschieden.
Briar
Briar ist ein freier Peer-to-Peer Messenger, dessen Nachrichten Ende-zu-Ende verschlüsselt sind. Im Artikel Briar: Anonymität und Sicherheit gehen vor bietet Mike Kuketz einen umfangreichen Überblick über Briar.
Umsetzung
Zudem bietet Briar eine headless Variante an, die auch eine wunderbare Übersicht über die Nutzungsmöglichkeiten gibt. Dieser Anleitung bin ich einfach gefolgt.
Der erste Prototyp der Umsetzung hat versucht auf den headless-Server via cURL zuzugreifen.
Allerdings habe ich es dabei nicht geschafft eine valide JSON-Nachricht mit cURL mitzusenden. Daher habe ich mich dann
für ein simples Python Script entschieden. Dieses Script erwartet sich mit dem Parameter -m
die Nachricht, die dann
an den ersten Kontakt im Adressbuch geschickt wird. Für einen produktiven Einsatz müsste das
Script natürlich noch angepasst werden, damit auch immer die entsprechenden Benutzer benachrichtigt werden. Aber für
einen ersten Testlauf war/ist es für mich ausreichend:
#!/usr/bin/python3
# coding: utf-8
import argparse
import json
import requests
def send(message):
icingainput = {"text": message}
message = json.dumps(icingainput)
r = requests.post("http://127.0.0.1:7000/v1/messages/1", data=message,
headers={'Authorization': 'Bearer token', 'Content-Type': 'application/json'})
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Send briar Notifications")
parser.add_argument('-m', dest='message', type=str, nargs=1, help="Message to be send")
args = parser.parse_args()
if args.message is not None:
send(args.message[0])
Zusammenfassung
Prinzipiell funktionieren die Notifications per Briar bisher sehr gut. Kommen Großteils sogar vor den Signal-Nachrichten auf dem Handy an. Ein spürbarer Nachteil der Briar App am Handy ist der erhöhte Energieverbrauch.
Das Ziel einer dezentraleren Notification-Möglichkeit bin ich jedenfalls ein Stück nähergekommen.