Checkmk Alarmierungen an Telegram senden


03.02.2022 - Anleitung für Checkmk 2.0 aktualisiert.
15.01.2022 - Die alten Python Skripte laufen unter Checkmk 2.0 nicht mehr.
13.01.2019 - Anleitung und Skript für Check_MK 1.5

Damit Checkmk Alarmierungen (Notifications) an den Telegram Messenger schicken kann, benötigt man:

  • einen Bot
  • einen Benutzernamen für den Bot
  • einen API-Token
  • eine Chat-ID

Telegram – Bot erstellen

In Telegram sucht man nach @BotFather und starten mit ihm einen Chat. Mit /newbot wird ein neuer Bot erstellt.
Weiter im Chat Dialog wird der neue Botname und Benutzername abgefragt und angelegt.

Telegram – API-Token und Chat-ID ermitteln

Den API-Token hat man beim anlegen des neuen Bots schon erhalten. Jetzt braucht man noch die Chat-ID.
In Telegram nach dem Benutzernamen des neuen Bots suchen und einen Chat starten. Das ist wichtig! Ein kurzes hallo reicht schon aus.

Als nächstes ruft man folgende URL zusammen mit dem API-Token im Browser auf:

# https://api.telegram.org/bot[HTTP-TOKEN]/getUpdates
https://api.telegram.org/bot643xxxxxxxxxxxxxxxxxxxxxxxxxxxx4Ik/getUpdates

Die Zahlenfolge nach “id”: ist unsere Chat-ID.

Damit hat man für den Telegram Bot jetzt alles zusammen.

Telegram – Bot testen

Um zu testen, ob beim neuen Bot auch Nachrichten ankommen, im Browser eine entsprechende URL mit einer Nachricht an die Telegram API schicken.

# https://api.telegram.org/bot[HTTP-TOKEN]/sendMessage?chat_id=[CHAT-ID]&text=[NACHRICHT]
https://api.telegram.org/bot436xxxxxxxxxxxxxxxxxxxxxxxxxxxxx4Ik/sendMessage?chat_id=734273480&text=Alles%20OK

Die Nachricht kam sofort im Bot an.

Telegram – Bot Profilbild ändern

Man kann dem Bot auch ein Profilbild zuweisen. Dazu dem BotFather ein /setuserpic senden und dann den Botnamen angeben. Bild hochladen, fertig.

Checkmk – das Telegram Notify Skript

Dies beiden älteren Skripte von metzlog.srcbox.net und karl-deutsch.at laufen unter der aktuellen Checkmk Version nicht. (Python Problem)
Stefan Gehn hat sein altes Skript aktualisiert und ein Telegram Checkmk Plugin geschrieben. (Vielen Dank dafür!)

Als SITE User herunterladen und installieren.

OMD[test]:~$ wget https://exchange.checkmk.com/packages/telegram-notifications/761/telegram_notifications-2.0.0.mkp
OMD[test]:~$ mkp install telegram_notifications-2.0.0.mkp

OMD[test]:~$ mkp show telegram_notifications-2.0.0.mkp
Name: telegram_notifications
Version: 2.0.0
Packaged on Checkmk Version: 2.0.0p18
Required Checkmk Version: 2.0.0
Valid until Checkmk version: No version limitation
Title: Telegram Notifications
Author: Stefan Gehn <stefan+cmk@srcbox.net>
Download-URL: https://git.srcbox.net/stefan/checkmk_telegram_notifications
Files: notifications(1) web(1)
Description: Send notifications via Telegram

Die Dateien liegen unter:

OMD[test]:~/local/share/check_mk/notifications/telegram
OMD[test]:~/local/share/check_mk/web/plugins/wato/telegram.py

Checkmk – Notify mit Telegram anlegen

Setup → Events → Notifications, neue Rule erstellen. API Token und Chat ID eingeben, fertig.

Checkmk – Notify mit Telegram testen

Die Telegram Alarmierung sollte jetzt zuerst einmal getestet werden. In Checkmk auf einen Host und einen beliebigen Service auswählen.
Oben auf Commands → Fake check results und mal ein Warning senden. Kam sofort in Telegram an!

 

26 Gedanken zu „Checkmk Alarmierungen an Telegram senden“

  1. Hallo,

    ich habe es wie von dir beschrieben mit dem einfachen Skript umgesetzt. Ich kann jedoch versuchen was ich will, es funktioniert bei mir unter 1.5.0p15 nicht. Aus irgendeinem Grund kommen die Nachrichten nicht beim Bot an.

    Hast du ne Idee?

    Dank & Grüße
    Marcel

    Ich habe es mittlerweile hinbekommen. Es war sonderbar, da Nachrichten per HTTP-Requests im Browser z.B. wie erwartet ankamen, jedoch per Skript kam nichts an und keine Fehlermeldung irgendwo zu finden.

    So bin ich am Ende vorgegangen:
    1. als Siteuser angemeldet
    2. Skriptvorlage in das Verzeichnis
    “~/local/share/check_mk/notifications” als Siteuser heruntergeladen
    3. chmod 755 auf die Datei
    4. Skript wie folgt angepasst:

    Zeile 1
    #!/usr/bin/env python

    Zeile 24
    telegram_bot_token = ‘101010101:ChangeMeChangeMeChangeMe’

    Zeile 105
    # in Check_MK ein custom attribute mit der internen ID telegram erstellt.
    telegram_chatid = context.get(‘CONTACT_TELEGRAM’)

    Mit diesem Eintrag funktioniert es.

    Antworten
  2. Hallo zusammen,

    die Benachrichtigungen haben auf Anhieb geklappt, echt Super :)
    Jetzt habe ich nur tägliche Wartungsarbeiten konfiguriert (Server Neustart) und diese greifen bei den Telegram Benachrichtigungen nicht, bei den Email Benachrichtigungen klappt es. Gibt es hier eine Möglichkeit diese ebenfalls zu aktivieren?

    Gruß:

    Antworten
  3. Leider geht das Script seit dem 1.9. nicht mehr.
    tail -f ~/var/log/notify.log sagt:
    2019-09-16 22:09:52 Executing 1 notifications:
    2019-09-16 22:09:52 * notifying cmkadmin via telegram_notify, parameters: (no parameters), bulk: no
    2019-09-16 22:09:52 executing /omd/sites/mysite/local/share/check_mk/notifications/telegram_notify
    2019-09-16 22:10:52 Notification plugin did not finish within 60 seconds. Terminating.
    2019-09-16 22:10:52 Plugin exited with code 1

    Antworten
  4. Der Bot nimmt Nachrichten an. Sowohl mit CURL, als auch im Browser.
    Auch ein Neuaufsetzen von CheckMK im Docker hat nichts gebracht. Es ist zum Mäuse melken.

    Antworten
  5. Fehler gefunden. IPv6 war aktiv. Dort funktioniert das Routing aber nicht. Auf der Konsole kann man Nachrichten senden.
    Die werden alle per IPv4 übertragen. Python URL-Requests nutzt, wenn vorhanden IPv6.
    Das Script bleibt ohne Rückmeldung einfach hängen.
    Hilfe schaffte nur: echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf (Debian)

    Antworten
  6. Hallo zusammen,

    bei mir kam von heute auf morgen ein Problem mit dem Umlaut ü. Sobald in einer Notification etwas mit ü steht
    kommt keine Telegram-Nachricht an und unter fehlgeschlagene Benachrichtigungen steht folgendes:
    UnicodeEncodeError: ‘ascii’ codec can’t encode character u’\xf6′ in position 293: ordinal not in range(128)

    Traceback (most recent call last): -- File "/omd/sites/check/local/share/check_mk/notifications/telegram", line 112, in -- main() -- File "/omd/sites/check/local/share/check_mk/notifications/telegram", line 110, in main -- send_telegram_message(telegram_bot_token, telegram_chatid, text) -- File "/omd/sites/check/local/share/check_mk/notifications/telegram", line 96, in send_telegram_message -- data = urllib.urlencode({'chat_id':chat_id, 'text':text, 'parse_mode':'Markdown'}) -- File "/omd/sites/check/lib/python2.7/urllib.py", line 1342, in urlencode -- v = quote_plus(str(v)) -- UnicodeEncodeError: 'ascii' codec can't encode character u'\xfc' in position 288: ordinal not in range(128)

    Hat das Problem noch jemand bzw. kennt einen Lösungsansatz?

    Vielen Dank!
    Stefan

    Antworten
      • Habs gerade nochmal kontrolliert – in der Ausgabe steht UTF-8 mit dabei…hast du vielleicht noch einen Tipp für mich? Hab nochmal etwas nachverfolgt – nach dem Update auf 1.6 hat es noch funktioniert – kurze Zeit später war Feierabend…

        []# locale
        LANG=de_DE.UTF-8
        LC_CTYPE=”de_DE.UTF-8″
        LC_NUMERIC=”de_DE.UTF-8″
        LC_TIME=”de_DE.UTF-8″
        LC_COLLATE=”de_DE.UTF-8″
        LC_MONETARY=”de_DE.UTF-8″
        LC_MESSAGES=”de_DE.UTF-8″
        LC_PAPER=”de_DE.UTF-8″
        LC_NAME=”de_DE.UTF-8″
        LC_ADDRESS=”de_DE.UTF-8″
        LC_TELEPHONE=”de_DE.UTF-8″
        LC_MEASUREMENT=”de_DE.UTF-8″
        LC_IDENTIFICATION=”de_DE.UTF-8″
        LC_ALL=
        []# localectl status
        System Locale: LANG=de_DE.UTF-8
        VC Keymap: de-nodeadkeys
        X11 Layout: de
        X11 Variant: nodeadkeys

        Antworten
  7. Hallo zusammen,

    habe das gleiche Problem wie Stefan. Bei mir tritt das Problem in Verbindung mit Meldungen von Temperatur-Sensoren auf.
    Leider noch keine Lösung gefunden….

    Antworten
      • Ja, hatte ich versucht. Hat leider nicht geholfen.
        Reicht es diesen Befehl in der Konsole als der entsprechende OMD User auszuführen?

        Antworten
          • Hallo, hab das gleiche Problem.. Habt ihr das gelöst bekommen?
            Habe “export PYTHONIOENCODING=UTF-8” als Site-User und als root probiert.. ohne Erfolg..

            Fehler ist bei mir
            “UnicodeEncodeError: ‘ascii’ codec can’t encode character u’\xdf’ in position 86: ordinal not in range(128)”

          • Folgendes mit in den telegram notification code:

            reload(sys)
            sys.setdefaultencoding('utf8')

  8. Mal eine dezente Frage, ich hab alles soweit eingerichtet, die Benachrichtigungen werden auch gesendet allerdings immer 3 mal woran kann das liegen.

    Antworten
    • Eigentlich /usr/bin/python auf /usr/bin/env python

      Ist aber vielleicht garnicht mehr notwendig, wenn beide Befehle keine unterschiedlichen Python Versionen ausgeben.

      $ /usr/bin/python --version
      Python 2.7.16

      $ /usr/bin/env python --version
      Python 2.7.16

      Antworten
  9. Hallo, hat einer einen Ansatz wo ich suchen könnte – ich habe scheinbar ein SSL Problem : SSL: CERTIFICATE_VERIFY_FAILED

    requests.exceptions.SSLError: HTTPSConnectionPool(host=’api.telegram.org’, port=443): Max retries exceeded with url: /bot5125953981:AAEh7FWJpNS9aiFUpMcdN3GWSr7LSk_GMmU/sendMessage (Caused by SSLError(SSLCertVerificationError(1, ‘[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1129)’)))

    Ich habe keine Proxy oder sowas dazwischen.

    Antworten
  10. Hallo,

    ja – so wie oben in dieser Doku beschrieben. Basis ist Debian und CheckMK 2.1.0b1. Als wenn er das Zert, was er von Telekom bekommt, nicht als Valid ansieht.

    Antworten
    • Hab das eben mit Checkmk 2.1.0b2 und dem Telegram Checkmk Plugin ausprobiert, funktioniert.
      Kann deinen Fehler leider nicht nachvollziehen.

      Antworten

Schreibe einen Kommentar