17 февраля 2018

Отправка уведомлений Zabbix в супер группу Telegram


zabbix-telegram-app

Кроме отправки уведомлений бот также будет закреплять новые(pinChatMessage) и откреплять неактуальные(unpinChatMessage) уведомления.








Прежде всего нужен Telegram бот. Ботов делает папа ботов-BotFather

Бота нужно добавить в супер группу и дать права на закреплении сообщений.

Затем на сервере мониторинга кладем скрипт отправки уведомлений в папку указанную в настройка zebbix сервера. Обычно это /usr/lib/zabbix/alertscripts
#!/bin/bash

SGRESPONSE="~/sgrespons.txt"
LASTEVENT="~/lastevent.txt"

KEY="AAAAAASSSSSSDDDDDDFFFFFGGGGGHHHHHJJJJJKKKKLLL" # Ключ телеграм-бота
TIME="20"
URL="https://api.telegram.org/bot$KEY"

event_type=$(echo $2 | cut -d':' -f1)
event_id=$(echo $2 | cut -d':' -f2)

respons=$(curl -s --max-time $TIME -d "chat_id=$1&disable_web_page_preview=1&text=$3" \
$URL/sendMessage > $SGRESPONSE)

status=$(cat $SGRESPONSE | grep -oP '(?<=ok":)[^,]+')

if [ $event_type == "problem" ] ; then

    if [ $status == "true" ] ; then
        message_id=$(cat $SGRESPONSE | grep -oP '(?<=message_id":)[^,]+')
        echo $event_id > $LASTEVENT
        curl -s --max-time $TIME -d "chat_id=$1&disable_notification=1&message_id=$message_id" \
        $URL/pinChatMessage

    fi

elif [ $event_type == "resolved" ] ; then

    old_event_id=$(cat $LASTEVENT)

    if [ $old_event_id == $event_id ] ; then
        curl -s --max-time $TIME -d "chat_id=$1" $URL/unpinChatMessage
    fi

fi

В заббиксе нужно добавить новый тип отправки уведомлений и новое действие.


Важно указать в теме(Subject) problem:{EVENT.ID} для новых и resolved:{EVENT.ID} для решенных оповещений. Из темы скрипт будет забирать ID события и тип оповещения заббика и принимать на их основе решение закреплять/откреплять сообщение в группе. Таким образом откреплено будет только утратившее актуальность оповещение.