Zabbix 3. Настраиваем оповещение через бота telegram

Обновился до 3 заббикс, зарегистрировался в telegram. Захотелось получать уведомления от zabbix через telegram.
И так приступим…

Первое что нужно, это завести бота в телеграм. Для этого нам нужно обратиться к «отцу ботов»: https://telegram.me/botfather. Переходим по ссылке, добавляем бота, жмем /start.

На что он нам ответит списком команд:

You can control me by sending these commands:
 
/newbot - create a new bot
/token - generate authorization token
/revoke - revoke bot access token
/setname - change a bot's name
/setdescription - change bot description
/setabouttext - change bot about info
/setuserpic - change bot profile photo
/setinline - change inline settings
/setinlinefeedback - change inline feedback settings
/setcommands - change bot commands list
/setjoingroups - can your bot be added to groups?
/setprivacy - what messages does your bot see in groups?
/deletebot - delete a bot
/cancel - cancel the current operation

Отправляем комаду /newbot. В ответ видим:

Alright, a new bot. How are we going to call it? Please choose a name for your bot.

В ответ вводим желаемое имя для нового бота. Если имя занятно, вводим другое. Если оно свободно, в ответ увидим следующее:

Good. Now let's choose a username for your bot. It must end in `bot`. Like this, for example: TetrisBot or tetris_bot.

Бот сообщает нам о том, что к указанному имени нужно приписать постфикс «_bot». Отвечаем снома, приписав в конце имени бота «bot».

В ответ получаем сообщение об успешном создании бота и следующей информацией:

Done! Congratulations on your new bot. You will find it at telegram.me/имябота_bot. You can now add a description, about section and profile picture for your bot, see /help for a list of commands.
 
Use this token to access the HTTP API:
211114425:A2XfUh0f9xGTXIrTdcI435EDdjhtY3BZDTX
 
For a description of the Bot API, see this page: https://core.telegram.org/bots/api

Нас интересует token: 211114425:A2XfUh0f9xGTXIrTdcI435EDdjhtY3BZDTX (в примере он изменен случайным образом)

И так, добавляем нашего бота себе в контакты, нажмем /start и напишем ему любое сообщение.

Теперь, чтобы ботом отправлять сообщения именно Вам, нужно узнать наш chat_id. Делается это следующим образом.
В URL ниже подставляем Ваш token, копируем его и вставляем в браузере:
https://api.telegram.org/bot211114425:A2XfUh0f9xGTXIrTdcI435EDdjhtY3BZDTX/getUpdates

В полученном выводе нам интересует «chat»:{«id»:

Цифры после — это и есть наш chat_id. У меня это «chat»:{«id»:121224452,Записываем их.

Теперь мы можем проверить, приходят ли сообщения с помощью такого url:

https://api.telegram.org/bot211114425:A2XfUh0f9xGTXIrTdcI435EDdjhtY3BZDTX/sendMessage?chat_id=121224452sendMessage&text=message

Сообщение пришло, все замечательно. Если нет, проверяем все что делали выше.

Отправлять наши уведомления мы будем через php. У нас же есть веб сервер с php?

Пишем вот такой скриптик:

<?php
function sendMessage($chatid, $txt, $token) {
    $url = "https://api.telegram.org/".$token."/sendMessage?chat_id=".$chatid."&sendMessage&text=". $txt ."";
    $ch = curl_init();
    $optArray = array(
            CURLOPT_URL => $url,
            CURLOPT_RETURNTRANSFER => true
    );
    curl_setopt_array($ch, $optArray);
    $result = curl_exec($ch);
    curl_close($ch);
}
$token = "bot211114425:A2XfUh0f9xGTXIrTdcI435EDdjhtY3BZDTX";
$chatid = "121224452";
 
$t1 = $_GET['t1'];
$t2 = $_GET['t2'];
$txt=$t1 ."\r\n". $t2; //вставляем перевод строки
$mypass="пароль";
$getpas = $_GET['pass'];
 
if ($mypass = $getpas ) {
sendMessage($chatid,urlencode($txt), $token);
} else {
echo "pass incorrect";
}
?>

В $token вставляем наш token, в $chatid вставляем наш chat_id. В $mypass указываем какой-либо пароль для выполнения скрипта.

urlencode($txt) используется для того, чтобы передать в сообщении боту переносы строк.

Для отправки сообщений все готово. Теперь нужно настроить zabbix.

Открываем конфиг заббикса zabbix_server.conf У меня на debian он находится в /etc/zabbix/zabbix_server.conf

Находим параметр AlertScriptsPath, если раскомментировать, если закомментирован. В нем указан путь до скриптов, которые будет выполнять zabbix

У меня он выглядит так:

AlertScriptsPath=/usr/lib/zabbix/alertscripts

Создаем в этой папке наш скрипт и даем права на выполнение и сразу открываем его:

sudo touch sms.sh && sudo chmod +x sms.sh && sudo vi sms.sh

Пишем в нем следующее:

#!/bin/bash
t1=$1
t2=$2
LOGFILE="/usr/lib/zabbix/alertscripts/sms.log"
echo "t1: '$t1' t2: '$t2'" >> ${LOGFILE} 
curl "https://cusmir.ru/tg/index.php?pass=нашпароль&t1=${t1// /%20}&t2=${t2// /%20}"
exit 0

Если нужно, создаем файл логов и даем ему полные права.

sudo touch sms.log && sudo chmod 777 sms.log

Если нет, то комментируем строки с логами.
${t1// /%20} — этой командой мы заменяем пробелы сообщения на %20 для передачи в url.
Проверить работоспособность скрипта можно, передав ему параметр $1 и $2 следующим образом:

./sms.sh param1 param2

Теперь переходим в web интерфейс заббикса.

Переходим в Администрирование -> Способы оповещения. Жмем «Создать способ оповещения».
zabbix1

{ALERT.SUBJECT} передается в скрипт sms.sh как переменная $1
Если добавить добавить еще один параметр, то он передастся в скрипт как $2 и так далее. Я буду передавать только один параметр.
Список всех параметров есть здесь.

Далее переходим в Администрирование -> Пользователи. Выбираем нужного пользователя (у меня это Admin). Переходим на вкладку Оповещение. И добавляем ему новое оповещение.
zabbix2

Параметр Отправлять на в нашем случае не критичен.
Параметр Использовать, если важность настраиваем под себя.

Переходим в Настройка -> Действия, выбираем действие в котором мы можем настроить шаблон отправляемого сообщения. Главное ставим галочку Активировано!
Остальное я оставил как есть.

Теперь вырубаем оборудование и ждем сообщение в telegram

Скрипт php был найден на просторах интернета и изменен.

Спасибо за внимание.

UPD. Нашел интересный ресурс на тему. https://www.domoticz.com/wiki/Telegram_Bot

Вариант оправки прямо из bash Скрипта sms.sh:

#!/bin/bash
t1=$1
t2=$2
#перевод строки
nl=$'\n'
curl --data chat_id=121224452 --data-urlencode "text=$1 $nl $2"  "https://api.telegram.org/bot211114425:A2XfUh0f9xGTXIrTdcI435EDdjhtY3BZDTX/sendMessage"
exit 0

Добавить комментарий