Шаг 1.
Для начала нужно создать бота в telegram. Для этого надо добавить в свой список контактов бота @BotFather, сказать ему "/start" и потом "/newbot". BotFather сначала спросит, как назвать нового бота, а следующим сообщением нужно ввести имя бота. В ответ BotFather пришлет token.
Вы можете либо создать своего бота либо использовать моего (все сообщения будут отправлены только вам, у меня к ним доступа нет). Звать этого бота @zabbix_notify_bot, а token у него "179320554:AAHI9AeBkptHgMIh5pVs31CRzGHV_9sG8bs". Бота нужно добавить в свой список контактов.
Шаг 2.
Чтобы можно было отправить себе сообщение, нужно знать свой Telegram ID. Для этого добавьте в свой список контактов бота @MyTelegramID_bot и скажите ему "/start". В ответ получите свой Telegram ID. Скоро он пригодится.
Если оповещение нужно слать в группу, то надо этого бота добавить в группу и сказать "/start". И далее использовать этот Telegram ID.
Шаг 3.
Для отправки сообщений достаточно дать одну команду:
curl --header 'Content-Type: application/json' --request 'POST' --data '{"chat_id":"_telegram_id_","text":"_your_message_"}' "https://api.telegram.org/bot_bot_token_/sendMessage", где _telegram_id_ - ваш Telegram ID, полученный на шаге 2;
_your_message_ - любое сообщение, которое бот отправит вам (для переноса строк можно использовать \n);
_bot_token_ - token бота, полученный на шаге 1.
Для отправки уведомлений из zabbix, я использую такой скрипт:
#!/bin/bash TOKEN='179320554:AAHI9AeBkptHgMIh5pVs31CRzGHV_9sG8bs' which curl &>/dev/null if [ $? -ne 0 ] ; then echo 'FAIL: curl not found.' && exit 1 ; fi if [ $# -ne 3 ] ; then echo 'FAIL: Params not defined.' && echo 'Usage: zabbix-to-telegram-notify.sh TelegramID Subject Message' && 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Если используется прокси, то нужно добавить соответствующие параметры для curl.
Скрипт нужно положить в каталог, который указан в параметре "AlertScriptsPath" в конфиге zabbix сервера:
# grep -i AlertScriptsPath /etc/zabbix/zabbix_server.conf | grep -vE '^#' AlertScriptsPath=/etc/zabbix/alertscriptsИ сделать его исполняемым:
chmod +x /etc/zabbix/alertscripts/zabbix-to-telegram-notify.sh
Шаг 4.
Теперь нужно настроить сам zabbix, чтобы он мог пользоваться скриптом. Для начала нужно создать новый способ оповещений. Я буду рассматривать для zabbix 3+, т.к. использую его. В 2.2-2.4 разница не большая.
Идем в Администрирование - Способы оповещений, жмем кнопку "Создать способ оповещений". В поле "Имя" вводим название способа оповещения. В поле "Тип" нужно выбрать "Скрипт". В поле "Имя скрипта" нужно указать имя файла-скрипт, без пути; например, zabbix-to-telegram-notify.sh. В поле "Параметры скрипта" нужно нажать "Добавить" 3 раза и ввести в появившиеся поля {ALERT.SENDTO}, {ALERT.SUBJECT} и {ALERT.MESSAGE}. Пример:
Шаг 5.
Идем в Администрирование - Пользователи - выбираем своего пользователя - Оповещения - Добавить. В поле "Тип" выбираем только что созданный способ оповещения, например, Telegram Bot. В поле "Отправлять на" вводим свой Telegram ID, полученный на шаге 2. Остальные поля заполняем на свое усмотрение.
Шаг 6.
Идем в Настройка - Действия, в поле "Источник событий" выбираем "Триггеры" и жмем "Создать действие". На закладках "Действие" и "Условие" заполняем поля по своему усмотрению. Я в полях "Сообщение по умолчанию" и "Сообщение о восстановлении" указываю такое:
{HOST.NAME} :: {ITEM.NAME} :: {ITEM.VALUE} Status: {TRIGGER.STATUS} Host: {HOST.NAME} Item: {ITEM.NAME} Value: {ITEM.LASTVALUE} Key: {ITEM.KEY} Severity: {TRIGGER.SEVERITY} Trigger: {TRIGGER.NAME} Description: {TRIGGER.DESCRIPTION}Но это "на вкус и цвет".
На закладке "Операции" жмем "Новый". Выбираем пользователя. В поле "Отправить только через" выбираем созданный на шаге 4 способ оповещения, например, Telegram Bot. Жмем "Добавить" и еще раз "Добавить".
На этом все. Теперь Zabbix должен присылать уведомления в Telegram.
Информация с сайта http://blog.angel2s2.ru/.
44 коммент.:
Это было первое, что мне гугл выдал. Но это излишне. Тут нужна только отправка сообщений от заббикса себе в телегу. А для этого достаточно одного запроса curl. Чем проще, тем лучше.
Но "Simple zabbix's management via bot's commands" выглядит интересным. Правда это пока todo и... другая история.
Этот комментарий был удален автором.
В скрипте ошибок нет, 100%. Возможно ваш sh криво реагирует на $#.
На счет проверки, я вас не понял.
прошу прощения, не проснулся с утра, утро надо начинать с кофе.
Закинул готовый скрипт через sftp, но его не проверил, делал через notepad++, и как следствие символ переноса был виндовый. открыл в vi удалил их, всё работает как часы, ещё раз прошу прощения.
С кем не бывает ;-)
Главное, что разобрались и все заработало :-)
Хорошего дня!
Добрый день. Пользую этот скрипт, но со своим ботом. Напрямус с сервера сообщения отправляются боту, а он их уже постит в группу телеграм. С этим все в порядке. Но при выполнении скрипта на сервере появляется отбивка FAIL: Params not defined. Usage: zabbix-to-telegram.sh TelegramID Subject Message Скрипт в нужной директории, выполняется из под sudo. Символов лишних тоже нет. В чем может быть проблема?
Добрый день.
Такое сообщение выводится, когда скрипту передано не 3 параметра, а больше или меньше трех. Наверное, у вас в Subject или Message есть пробелы. Возьмите все параметры в кавычки, т.е., например, если запустить скрипт так
zabbix-to-telegram.sh "000000" "My Subject" "My Message"
то он отработает, а если не использовать кавычки, то она сочтет, что ему передали 5 параметров и выплюнет то сообщение.
sudo для работы скрипта совсем не нужен. Скрипт прекрасно работает из под обычного пользователя.
Но если вам все же нужен sudo, попробуйте дополнительно экранировать кавычки, т.е.
zabbix-to-telegram.sh "\"000000\"" "\"My Subject\"" "\"My Message\""
Решил проблему с отработкой скрипта на сервере руками - шлет сообщения независимо от наличия ковычек. в Заббиксе 3.0 настроено все по Вашей инструкции, но сообщения не приходят все равно. Права на каталог и выполнение скрипта выдал полные всем пользователям. Куда ковырять дальше теряюсь в догадках :(
Извините, я запутался... Выше вы писали, что отправляет сообщения и они приходят, но есть ошибка при запуске руками. Сейчас вы говорите, что решили проблему отправки руками, но сообщения не приходят...
Думаю, где-то в процессе настройки или отладки закралась ошибка. Пришлите команду, которой вы запускаете скрипт (если из крона, то всю строку) и сам скрипт, который у вас на сервере лежит (в токене бота можете изменить несколько символов). Можете не почту прислать, она указана вверху.
Не приходят сообщения в группу. Не проверкой, не через забикс. Если вместо id группы ввожу ID пользователя, то все отлично работает. Настраиваю на Centos7. Помогите пожалуйста.
ID группы начинается со знака минус. Вы точно его указываете?
Да. В телеграме сделал упгрейд до супер группы, ID изменился на более длинный и тоже не помогло.
При проверке через команду в шаге 3 при подстановке ID группы:
{"ok":false,"error_code":400,"description":"Bad Request: chat not found"}
Если прописываю ID пользователя сообщения приходят в Telegram.
Можете меня временно админом группы сделать? @romalll
Завтра посмотрю. Адаптер питания от ноута концы откинул.
Можете меня временно админом группы сделать? @romalll
Завтра посмотрю. Адаптер питания от ноута концы откинул.
Из командной строки запускаю скрипт:
su zabbix telegram2.sh Telegram_id 'Test subj' 'Test message'
Результат: сообщение приходит, в логах записи есть.
В Zabbix 3.0.2 создал Способ оповещения, прописал в нём {ALERT.SENDTO}, {ALERT.SUBJECT}, {ALERT.MESSAGE}; пользователю оповещение добавил с привязкой на скрипт.
В итоге на срабатывание триггера ничего не приходит, в логе - пусто, но в Журнале действий всё нормально. Состояние - Отправлено.
В лог пишет строка:
echo "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\\\"" >> /tmp/telegram2.log
В общем, затык...
Вы скрипт точно не меняли?
Менял немного.
#!/bin/bash
TOKEN='***'
which curl &>> /tmp/telegram2.log
if [ $? -ne 0 ] ; then echo 'FAIL: curl not found.' && exit 1 ; fi
if [ $# -ne 3 ] ; then echo 'FAIL: Params not defined.' && echo 'Usage: telegram2.sh TelegramID Subject Message' && exit 1 ; fi
CHAT_ID="$1"
SUBJECT="$2"
MESSAGE="$3"
echo $CHAT_ID >> /tmp/telegram2.log
echo $SUBJECT >> /tmp/telegram2.log
echo $MESSAGE >> /tmp/telegram2.log
date >> /tmp/telegram2.log
echo "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\\\"" >> /tmp/telegram2.log
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" >> /tmp/telegram2.log
> ... sendMessage\\\"" >> /tmp/telegram2.log
Как минимум, у вас 2 лишних бэкслэша в конце второй строки.
А что пишет в лог последняя строка (curl)? Она должна ответ сервера писать, либо ошибку. Кстати, замените в последней строке
>> /tmp/telegram2.log
на
&>> /tmp/telegram2.log
чтобы ошибки от курла тоже писались в лог.
> Как минимум, у вас 2 лишних бэкслэша в конце второй строки.
Это поправил, но оно только на запись в лог влияет.
> А что пишет в лог последняя строка (curl)?
Ответ и пишет:
{"ok":true,"result":{"message_id":18,"from":{"id":ХХХ,"first_name":"ХХХ","username":"ХХХ"},"chat":{"id":ХХХ,"first_name":"ХХХ","last_name":"ХХХ","username":"ХХХ","type":"private"},"date":1470221426,"text":"Test subj\nTest message"}}
"ok":true возвращается тогда, когда сервер телеграмм все принял и не обнаружил ошибок в запросе.
Скорее всего вы не верно указали Telegram_id в заббиксе (ведь из консоли все приходит). Если конечно этот ответ получен не от консоли.
> А что пишет в лог последняя строка (curl)?
На всякий... Имел ввиду, когда скрипт запускается заббиксом, а не через консоль.
"ok":true возвращается тогда, когда сервер телеграмм все принял и не обнаружил ошибок в запросе.
Скорее всего вы не верно указали Telegram_id в заббиксе (ведь из консоли все приходит). Если конечно этот ответ получен не от консоли.
> А что пишет в лог последняя строка (curl)?
На всякий... Имел ввиду, когда скрипт запускается заббиксом, а не через консоль.
ID верный.
Фишка в том, что скрипт срабатывает только из командной строки. И приведённые цитаты из лога - это тоже после вызова командной строки.
А при отработке из Zabbix - молчок. Никакой записи в лог скрипта не попадает. Права на скрипт есть, никакой ошибки уведомления Zabbix не даёт.
Получается проблема на уровне либо ФС (права, пути), либо заббикс (ошибка в настройке). Пока только одно соображение в голову приходит...
Попробуйте вот этот вариант скрипта (для отладки, что в логе?) как из консоли, так и самим заббиксом - http://pastebin.com/3Bb4yD7H
Так же можете попробовать переключиться на пользователя заббикса, например, "su zabbix -" и выполнить скрипт. У этого пользователя должен быть указан шелл в /etc/passwd, а не что-то в духе /bin/false и /bin/nologin.
Если ничего из вышесказанного не поможет, сделайте настройки по новой, внимательно проверяя все пути и поля, которые заполняете (не раз с таким сталкивался).
С правами и настройками пути к алертскриптам всё перепроверил
Так я же и писал, что запускаю из строки:
su zabbix telegram2.sh Telegram_id 'Test subj' 'Test message'
Опять же - если бы Zabbix не мог исполнить скрипт - в Журнале оповещений ошибка бы была.
> Попробуйте вот этот вариант скрипта (для отладки, что в логе?)
Попробовал. Та же картина.
Из командной строки запускаю - работает: и в Телеграм сообщение приходит и в логе запись.
Из Zabbix - "Состояние - Отправлено" на панели, но ни в Телеграме, ни в логах - ничего.
Такое ощущение, что заббикс запускает какой-то другой скрипт, но не этот. Уверен, что тут надо копать либо в фс, либо в конфиге сервера заббикс, либо в настройках заббикс (веб-морда).
Если только к вам подключиться и посмотреть.
> Такое ощущение, что заббикс запускает какой-то другой скрипт
Нет больше скриптов с таким именем.
Ладно, чёрт с ним.
столкнулся с проблемой, оповещения по серверам приходят в полном объёме, а вот по принтерам урезаются, при этом на почту всё приходит как надо
Как в телеге так и в консоли есть ограничения на кол-во символов.
>У этого пользователя должен быть указан шелл в >/etc/passwd, а не что-то в духе /bin/false и >/bin/nologin.
su - username -s /bin/bash
и ничего не нужно менять в /etc/passwd
> Такое ощущение, что заббикс запускает какой-то другой скрипт
Включаем дебаг левел в заббиксе на 4 уровень и не гадаем на кофейной гуще
О! Точно! Совсем забыл об этом. Спасибо 👍
что-то не работает.
в subject и message пробелов нет.
FAIL: Params not defined.
Usage: zabbix_bot.sh TelegramID Subject Message
Должно быть ровно 3 параметра. Не больше, не меньше. Лучше взять их в кавычки (чтобы наверняка).
Большое спасибо!
Инструкция рабочая.
Здравствуйте!
При компиляции из терминала linux вылетает ошибка
end of file unexpected (expecting fi )
У вас точно bash, а не симлинк на sh, dash, etc?
Еще может быть, текст скрипта скопировался не полностью.
Все сделал как указано в статье.... Скрипт скопирован полностью.
Зачем эти велосипеды, если баду написали и выложили на github рабочий скрипт
В первом абзаце есть ответ на ваш вопрос.
И мне не нравятся громоздкие скрипты с кучей функций, которые мне не нужны.
Спасибо. Всё работает :)
Понадобилось лишь дайть права на чтение скрипта.
типа : chmod 755 script.sh
The casino that opened in the heart of The Strip - Filmfile
The casino 네임드 사다리 that 스핀 토토 opened in 바셀티비 the heart of The Strip is a dark stone that belongs to one of the 스포츠토토 모바일 벳피스트 most famous casino gambling dens of all 안전 사이트 time. The casino
Отправить комментарий