Меню Закрыть

Уведомления Zabbix в Телеграм

Zabbix- система мониторинга сетей. Позволяет следить за состоянием узлов сети. Одной из важных возможностей является отправка уведомлений. Из коробки он умеет отправлять уведомления на почту, jabber и слать смс. Для последнего ему нужен модем с сим-картой.

Пришла в голову идея отправки уведомлений в популярный мессенджер. Помимо описанных способов оповещений система еще умеет выполнять пользовательские скрипты, на этом и основана отправка уведомлений.

Первое что понадобится — это завести бота в телеграм, который и будет отправлять нам уведомления. Делается это через @BotFather — официальный бот телеграма для управления пользовательскими ботами. Подробную инструкцию приводить не буду. Заводим бота @MyZabbixNotifier_bot.

Теперь заводим способ оповещения в разделе Администрирование -> Способы оповещений. Указываем следующие настройки:
— Имя — понятное нам имя
— Тип — Скрипт
-Имя скрипта — Имя выполняемого скрипта, лежат в папке/usr/local/share/zabbix/alertscripts
— Параметры скрипта — Здесь указывается что будет передаваться скрипту для отправки.

Настроенный способ оповещения.

Теперь перейдем к скрипту. Я остановился на обычном shell скрипте. Дополнительно нам понядобятся две утилиты: cURL и torsocks. Первая для отправки запроса на api.telegram.org, вторая входит в состав пакета tor и нужна для корректной работы на территории РФ. Отправка сообщения ботом осуществляется путем отправки POST запроса на https://api.telegram.org/bot%TOKEN%/sendMessage с параметрами chat_id и text, где
%TOKEN% — токен, который вам выдает @BotFather при создании бота
chat_id — id чата с конкретным человеком, откуда его взять рассмотрим чуть ниже
text — собственно отправляемое сообщение
Ниже листниг скрипта:

#!/bin/sh
 
CHAT_ID=$1
SUBJ=$2
EXT=$3
MESSAGE="$2 - $3"
URL="https://api.telegram.org/bot1234567890:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/sendMessage"
 
torsocks curl -s -X POST $URL -d chat_id=$CHAT_ID -d text="$MESSAGE"

Скрипт простейший, во внутренние переменные записываем параметры $1, $2, $3 указанные в способе оповещения и url, на который будем слать запрос. В конце скрипта собственно выполняем запрос с параметрами.

Далее необходимо настроить оповещения для конкретного пользователя. В Zabbix заходим в настройки собственного профиля, раздел Оповещения. Выбираем ссылку добавить:

Настройка оповещения в профиле

Выбираем созданный нами способ оповещения. В поле отправлять на указываем chat_id (как его получить описано ниже). После выбираем какие типы уведомлений будут приходить в телеграм. Жмем «Добавить» и «Обновить»

Как получить chat_id?

После добавления бота в свой список контактов, нам необходимо выполнить запрос
https://api.telegram.org/bot1234567890:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/getUpdates
Можно просто вставить строку в адресную строку браузера, я делал из командной строки через torsocks и curl, т.к. домен telegram.org на территории РФ заблокирован. В ответ получаем JSON строку вида:

{
  "ok":true,
  "result":[{
    "update_id":963980712,
    "message":{
      "message_id":3,
      "from":{
        "id":339829668,
        "is_bot":false,
        "first_name":"Mikhail",
        "last_name":"Kostikov",
        "username":"kosmuxa",
        "language_code":"ru"
      },
      "chat":{
        "id":339829668,
        "first_name":"Mikhail",
        "last_name":"Kostikov",
        "username":"kosmuxa",
        "type":"private"
      },
     "date":1557153837,
     "text":"/start"
   }
  }]
}

Из этих данных нас интересует result->chat->id, этой и есть искомый номер.

Теперь можно протестировать оповещения:

И реальное сообщение о падении узла

Сообщение о падении узла.

Самым неудобным моментом мне кажется получение id чата, т.е. идентификация конкретного пользователя. Однко, если у вас не много пользователей, то думаю это не очень большая проблема.

На этом все, уведомления приходят. Пишите комментарии, вопросы, замечания. С удовольствием на все отвечу.

1 Comment

Добавить комментарий

Ваш адрес email не будет опубликован.


Срок проверки reCAPTCHA истек. Перезагрузите страницу.