Обновился до 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 интерфейс заббикса.
Переходим в Администрирование -> Способы оповещения. Жмем «Создать способ оповещения».
{ALERT.SUBJECT} передается в скрипт sms.sh как переменная $1
Если добавить добавить еще один параметр, то он передастся в скрипт как $2 и так далее. Я буду передавать только один параметр.
Список всех параметров есть здесь.
Далее переходим в Администрирование -> Пользователи. Выбираем нужного пользователя (у меня это Admin). Переходим на вкладку Оповещение. И добавляем ему новое оповещение.
Параметр Отправлять на в нашем случае не критичен.
Параметр Использовать, если важность настраиваем под себя.
Переходим в Настройка -> Действия, выбираем действие в котором мы можем настроить шаблон отправляемого сообщения. Главное ставим галочку Активировано!
Остальное я оставил как есть.
Теперь вырубаем оборудование и ждем сообщение в 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 |