Как то я подумал о том, что было бы неплохо отправлять уведомления не на почту, а в Telegram
Хотелось получить что то интереснее, чем спам-рассылка по поводу и без повода. Telegram крут ещё и своими групповыми чатами (в том числе и приватными)
Установка каких либо дополнительных программ и библиотек меня вообще не впечатлила. Да и зачем всё это если можно использовать Telegram-бота и отправлять сообщения простым запросом
Первый шаг
Необходимо создать бота в Telegram. Для этого нужно добавить в список контактов бота @BotFather, сказать ему /start и /newbot
BotFather сперва спросит как назвать нового бота, а потом какое имя ему присвоить. В ответном сообщении вы получите всю необходимую информацию для его использования
Вы можете создать своего бота, а можете использовать моего
Познакомьтесь,
его зовут @TradeNarK_ZabbixBot
его токен 256070243:SHAAHonjepm7mzR6doFLgSNAbKg3BNJzQQm
Этого бота необходимо добавить либо к себе в список контактов либо в тот чат, куда вы планируете получать уведомления.
Эта информация нам пригодится немного позже.
Второй шаг
Для того что бы отправить сообщение себе или в чат необходимо знать ID чата или контакта
Сразу замечу, что по ID можно определить пользователь это или чат — ID чата начинается со знака «-» (минус)
Для того что бы определить ID есть специальный бот @MyTelegramID_bot. Его нужно добавить с себе в список контактов или же в чат и дать команду /start. В ответ он предоставит ID
Мой список контактов
Чат для уведомлений
Как и говорилось выше ID группы начинается со знака минус
Третий шаг
Для отправки сообщения достаточно выполнить зарос
# curl --header 'Content-Type: application/json' --request 'POST' --data '{"chat_id":"_ID_","text":"_MESSAGE_"}' "https://api.telegram.org/bot_TOKEN_/sendMessage"
где
_ID_ — ID чата или контакта полученный на втором шаге;
_MESSAGE_ — текст сообщения;
_TOKEN_ — токен бота полученный на первом шаге;
Запрос приобретает вид:
# curl --header 'Content-Type: application/json' --request 'POST' --data '{"chat_id":"1111111","text":"test message for blog https://tradenark.com.ua here"}' "https://api.telegram.org/bot256070243:SHAAHonjepm7mzR6doFLgSNAbKg3BNJzQQm/sendMessage"
и бот присылает сообщение
Убедившись что вся эта кухня работает нужно написать скрипт который поможет нам в отправке.
Смотрим дефолтное расположение скриптов для отправки
# grep -i AlertScriptsPath /etc/zabbix/zabbix_server.conf | grep -v ^# AlertScriptsPath=/usr/lib/zabbix/alertscripts
Теперь создаём скрипт в этой папке с таким содержимым:
# cat /usr/lib/zabbix/alertscripts/telegram_bot.sh #!/bin/bash TOKEN='256070243:SHAAHonjepm7mzR6doFLgSNAbKg3BNJzQQm' if [ $# -ne 3 ] ; then echo 'Error! You must to define three params' && exit 1 ; fi CHAT_ID="$1" SUBJECT="$2" MESSAGE="$3" # Определяем emoji для темы сообщения if [[ $SUBJECT == 'PROBLEM' ]] then ICON="\uD83D\uDE31" elif [[ $SUBJECT == 'OK' ]] then ICON="\uD83D\uDC4C" else ICON="\u26A0" fi curl -s --header 'Content-Type: application/json' --request 'POST' --data "{\"chat_id\":\"${CHAT_ID}\",\"text\":\"$ICON ${SUBJECT}\n${MESSAGE}\"}" "https://api.telegram.org/bot${TOKEN}/sendMessage" | grep -q '"ok":false,'
Тут я добавил немного «развлекухи». В зависимости от темы бот будет добавлять смайлик. Как оказалось это одна из самых сложных задач. По той причине что вместо смайликов отображался текст / чистый код
Решение всё же нашлось. Для этого необходимо выбрать смайлик и определить его Unicode-формат. К примеру для обычного улыбающегося смайлика 🙂 это будет U+1F601.
Теперь на сайте fileformat.info нужно найти его перекодированное значение.
Для этого переходим по ссылке http://www.fileformat.info/info/unicode/char/1F601/index.htm и находим строку «C/C++/Java source code». В случае улыбающегося смайлика это будет «\uD83D\uDE01»
Сохраняем и делаем его исполняемым:
# chmod +x /usr/lib/zabbix/alertscripts/telegram_bot.sh
Четвёртый шаг
Необходимо научить заббикс пользоваться нашим скриптом.
Для этого нужно создать новый способ оповещения с несколькими параметрами:
Называем его как нам угодно. В поле «Имя», что бы не путаться, я использую Telegram Bot
Тип указываем «Скрипт»
В поле «Имя скрипта» вписываем только telegram_bot.sh так как скрипт находится в специально созданной для этого папке
Так же добавляем три дополнительных параметра как на скриншоте:
{ALERT.SENDTO} — кому отправлять;
{ALERT.SUBJECT} — тема сообщения;
{ALERT.MESSAGE} — текст самого сообщения;
После этого нажимаем «Добавить».
Пятый шаг
Идем в «Администрирование» — «Пользователи». Выбираем нашего пользователя — вкладка «Оповещения» — «Добавить».
В поле «Тип» выбирает тот тип, который мы создали (у меня Telrgram Bot).
В поле «Отправлять на» указываем свой ID или ID чата со второго шага.
Остальные параметры на своё усмотрение.
Шестой шаг
Идем «Настройка» — «Действие».
В графе «Источник событий» выбираем «Триггеры» и нажимаем создать.
Во вкладке «Действие» настраиваем шаблон уведомлений.
Я использую довольно сокращенный вариант по сравнению с предлагаемым по умолчанию:
Поле «Тема» — {TRIGGER.STATUS}
Поле «Сообщение по умолчанию» — {HOST.HOST} | {HOST.IP} | {TRIGGER.NAME} -> {ITEM.VALUE}
Во вкладке «Операции» жмём «Новый».
В открывшемся окне нас интересуют три главных пункта:
Тип операции — отправить сообщение;
Отправлять пользователям — выбираем своего пользователя;
Отправлять только через — выбираем метод, созданный на четвертом шаге;
В итоге получаются довольно информативные и короткие уведомления:
Так же у меня настроены уведомления о авторегистрации: