В статье описывается создание телеграм-бота, который будет присылать оповещение о событиях заббикс-сервера в телеграм.
Для Zabbix версий до 5.х (хотя и в 5-й так тоже можно, но там можно проще)
Найти в поиске бота с ником @BotFather и добавить его к себе. Дать команду /newbot и создать нового бота.
YOU: /newbot BotFather: Alright, a new bot. How are we going to call it? Please choose a name for your bot. YOU: bot_name BotFather: Good. Now let's choose a username for your bot. It must end in `bot`. Like this, for example: TetrisBot or tetris_bot. YOU: bot_name_bot BotFather: Done! Congratulations on your new bot. You will find it at t.me/bot_name_bot. You can now add a description, about section and profile picture for your bot, see /help for a list of commands. By the way, when you've finished creating your cool bot, ping our Bot Support if you want a better username for it. Just make sure the bot is fully operational before you do this. Use this token to access the HTTP API: 993279574:AAGPAGf8V1Ct3P-qD04BzmvpOnv34t For a description of the Bot API, see this page: https://core.telegram.org/bots/api
Создаём группу и добавляем туда созданного бота. Выполняем запрос вида:
https://api.telegram.org/bot993279574:AAGPAGf8V1Ct3P-qD04BzmvpOnv34t/getUpdates
Он должен вернуть ответ, где среди всего содержимого есть
"chat":{"id":-234204777
Если такого содержимого нет, то надо удалить бота и добавить его в группу снова, и повторить выполнение запроса.
Создать скрипт в каталоге /usr/lib/zabbix/alertscripts (для Debian) и подставить свой токен.
#!/bin/bash TOKEN='993279574:AAGPAGf8V1Ct3P-qD04BzmvpOnv34t' if [ $# -ne 3 ] ; then echo 'Error! You must to define three params' && exit 1 ; fi CHAT_ID="$1" SUBJECT="$2" MESSAGE="$3" curl -s --header 'Content-Type: application/json' --request 'POST' --data "{\"chat_id\":\"${CHAT_ID}\",\"text\":\"${SUBJECT}\n${MESSAGE}\"}" "https://api.telegram.org/bot${TOKEN}/sendMessage" | grep -q '"ok":false,' if [ $? -eq 0 ] ; then exit 1 ; fi
Создаём новый способ оповещения типа «Script».
Перейти в Настройки — Действия. Если есть стандартная настройка отправки сообщений всем через все возможные варианты оповещения (All Media), то можно ничего не менять.
Переходим в Профиль пользователя > Оповещения и добавляем/редактируем новую запись
Теперь все оповещения приходят в группу.
Для пятой версии Zabbix и выше действия по настройке почти такие же как выше. Бот и чат (если необходим чат) создаются так же. А вот уже способ оповещения будет создан немного по другому.
Итак, если бот уже создан и есть id чата, то идём в заббикс и оформляем тип оповещения Webhook.
Код скрипта вставляется через веб-интерефейс:
var Telegram = { token: null, to: null, message: null, proxy: null, parse_mode: null, sendMessage: function() { var params = { chat_id: Telegram.to, text: Telegram.message, disable_web_page_preview: true, disable_notification: false }, data, response, request = new CurlHttpRequest(), url = 'https://api.telegram.org/bot' + Telegram.token + '/sendMessage'; if (Telegram.parse_mode !== null) { params['parse_mode'] = Telegram.parse_mode; } if (Telegram.proxy) { request.setProxy(Telegram.proxy); } request.AddHeader('Content-Type: application/json'); data = JSON.stringify(params); // Remove replace() function if you want to see the exposed token in the Log file. Zabbix.Log(4, '[Telegram Webhook] URL: ' + url.replace(Telegram.token, '')); Zabbix.Log(4, '[Telegram Webhook] params: ' + data); response = request.Post(url, data); Zabbix.Log(4, '[Telegram Webhook] HTTP code: ' + request.Status()); try { response = JSON.parse(response); } catch (error) { response = null; } if (request.Status() !== 200 || typeof response.ok !== 'boolean' || response.ok !== true) { if (typeof response.description === 'string') { throw response.description; } else { throw 'Unknown error. Check debug Log for more information.' } } } } try { var params = JSON.parse(value); if (typeof params.Token === 'undefined') { throw 'Incorrect value is given for parameter "Token": parameter is missing'; } Telegram.token = params.Token; if (params.HTTPProxy) { Telegram.proxy = params.HTTPProxy; } if (['Markdown', 'HTML', 'MarkdownV2'].indexOf(params.ParseMode) !== -1) { Telegram.parse_mode = params.ParseMode; } Telegram.to = params.To; Telegram.message = params.Subject + '\n' + params.Message; Telegram.sendMessage(); return 'OK'; } catch (error) { Zabbix.Log(4, '[Telegram Webhook] notification failed: ' + error); throw 'Sending failed: ' + error + '.'; }
Остальные настройки на отправку сообщения, назначение пользователям заббикса такие же, как и для 4й версии.
Использовал материал с https://xakinfo.ru/. Там использован другой скрипт и отправка сообщение идёт не в группу, ну суть та же. Зато там скрипт вроде как отправляет графики.