обновлено 4.10.2021
Создать бота, описано тут
Скачиваем скрипты от сюда https://github.com/ableev/Zabbix-in-Telegram
Кладем скрипт zbxtg.py в каталог /usr/lib/zabbix/alertscripts, каталог может отличатся, можно проверить значение переменной AlertScriptsPath
в конфиге zabbix_server.conf
Создаем скрипт zbxtg_settings.py с содержимым из файла zbxtg_settings.example.py
1 |
cp zbxtg_settings.example.py zbxtg_settings.py |
Заменяем в нем на наши такие данные как:
(в переменной zbx_server url пишем без /zabbix — для 4.х версии проверено)
раскоментироват нужную версию Zabbix
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
tg_key = "<TOKEN>" ... zbx_tg_signature = False zbx_tg_tmp_dir = "/tmp/" ... zbx_server = "http://localhost/zabbix" # указываем URL к нашему zabbix серверу zbx_api_user = "" # имя пользователя от zabbix zbx_api_pass = "" # пароль от zabbix для user ... #zbx_server_version = 2 # for Zabbix 2.x version #zbx_server_version = 3 # for Zabbix 3.x version, by default, not everyone updated to 4.x yet zbx_server_version = 4 # for Zabbix 4.x version, default will be changed in the future with this ... emoji_map = { "OK": "✅", "Not classified": "❕", "Information": "ℹ", "Warning": "⚠", "Average": "❗", "High": "❌", "Disaster": "🔥" } |
1 |
chmod +x zbxtg_settings.py |
устанавливаем python requests, учитываем вашу текущую версию python -V
1 2 3 4 5 |
wget https://bootstrap.pypa.io/get-pip.py # use Python version | python3.6 or python # pythonX.X get-pip.py python3.6 get-pip.py pip install -r requirements.txt |
Идем в Администрирование — Способы оповещений, жмем кнопку «Создать способ оповещений». В поле «Имя» вводим название способа оповещения. В поле «Тип» нужно выбрать «Скрипт». В поле «Имя скрипта» нужно указать имя файла-скрипт, без пути; например, zbxtg.py В поле «Параметры скрипта» нужно нажать «Добавить» 3 раза и ввести в появившиеся поля {ALERT.SENDTO}, {ALERT.SUBJECT} и {ALERT.MESSAGE}. Пример:
Идем в Администрирование — Пользователи — выбираем своего пользователя — Оповещения — Добавить. В поле «Тип» выбираем только что созданный способ оповещения, например, Telegram Bot. В поле «Отправлять на» вводим свой Telegram ID. Остальные поля заполняем на свое усмотрение.
окно оповещения нового:
Идем в Настройка — Действия, в поле «Источник событий» выбираем «Триггеры» и жмем «Создать действие». На закладках «Действие» и «Условие» заполняем поля по своему усмотрению. Я в полях «Сообщение по умолчанию» и «Сообщение о восстановлении» указываю такое:
у меня уже создан «Telegram example», его содержимое:
в Zabbix 3.4 выглядит так
Тема:
1 |
{{{TRIGGER.SEVERITY}}} FAIL: {TRIGGER.NAME} on {HOSTNAME} |
Сообщение по-умолчанию:
1 2 3 4 5 6 |
Last value: {ITEM.LASTVALUE1} ({TIME}) zbxtg;graphs zbxtg;graphs_period=10800 zbxtg;itemid:{ITEM.ID1} zbxtg;title:{HOST.HOST} - {TRIGGER.NAME} zbxtg;single_message |
Тема восстановления:
1 |
{{OK}} OK: {TRIGGER.NAME} on {HOSTNAME} |
Сообщение о восстановление:
1 2 3 4 5 6 |
Last value: {ITEM.LASTVALUE1} ({TIME}) zbxtg;graphs zbxtg;graphs_period=10800 zbxtg;itemid:{ITEM.ID1} zbxtg;title:{HOST.HOST} - {TRIGGER.NAME} zbxtg;single_message |
На закладке «Операции» жмем «Новый». Выбираем пользователя. В поле «Отправить только через» выбираем созданный на шаге 4 способ оповещения, например, Telegram Bot. Жмем «Добавить» и еще раз «Добавить».
Результат успешной работы выглядит примерно так:
После обновления блока emoji_map и добавления {{{TRIGGER.SEVERITY}}} / {{OK}} в «Default subject» в Action, а также в «Default message» переменной zbxtg;single_message сообщения группируються и им добавляються emoji статусов проблемы:
Групповые уведомления
Для групповых уведомлений необходимо создать группу в телеграм в которую добавить бота, а также сделать следующую настройку в zabbix
Создать «Способ оповещения»:
а также добавить в пользователя данный способ оповешения:
в поле «Отправить на» обязательно указать Имя группы (не ID !!!):
Annotations
1 2 3 4 5 6 7 8 |
zbxtg;graphs -- enables attached graphs zbxtg;graphs_period=10800 -- set graphs period (default - 3600 seconds) zbxtg;graphs_width=700 -- set graphs width (default - 900px) zbxtg;graphs_height=300 -- set graphs height (default - 300px) zbxtg;itemid:{ITEM.ID1} -- define itemid (from trigger) for attach zbxtg;title:{HOST.HOST} - {TRIGGER.NAME} -- graph title zbxtg;debug -- enables debug mode, some logs and images will be saved in the tmp dir (temporary doesn't affect python version) zbxtg;channel -- enables sending to channels |
Проверить работу скрипта можно следующими запросами:
1 2 |
# sudo ./zbxtg.py "<username>" "<message_subject>" "<message_body>" --debug # sudo ./zbxtg.py "@mai1on" "Test" "Test2" --debug |
Проверить работу бота в чате, предварительно бота необходимо добавить в ваш чат:
1 |
# sudo ./zbxtg.py "Name of your telegram chat" "Test" "Test body" --debug --group |
Известные проблемы, если перестали отображаться графики в сообщениях, для начала необходимо проверить код ответа:
веный ответ:
1 2 |
curl -sI http://localhost/zabbix/chart3.php | head -1 HTTP/1.1 200 OK |
не верный ответ:
1 2 |
curl -sI http://localhost/zabbix/chart3.php | head -1 HTTP/1.1 401 Unauthorized |
Причиной был файл .htaccess в каталоге с zabbix’ом в котором закрыт доступ к zabbix через web авторизацию.
Еще одна возможная причина, по которой уведомления от telegram могут приходить без графиков — отсутствие верного логина пароля в файле конфигурации скрипта формируещего графики:
1 |
nano zbxtg_settings.py |
переменные:
1 2 |
zbx_api_user = "Admin" zbx_api_pass = "password" |
Это также будет причиной вот такого рода ошибок:
!!!! Внимание !!!!
Для 4-й версии не забываем в настройках раскоментить параметр:
1 |
zbx_server_version = 4 # for Zabbix 4.x version, default will be changed in the future with this |
Проверено на версии 5.0 — работает. Обновление zabbix сервера было выполнено с 4.4 на 5.0
При чистой установке zabbix 5.0 версии необходимо включить HTTP Аутентификация
Администрирование -> Аутентификация -> Настройки HTTP:
Поставить галку в чекбоксе: «Активация HTTP аутентификации»
Диалог входа в систему по-умолчанию: «Диалог входа в систему Zabbix»
Обновлено.
Добавлено как сделать группировку сообщений, а также как включить emoji в зависимости от статуса проблемы.
Привет, может подскажешь?
Traceback (most recent call last):
File «/usr/lib/zabbix/alertscripts/zbxtg.py», line 888, in
main()
File «/usr/lib/zabbix/alertscripts/zbxtg.py», line 847, in main
message_id = tg.result[«result»][«message_id»]
KeyError: ‘message_id’
это после добавления zbxtg;single_message в конец, и оповещения не идут совсем. что не так? (
Привет, убедись, что версия скрипта используется последняя, также загрузи его куда нибудь и скинь ссылку я посмотрю что за версия внутри. Также покажи какая версия python используется на сервере.
Проблема оказалась в наличие переменной —debug в «Media types», ее необходимо удалить.
https://goo.gl/tBqEQG
Добрый день, как включить прокси в этом скрипте? Надо как то блокировку же обходить)
Попробуй обновить скрипт до последней версии, говорят 3 дня назад включили поддержку, я не пробовал — мне не надо обходить блокировку.
Добрый день, подскажите какие данные мы прописываем в zbxtg_settings.py ? Только токен бота, адрес чата и прокси? При запуске скрипка получаю это, из самого же zabbix ничего не приходит.
appliance@zabbix:/usr/lib/zabbix/alertscripts$ python zbxtg.py
Hi. You should provide at least three arguments.
1. Read main page and/or wiki: https://github.com/ableev/Zabbix-in-Telegram + https://github.com/ableev/Zabbix-in-Telegram/wiki
2. Public Telegram group (discussion): https://t.me/ZbxTg
3. Public Telegram channel: https://t.me/Zabbix_in_Telegram
4. Try dev branch for test purposes (new features, etc): https://github.com/ableev/Zabbix-in-Telegram/tree/dev
appliance@zabbix:/usr/lib/zabbix/alertscripts$
внимательно читайте мануал:
— мы указываем tg_key (api key) бота телеграмовского.
— пишем адрес zabbix сервера в переменной zbx_server
— логин пользователя в zabbix, рекомендуеться создавать отдельного, переменная — zbx_api_user
— пароль для этого пользователя в zabbix — переменная zbx_api_pass
пример моего конфига:
https://pastebin.com/raw/5JDzX2ga