Logging per Telegram Bot

Angenommen man hat verschiedenste Skripte auf verschiedensten Maschinen am laufen und will irgendwo zentral überwachen, was die Skripte denn so tun. Und man will bei Fehlern oder besonderen Ereignissen benachrichtigt werden. Dafür gibt es bestimmt irgendwelche Softwareprodukte. Aber wir wollen heute mal schauen wie man sich das im Telegram Messenger einrichten kann.

  1. Zwei Telegram Bots per BotFather in Telegram erstellen. Einen für allgemeine Logs und einen für kritische Logs. Wähle passende Namen und Profilbilder für die Bots.
  2. Die Bots starten, damit ihnen erlaubt ist, uns Nachrichten zu senden
  3. Die Bots am besten in der Telegram Chatliste oben anheften und den Bot für allgemeine Logs stumm schalten.
  4. Ggf. automatische Löschung der Botnachrichten im Telegram Client einrichten.
  5. Logging Funktion in Skripte einbauen. Hier ein Python-Beispiel:
def send_telegram(msg, log=False):
    r = None
    try:
        token = ""
        if log:
            token = ""
        for start in range(0, len(msg), 4000):
            data = {'chat_id': 123456789, 'text': msg[start:start+4000]}
            r = requests.post("https://api.telegram.org/bot" + token + "/sendMessage", timeout=30, data=data)
            r.raise_for_status()
    except Exception as e:
        out = ""
        if r is not None:
            out = " (" + r.text + ")"
        print("Could not send telegram message \"" + msg + "\": " + str(e) + out)

Die Variablen token müssen noch mit den Bot-Tokens aus dem BotFather befüllt werden.
chat_id muss noch zur persönlichen Chat ID gesetzt werden, damit die Bots wissen wo sie die Nachrichten hinsenden sollen. Wo findet man die Chat ID? Tutorial

Nun kann zum Logging die Methode send_telegram(„Hello World“) aufgerufen werden. Bei allgemeinen Logs send_telegram(„Hello World“, True).

Die For-Schleife ist übrigens dafür da um sehr lange Lognachrichten in mehrere Telegramnachrichten aufzusplitten. Sonst beschwert sich die Telegram API.

So kann das dann im Desktop Client aussehen:

Nachteil: Die API hat natürlich Rate Limiting. Also sehr viele Nachrichten dauerhaft senden geht nicht. Ich kann jedoch bestätigen dass es möglich ist, für eine kurze Zeit viele Nachrichten zu senden. Die API erlaubt also „Bursts“ oder „Spikes“.