Я уже достаточно плотно работаю с сервисом организации мониторинга Zabbix Server 4.4 on Ubuntu 18.04 Server
, как дома, так и на работе. Мне – это интересно. Точнее мне интересно все что на Ubuntu
системе можно сделать не используя Windows
, руками и с большим количеством настроек. А где настройки – там шаги. Так вот для уведомления о том, что сработал такой – то триггер мне бы хотело получать их в Telegram
.
Необходимые приготовления:
В моей локальной сети развернуты сервисы:
- VM: srv-zabbix (172.33.33.117)
- VM: srv-fog – Сервис по автоматизированному развертыванию операционных система: Windows, Ubuntu, HirensCD и т.д.
- VM: srv-wiki (и на ней поднята связка 3proxy + TOR + Auth) которую я использую для работы Desktop Telegram клиента и всего того что не работает при обычном использовании из-за запретов нашего «Роскомнадзор». Я нахожусь в Московской области и попадаю в его юрисдикцию. Значит Socks мне нужен.) Socks5: 172.35.35.8:50001
Шаг №1: В локальной сети развернут сервис мониторинга Zabbix Server 4.4 on Ubuntu 18.04 Server amd64
Шаг №2: Регистрирую себе бота (процедура проста и бесплатна)
Token моего бота: 415624378:AAG4m_bSgEccPFf4W38-HSvHK_gcPnkfSz8
Шаг №3: За отправку уведомлений из Zabbix
будет отвечать скрипт (я использую из заметки «Работа с Telegram из Ubuntu Bionic Server»), его нужно в директории «/usr/lib/zabbix/alertscripts/
”
ekzorchik@srv-zabbix:~$ sudo apt-get install -y curl ekzorchik@srv-bionic:~$ sudo nano /usr/lib/zabbix/alertscripts/telegram.sh #!/bin/bash #./bot_notify2.sh 361950788 Тест 'Проверяю отправку оповещений ботом' TOKEN=415624378:AAG4m_bSgEccPFf4W38-HSvHK_gcPnkfSz8 CHAT_ID="$1" SUBJ="$2" MESSAGE="$3" SOCKSIP=172.35.35.8 SOCKSPORT=50001 URL="https://api.telegram.org/bot$TOKEN/sendMessage" curl -x socks5://$SOCKSIP:$SOCKSPORT -s --header 'Content-Type: application/json' --request 'POST' --data "{\"chat_id\":\"${CHAT_ID}\",\"text\":\"${SUBJ}\n${MESSAGE}\"}" "https://api.telegram.org/bot${TOKEN}/sendMessage" ekzorchik@srv-bionic:~$ sudo chmod +x /usr/lib/zabbix/alertscripts/telegram.sh
Шаг №4: Проверим отправку сообщений с помощью нашего скрипта. Для этого запустим его и передадим 3 параметра:
CHAT_ID
-> это идентификатор моего личного аккаунта наTelegram
ekzorchik@srv-bionic:~$ sudo /usr/lib/zabbix/alertscripts/telegram.sh 361950788 Тест 'Привет из Zabbix' {"ok":true,"result":{"message_id":325,"from":{"id":415624378,"is_bot":true,"first_name":"Ekzbot","username":"Ekzorchikbot"},"chat":{"id":361950788,"first_name":"\u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440","last_name":"\u041e\u043b\u043b\u043e","username":"aka_ekzorchik","type":"private"},"date":1552321414,"text":"\u0422\u0435\u0441\u0442\n\u041f\u0440\u0438\u0432\u0435\u0442 \u0438\u0437 Zabbix"}}
Шаг №5: Перехожу к настройка в серверной части Zabbix Server 4.4
http://IP&DNS/zabbix - user&pass - Администрирование – Способы оповещений – Создать способ оповещения
- Имя: именую просто и со вкусом, как
Telegram
- Тип: изменяю на
Script
- Имя скрипта: именование скрипта берем из «Шаг №3», у меня это
telegram.sh
- Параметры скрипта: — Нажимаю «
Добавить
» и создаю параметры которые я передавал скрипту при тестовом запуске, их будет три параметра:{ALERT.SENDTO},{ALERT.SUBJECT},{ALERT.MESSAGE}
- Описание: Оповещение через Telegram
- Активировано: Отмечаю галочкой
Где
{ALERT.SENDTO} — это chat_id
{ALERT.SUBJECT} — это тема
{ALERT.MESSAGE} — это сообщение
Так выглядят настройки:
В конце нажимаю «Добавить
». Мои способы оповещения. Т.к. Email & SMS
я пока не использую, то деактивировал их:
Шаг №6: Теперь нужно присвоить либо группе, либо конкретному пользователю способ оповещения. Т.к. я один использую Zabbix
то могу оставить пользователя Admin
или же создать/добавить.
Пусть будет текущий – Admin
http://IP&DNS/zabbix - user&pass - Администрирование – Пользователи
– нажимаю на Username=Admin
, перехожу на вкладку «Оповещения
» — «Добавить
»
Тип: Telegram
Отправлять на: 361950788
Когда активен: 1-7,00:00-24:00
Использовать, если важность: Высокая, Чрезвычайная
Активировано: отмечаю галочкой
Скриншот для наглядного представления, как выглядят настройки способа оповещения для учетной записи:
И нажимаю «Добавить
». Итого настроенный способ оповещения для учетной записи Admin
:
И нажимаю «Обновить
».
Шаг №7: После активирую дефолтную настройку отправки отчета о проблемах Zabbix
администраторам:
http://IP&DNS/zabbix - user&pass - Настройка – Действия
по умолчанию
“Report problems to Zabbix administrators
” в состоянии «Деактивировано
», щелкаю по статусу «Деактивировано
» и он изменяется на статус «Активировано
». Хотя, наверное, лучше сделать настройку действий по следующему алгоритму:
а) все по Email
б) а определенные по Telegram
http://IP&DNS/zabbix - user&pass - Настройка – Действия –
Источник событий: Триггеры
И нажимаю «Создать действие
». Но это будет после, сейчас моя задача оттестировать работу дефолтного созданного при установке Zabbix
. Так состояние изменил на «Активировано
», захожу в текущее действие “Report problems to Zabbix administrators
” – вкладка «Операции
» и нажимаю «Изменить
» дабы предопределить кому отправлять отчет о проблеме и куда
Отправлять группам пользователей: Zabbix administrators
Отправлять только через: изменяю «Все» на «Telegram»
.
После нажимаю «Обновить
» — «Обновить
»
Шаг №8: Проверяю на реальном примере если сработал триггер с предопределенным уровнем важности и что будет уведомление в Telegram
.
Задействую заметку «Показания с DHT 11 Zabbix-агента на Zabbix-сервер» где на показания «Элемента данных
» : Температура Датчика 1 создам триггер, если снимаемая температура более 25
градусов – это проблема
http://IP&DNS/zabbix - user&pass - Настройка – Узлы сети
– выбираю хост raspberry
и перехожу к колонке «Триггеры
», нажимаю на элемент «Триггеры
» — «Создать триггер
»
Имя: “Температура с Датчика 1 более 25”
На заметку: Вычитал из документации (https://www.zabbix.com/documentation/4.4/ru/manual/config/triggers/trigger)
Имя может содержать поддерживаемые макросы: {HOST.HOST}, {HOST.NAME}, {HOST.CONN}, {HOST.DNS}, {HOST.IP}, {ITEM.VALUE}, {ITEM.LASTVALUE} и {$MACRO}.
Важность: Высокая
Выражение:
{raspberry:rpi.dht11temp.last()}>=25
У меня интервал опроса для этого элемента данных составляет: 30s
Генерация ОК событий: Выражение восстановления
Выражение восстановления: {raspberry:rpi.dht11temp.last()}<25
Режим генерации событий ПРОБЛЕМА: Одиночная
ОК событие закрывает: Все проблемы
Разрешить закрывать вручную: Отмечая галочкой
Описание: к примеру «Датчик 1 – Коридор»
Активировано: Отмечаю галочкой
И нажимаю «Добавить
»
Так, дабы проверить, нагружаю Raspberry Pi 3 Model B + DHT 11
чтобы возросла температура – направляю на него Фен.
На главной странице «Мониторинг
» — «Панель
» — в «Проблемы
» идет регистрации срабатывания триггера
И мне к Telegram
боту приходит сообщение вида:
На скриншоте выше множественные сообщения, а все из-за того, что я поставил для триггера настройку:
Режим генерации событий ПРОБЛЕМА: Множественный
Лучше ставить «Одиночная
» или указывать с какой периодичностью слать уведомления, но это в настройках «Способы уведомлений
».
А чтобы также было сообщение что триггер пришел в норму:
http://IP&DNS/zabbix - user&pass - Настройка – Действия
– захожу в «Report problems to Zabbix administrators
» — вкладка «Операции восстановления
» — (Операции) Изменить – (Детали операции)
Тип операции: Отправить сообщение
Отправлять группам пользователей: Zabbix administrators
Отправлять только через: Telegram
Сообщение по умолчанию: Отмечено галочкой
И нажимаю «Обновить
» — «Обновить
».
Когда триггер придет в норму, в Telegram
также будет сообщение о восстановление работоспособности:
{TRIGGER.NAME} – имя триггера
{TRIGGER.STATUS} – статус триггера
{TRIGGER.KEY} – ключ проверки
{{HOSTNAME}:{TRIGGER.KEY}:{ITEM.VALUE}} – raspberry:rpi.cpuTemp:57
{TRIGGER.EXPRESSION} – Строка проверки значения (raspberry:rpi.cpuTemp.last()>=55)
Шаг №9: Кстати, в шаблон сообщение было бы неплохо изменить
Состояние датчика, т.е. какова температура в момент срабатывания триггера
Описание, что это за датчик
http://IP&DNS/zabbix - user&pass - Настройка – Действия
– захожу в «Report problems to Zabbix administrators
»
Вкладка «Операции
» — Сообщение по умолчанию
:
Зафиксирована проблема {EVENT.TIME} on {EVENT.DATE}
Имя проблемы: {EVENT.NAME}
Имя хоста: {HOST.NAME}
Уровень тревоги: {EVENT.SEVERITY}
Триггер на: {TRIGGER.EXPRESSION}
Текущие показания: {{HOSTNAME}:{TRIGGER.KEY}.last(0)}
Описание: {TRIGGER.DESCRIPTION}
Идентификатор проблемы: {EVENT.ID}
{TRIGGER.URL}
Вкладка «Операции восстановления
» —
Тема по умолчанию: Проблема устранена: {EVENT.NAME}
Сообщение по умолчанию:
Проблема была устранена {EVENT.RECOVERY.TIME} on {EVENT.RECOVERY.DATE}
Имя проблемы: {EVENT.NAME}
Имя хоста: {HOST.NAME}
Уровень тревоги: {EVENT.SEVERITY}
Триггер на: {TRIGGER.EXPRESSION}
Текущие показания: {{HOSTNAME}:{TRIGGER.KEY}.last(0)}
Идентификатор проблемы: {EVENT.ID}
{TRIGGER.URL}
Нажимаю «Обновить
»
Создал триггер на элемент данных rpi.cpuTemp
(из заметки )
Нагружаю систему Raspbian Stretch
вот такой вот командой и в следствии чего повышается температура процессора:
pi@raspberrypi:~ $ dd if=/dev/urandom | bzip2 -9 > /dev/null
по сочетанию клавиш Ctrl + C
прерываю.
Сообщение на Telegram: (Проблема и Восстановление)
Думаю, по мере различных проблем шаблон сообщений будет дорабатываться для информативности и принятия мер по устранению проблем.
На заметку: Можно для каждого типа уведомлений создать свой шаблон. Выше это у меня для важности «Высокая
» и «Чрезвычайная
».
Итого по заметке. Она работоспособная и для моего домашнего «Умного дома
» куда заведено все она подходит. И ее к рабочим моментам также можно приспособить. Универсальность, которую я прорабатываю описываю каждый шаг, ставя задачу и как я бы ее делал. На этом заметку пока считаю завершенной, с уважением автор блога Олло Александр aka ekzorchik.