Checkmk telegram: Unterschied zwischen den Versionen

Aus xinux.net
Zur Navigation springen Zur Suche springen
 
(2 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
 
=Telegram Notifications Plugin=
 
=Telegram Notifications Plugin=
*cat /omd/sites/<site-name>/local/share/check_mk/notifications/telegram
+
*https://github.com/filipnet/checkmk-telegram-notify
<pre>
 
#!/usr/bin/python
 
# Telegram
 
 
 
# Copyright Mathias Kettner  2013  mk@mathias-kettner.de
 
#          Stefan Gehn      2016  stefan+cmk@srcxbox.net
 
 
 
# check_mk is free software;  you can redistribute it and/or modify it
 
# under the  terms of the  GNU General Public License  as published by
 
# the Free Software Foundation in version 2.  check_mk is  distributed
 
# in the hope that it will be useful, but WITHOUT ANY WARRANTY;  with-
 
# out even the implied warranty of  MERCHANTABILITY  or  FITNESS FOR A
 
# PARTICULAR PURPOSE. See the  GNU General Public License for more de-
 
# ails.  You should have  received  a copy of the  GNU  General Public
 
# License along with GNU Make; see the file  COPYING.  If  not,  write
 
# to the Free Software Foundation, Inc., 51 Franklin St,  Fifth Floor,
 
# Boston, MA 02110-1301 USA.
 
 
 
# Telegram notification based on asciimail notification from
 
# check_mk 1.2.6p16.
 
 
 
import os, re, sys, urllib, urllib2
 
 
 
### CHANGE THESE ###
 
telegram_bot_token = '<bot-api-token>'
 
####################
 
telegram_chatid = str(os.getenv('NOTIFY_CONTACTPAGER'))
 
 
 
tmpl_host_text = """*Check_MK: $HOSTNAME$ - $EVENT_TXT$*
 
```
 
Host:    $HOSTNAME$
 
Alias:    $HOSTALIAS$
 
Address:  $HOSTADDRESS$
 
Event:    $EVENT_TXT$
 
Output:  $HOSTOUTPUT$
 
 
 
$LONGHOSTOUTPUT$```"""
 
 
 
tmpl_service_text = """*Check_MK: $HOSTNAME$/$SERVICEDESC$ $EVENT_TXT$*
 
```
 
Host:    $HOSTNAME$
 
Alias:    $HOSTALIAS$
 
Address:  $HOSTADDRESS$
 
Service:  $SERVICEDESC$
 
Event:    $EVENT_TXT$
 
Output:  $SERVICEOUTPUT$
 
 
 
$LONGSERVICEOUTPUT$```"""
 
 
 
def substitute_context(template, context):
 
    # First replace all known variables
 
    for varname, value in context.items():
 
        template = template.replace('$'+varname+'$', value)
 
 
 
    # Remove the rest of the variables and make them empty
 
    template = re.sub("\$[A-Z_][A-Z_0-9]*\$", "", template)
 
    return template
 
 
 
def construct_message_text(context):
 
    notification_type = context["NOTIFICATIONTYPE"]
 
    if notification_type in [ "PROBLEM", "RECOVERY" ]:
 
        txt_info = "$PREVIOUS@HARDSHORTSTATE$ -> $@SHORTSTATE$"
 
    elif notification_type.startswith("FLAP"):
 
        if "START" in notification_type:
 
            txt_info = "Started Flapping"
 
        else:
 
            txt_info = "Stopped Flapping ($@SHORTSTATE$)"
 
    elif notification_type.startswith("DOWNTIME"):
 
        what = notification_type[8:].title()
 
        txt_info = "Downtime " + what + " ($@SHORTSTATE$)"
 
    elif notification_type == "ACKNOWLEDGEMENT":
 
        txt_info = "Acknowledged ($@SHORTSTATE$)"
 
    elif notification_type == "CUSTOM":
 
        txt_info = "Custom Notification ($@SHORTSTATE$)"
 
    else:
 
        txt_info = notification_type # Should neven happen
 
 
 
    txt_info = substitute_context(txt_info.replace("@", context["WHAT"]), context)
 
 
 
    context["EVENT_TXT"] = txt_info
 
 
 
    if context['WHAT'] == 'HOST':
 
        tmpl_text = tmpl_host_text
 
    else:
 
        tmpl_text = tmpl_service_text
 
 
 
    return substitute_context(tmpl_text, context)
 
 
 
def fetch_notification_context():
 
    context = {}
 
    for (var, value) in os.environ.items():
 
        if var.startswith("NOTIFY_"):
 
            context[var[7:]] = value.decode("utf-8")
 
    return context
 
 
 
def send_telegram_message(token, chat_id, text):
 
    url = 'https://api.telegram.org/bot%s/sendMessage' % (token)
 
    data = urllib.urlencode({'chat_id':chat_id, 'text':text, 'parse_mode':'Markdown'})
 
    #print("sending telegram message, url '%s', chat id '%s', text '%s'" % (url, chat_id, text))
 
    try:
 
        urllib2.urlopen(url, data).read()
 
    except urllib2.URLError, e:
 
        sys.stdout.write('Cannot send Telegram message: HTTP-Error %s %s\n' % (e.code, e))
 
 
 
def main():
 
    context = fetch_notification_context()
 
    if not telegram_chatid: # e.g. empty field in user database
 
        sys.stdout.write("Cannot send Telegram message: Empty destination chat id")
 
        sys.exit(2)
 
    text = construct_message_text(context)
 
    send_telegram_message(telegram_bot_token, telegram_chatid, text)
 
 
 
main()
 
</pre>
 
  
 
=CheckMK User config=
 
=CheckMK User config=
Zeile 122: Zeile 8:
 
<pre>
 
<pre>
 
{"ok":true,"result":[{"update_id":549458535,
 
{"ok":true,"result":[{"update_id":549458535,
"message":{"message_id":1,"from":{"id":971939477,"is_bot":false,"first_name":"Max","language_code":"de"},"chat":{"id":'''971939477''',"first_name":"Max","type":"private"},"date":1590572783,"text":"/start","entities":[{"offset":0,"length":6,"type":"bot_command"}]}}]}
+
"message":{"message_id":1,"from":{"id":374629384,"is_bot":false,"first_name":"Max","language_code":"de"},"chat":{"id":'374629384,"first_name":"Max","type":"private"},"date":1590572783,"text":"/start","entities":[{"offset":0,"length":6,"type":"bot_command"}]}}]}
 
</pre>
 
</pre>
 +
 +
ChatID: 374629384
 +
 
==user conf==
 
==user conf==
 
*Users -> edit desired User
 
*Users -> edit desired User
 
*Add telegram chatid in the Pager address
 
*Add telegram chatid in the Pager address
 
[[Datei:cmk_user_telegram.png]]
 
[[Datei:cmk_user_telegram.png]]

Aktuelle Version vom 24. August 2021, 10:02 Uhr

Telegram Notifications Plugin

CheckMK User config

get telegram chat id

{"ok":true,"result":[{"update_id":549458535,
"message":{"message_id":1,"from":{"id":374629384,"is_bot":false,"first_name":"Max","language_code":"de"},"chat":{"id":'374629384,"first_name":"Max","type":"private"},"date":1590572783,"text":"/start","entities":[{"offset":0,"length":6,"type":"bot_command"}]}}]}

ChatID: 374629384

user conf

  • Users -> edit desired User
  • Add telegram chatid in the Pager address

Cmk user telegram.png