Checkmk Alarmierungen an Telegram senden


08.07.2023 - Anleitung für Checkmk 2.2 aktualisiert.
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.

Checkmk 2.2.0

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

OMD[test]:~$ mkp list
Name                   Version Title                  Author                              Req. Version Until Version Files State                        
---------------------- ------- ---------------------- ----------------------------------- ------------ ------------- ----- -----------------------------
telegram_notifications 2.0.0   Telegram Notifications Stefan Gehn <stefan+cmk@srcbox.net> 2.0.0        None          2     Enabled (active on this site)

Die Notifications müssen richtig konfiguriert sein.

Setup -> Users -> Users -> cmkadmin -> Contact Groups, Everything aktivieren
ODER
Setup -> Events -> Notifications -> Telegram plugin -> Contact selection -> The following users, cmkadmin

Checkmk 2.0.0

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!

Checkmk – Notify Log

Ein Blick ins ~/var/log/notify.log hilft eventuell Probleme zu finden.

OMD[blan]:~/var/log$ tail -f -n 20 notify.log
2023-01-04 13:29:33,258 [20] [cmk.base.notify] Global rule 'Telegram'...
2023-01-04 13:29:33,258 [20] [cmk.base.notify]  -> matches!
2023-01-04 13:29:33,258 [20] [cmk.base.notify]    - adding notification of cmkadmin via telegram
2023-01-04 13:29:33,259 [15] [cmk.base.notify] Global rule 'Notify via HTML Email'...
2023-01-04 13:29:33,259 [15] [cmk.base.notify]  -> does not match: This rule is disabled
2023-01-04 13:29:33,259 [20] [cmk.base.notify] Executing 1 notifications:
2023-01-04 13:29:33,260 [20] [cmk.base.notify]   * notifying cmkadmin via telegram, parameters: bot_token, chat_id, bulk: no
2023-01-04 13:29:33,260 [20] [cmk.base.notify]      executing /omd/sites/blan/local/share/check_mk/notifications/telegram
2023-01-04 13:29:33,688 [20] [cmk.base.notify]      Output: Sent message to Telegram chat 123456789
2023-01-04 13:30:04,919 [20] [cmk.base.notify] ----------------------------------------------------------------------
2023-01-04 13:30:04,919 [20] [cmk.base.notify] Got raw notification (acng;check_apt) context with 52 variables
2023-01-04 13:30:04,923 [20] [cmk.base.notify] Global rule 'Telegram'...
2023-01-04 13:30:04,923 [20] [cmk.base.notify]  -> matches!

31 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. 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
  5. 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
  6. 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
  7. 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
  8. 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
  9. 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
  10. Hi zusammen,

    ich bin aktuell recht ratlos.
    Habe das Plugin wie oben beschrieben installiert, außer das der mkp install depricated ist, und durch mkp enabled ersetzt wurde. (Checkmk Raw Edition 2.2.0p4).

    Grundsätzlich funktioniert via curl der Aufruf der Telegram API Problemlos und Nachrichten werden versendet.

    Sobald ich aber im Checkmk ein Event auslöse, bekomme ich leider keine Benachrichtung.

    Im notify.log steht nur das die Regel eigentlich greifen müsst:

    2023-07-04 15:31:44,599 [20] [cmk.base.notify] Got raw notification (checkmk;Postfix Queue) context with 52 variables
    2023-07-04 15:31:44,600 [20] [cmk.base.notify] Global rule ‘Telegram Benachrichtigung’…
    2023-07-04 15:31:44,600 [20] [cmk.base.notify] -> matches!

    Als Kontaktwahl sind alle Benutzer hinterlegt, und auch als Bedingung alle Hosts.

    Kann es sein das ich noch etwas weiteres konfigurieren muss ?

    Danke und Gruß

    Antworten
    • Habs gerade mal unter 2.2.0p5 probiert.

      # ~/var/log/notify.log
      ...
      2 rules matched, but no notification has been created.
      ...

      Die Notifications müssen noch konfiguriert werden.
      Setup -> Users -> Users -> cmkadmin -> Contact Groups, Everything aktivieren
      ODER
      Setup -> Events -> Notifications -> Telegram plugin -> Contact selection -> The following users, cmkadmin

      Antworten

Schreibe einen Kommentar