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 чата, т.е. идентификация конкретного пользователя. Однко, если у вас не много пользователей, то думаю это не очень большая проблема.
На этом все, уведомления приходят. Пишите комментарии, вопросы, замечания. С удовольствием на все отвечу.
Вот еще с отправкой графиков и кучей настроек
https://github.com/xxsokolov/Zabbix-Notification-Telegram