Меню Закрыть

Уведомления 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 чата, т.е. идентификация конкретного пользователя. Однко, если у вас не много пользователей, то думаю это не очень большая проблема.

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

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *