Оповещения Zabbix через Telegram

zabbix+telegram

Вы хотите получать уведомления с Zabbix через Telegram? Нет ничего проще!

Есть для этого готовый бот и Telegram API

Бот присылает все, что было в специальном HTTP GET запросе вида:

http://crierbot.appspot.com/@token@/send?message=@message@

TOKEN — токен выданный ботом при его добавлении в список контактов Telegram

MESSAGE — собственно сообщение, которые хотите передать.

Итак, давайте разбираться, что нам для этого надо и что мы получим в итоге.

Добавление бота

Для начала добавляем себе в Telegram бота @crierbot и нажимаем START

 

После нажатия на START бот пришлет нам уникальный ключ «Token»

Ну вот и все. На этом наше общение с ботом окончено. Теперь только он нам будет писать то, что нам необходимо.

Настройка Zabbix Telegram

Zabbix умеет отправлять оповещения, используя скрипт. Zabbix отправляет 3 параметра: получатель, тема сообщения, текст сообщения.

Создание скрипта

Давайте напишем скрипт, который и будет передавать нам информацию из Zabbix нашему боту, который в свою очередь будет передавать ее нам:

#!/bin/bash
PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
wget -O /dev/null "http://crierbot.appspot.com/$1/send?message=Subj: $2 || Message:$3"

Где $1, $2, $3 переданные Zabbix’ом параметры: получатель, тема сообщения, сообщение.

Данный скрипт сохраняем с произвольным именем, например. telegram.sh в директорию Zabbix’а, где хранятся скрипты уведомлений (в Freebsd по умолчанию это директория:
/usr/local/zabbix32/zabbix/alertscripts/     —       (Для версии 3.2)

Делаем наш скрипт исполняемым:

chmod +x /usr/local/zabbix32/zabbix/alertscripts/telegram.sh

Выдаем zabbix права на этот скрипт:

chown zabbix:zabbix /usr/local/zabbix32/zabbix/alertscripts/telegram.sh

Настройка способа оповещения через telegram

Теперь переходим в веб-интерфейс Zabbix’а и переходим по Меню: «Администрирование» -> «Способы оповещения» и нажимаем «Создать способ оповещения»

Тут заполняем:

Имя — Произвольное

Тип — Скрипт

Имя скрипта — так, как вы назвали скрипт при его создании

Параметры срипта:

{ALERT.SENDTO}

{ALERT.SUBJECT}

{ALERT.MESSAGE}

(Это как раз и есть наши $1, $2 и $3)

И ставим галочку «Активировано»

И нажимаем Добавить (у меня обновить, так как он уже создан у меня)

Добавление способа оповещения пользователю

Далее заходим в «Администрирование» -> «Пользователи«. Выбираем нашего пользователя и переходим на вкладку «Оповещения» и нажимаем «Добавить»

В появившемся окне выбираем тип — под каким именем мы создали действие, вставляем наш токен, который выдал нам бот и нажимаем «Добавить»

После этого у пользователя в Оповещениях появится новый способ оповещения. Нажимаем «Обновить«.

Теперь нам осталось только создать действий, по которому нам будет приходить какое-либо сообщение.

Настройка действий

Итак, приступим к созданию действия. Для этого переходим в «Настройка» -> «Действия«. Справа вверху где «Источник событий» выбираем» Триггеры. Нажимаем «Создать действие«.

Действие:

 

Имя — Пишем любое понятное для нас имя

Условие — Настраиваем условие, при котором будет происходит наше действие (ниже я приведу пример 1 из своих действий)

Операции:

Выбираем что будет присылаться нам во время срабатывание нашего условия

В операциях нажимаем Новый и добавляем наш способ оповещения:

Должно получиться что то типа вот этого.

На вкдадке Операции восстановления Выбираем в операциях «оповещение о восстановлении», чтобы знать, что проблема ушла.

И нажимаем «Добавить«. В принцип на этом этапе мы уже все настроили!

Заключение

Вот пример одного из моих действий. У меня есть триггер на температуру CPU моего NAS. Его я и использовал:

Вот что мы в принципе видим в окне самого Telegram:

Собственно ничего сложного нет. Это настроить гораздо быстрее чем все это прочитать или тем более все это написать. Если возникнут трудности — пишите в комментарии. Постараюсь помочь.

36 комментариев

  • Добрый день! Все перепроверил на сто раз. Выдает ошибку Timeout while executing a shell script. Таймаут в настройках сервера увеличил до 15…. не помогло.

    • Добрый день!
      Это в панель zabbix у вас данная ошибка или в логах?

      1) Wget установлен?

      2) Если заменить переменные в скрипте:
      $1 — Ваш токкен
      $2 — произвольный текст
      $2 — произвольный текст
      Вы получаете сообщение нормально?

      3) Включите Debug=4 на стройках zabbix_server.conf и после срабатывания пришлите лог, что внутри?

  • Добрый день.
    Заббикс в журнале действий показывает что отчет ушел в телеграм. Но не вижу в телеграмме отчета в Cier bot.

    • Попробуйте через консоль выполнить:
      wget -O /dev/null «http://crierbot.appspot.com/ВАШ_ТОКЕН/send?message=TEST»
      Что получите в ответ? Если токен верный, то от бота Вы получите сообщение — TEST.

  • Добрый день подскажите пожалуйста,уже несколько дней не могу настроить, в журнале ошибка /usr/local/etc/zabbix34/zabbix/alertscripts/telegram.sh: not found
    в чем может быть проблема?

    • В ошибке как то явно написано что не может найти данный файл, скрипт лежит там?
      А если выполнить:
      ls -l /usr/local/etc/zabbix34/zabbix/alertscripts/

      Вывод можете написать сюда или в чат телеграмм: https://t.me/sysadminnote

    • root@zabbix:/usr/home/Odamin # ls -l /usr/local/etc/zabbix34/zabbix/alertscripts/
      total 12
      -rwxr-xr-x 1 zabbix zabbix 585 Nov 21 16:07 telegram.sh

      все на месте лежит само собой.

    • Очень странно конечно это. А версия заббикса какая? В «морде» все настроено верно, по скриншотам?
      Еще бы глянуть zabbix_server.conf, то место, где описывается путь к скриптам (хотя, судя по ошибке из лога, смотрит он прям туда)

  • что-то вручную проверку не проходит.

    отправляю запрос
    wget -O /dev/null «http://crierbot.appspot.com/4yegsYkUXI0FPAW…MomjfEuK/send?message=TEST»
    получаю ответ
    «http://crierbot.appspot.com/4yegsYkUXI0FPAW…ZMomjfEuK/send?message=TEST»: Scheme missing.

  • wget -O /dev/null
    выдает Missing: Command not found.

    сделал все по инструкции, wget установлен, заббикс 3.2

    • wget -O /dev/null «http://crierbot.appspot.com/мой токен/send?message=TEST»

    • Отправил без параметров, оказало нет wget, установил, такая же беда (freebsd11) на centos нормально получилось отправить, где искать, подскажите проблему, freebsd 11 wget установлен.

    • система обновляется регулярно? У меня у самого на freebsd 11 вертится zabbix. Только что проверил, все работает. Попробуйте обновить пакеты и переустановить wget

  • Здравствуйте.

    Настроил по описанию.

    Сделал вручную отправку wget -O /dev/null «http://crierbot.appspot.com/4yegsYkUXI0FPAW…MomjfEuK/send?message=TEST» все отлично.

    В ZABBIX сработал триггер, написано, что «Отправлено», но ничего не пришло. Токен перепроверил — правильный.

    Подскажите, где можно посмотреть логи?

    ОС: Linux CentOS
    ZABBIX: 3.2.11

    • Добавлю. Действие использую такое же, что и по умолчанию для EMAIL.

    • Здравствуйте.
      Токен не забыли внести в профиль? )
      Включить на zabbix_server.conf:
      DebugLevel=4
      Перезапустить сервер и смотреть лог по пути /var/log/zabbix/zabbix_server.log
      Возможно заббикс не находит wget, попробуйте не просто wget в начале, а вот так:
      /usr/bin/wget «http://crierbot.appspot.co….

  • Заработало. Блокнот Windows поставил какие-то метки. Убрал их и все заработало.

    Большое спасибо за статью )

  • Здравствуйте.
    Настроил по описанию.
    Сделал вручную отправку wget -O /dev/null «http://crierbot.appspot.com/TOKEN/send?message=TEST» все отлично. Test пришел.
    Триггер срабатывает, но сообщение не оправляется выдаёт ошибку:
    Connecting to crierbot.appspot.com (74.125.200.153:80)
    wget: server returned error: HTTP/1.1 400 Bad Request
    /usr/lib/zabbix/alertscripts/telegram.sh: line 3: Message:: command not found
    Полагаю что-то не так с переменными {ALERT.SENDTO}, {ALERT.SUBJECT} и {ALERT.MESSAGE}. Я их добавил аналогично инструкции. Но по каким-то причинам скорее всего они не передаются в скрипт. Сейчас скрипт имеет вид:
    #!/bin/bash
    PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    wget -O /dev/null «http://crierbot.appspot.com/$1/send?message= Subject: $2 || Message: $3»

    Да нужно уточнить что если скрипт имеет вид:
    #/bin/bash PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin wget -O /dev/null http://crierbot.appspot.com/$1/send?message=$2
    то пришло сообщение: PROBLEM (это значение переменной {TRIGGER.STATUS}
    но если посмотреть по Action log то сообщение не отправилось и и вот такая ошибка:
    Connecting to crierbot.appspot.com (74.125.200.153:80)

    wget: bad address ‘TRIGGER.NAME}’
    /usr/lib/zabbix/alertscripts/telegram.sh: line 3: Problem: command not found)
    Подскажите пожалуйста что нужно поправить. За ранее большое спасибо!

    • Здравствуйте!
      А откуда пробела у Вас после знака «равно» в:
      wget -O /dev/null «http://crierbot.appspot.com/$1/send?message= Subject: $2
      Это Вы так скопировали от себя? Если да, то попробуйте его убрать от туда, привести к виду:
      …ot.com/$1/send?message=Subje…

  • Убрал, привел к виду:
    #!/bin/bash
    PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    wget -O /dev/null «http://crierbot.appspot.com/$1/send?message=Subject: $2 || Message: $3»

    Connecting to crierbot.appspot.com (74.125.200.153:80)
    wget: server returned error: HTTP/1.0 400 Bad Request

    • Если заменить $1 на Ваш токен и $2 и $3 на любой тескт, и выполнить скрипт, что будет?

  • Скрипт выполняет как вручную, так и при срабатывании триггера zabbix и от бота приходит этот самый любой текст.

    • ХМ… Очень странно… Что с параметрами не так получается. Попробуйте обновить zabbix, проверьте правильность параметром (попробуйте не скопировать, а написать вручную их). Возможно не верно копируется какой либо символ или берется как то пробел в начале или конце…

  • Здравствуйте, будете что нибудь делать с обходом блокировки ркн? Заббикс перестал слать в телегу?

    • —2018-04-18 12:44:26— http://crierbot.appspot.com/мойтокен/send?message=TEST
      Resolving crierbot.appspot.com (crierbot.appspot.com)… 2a00:1450:4010:c07::99, 64.233.164.153
      Connecting to crierbot.appspot.com (crierbot.appspot.com)|2a00:1450:4010:c07::99|:80… failed: Address family not supported by protocol family.
      Connecting to crierbot.appspot.com (crierbot.appspot.com)|64.233.164.153|:80… connected.
      HTTP request sent, awaiting response… 500 Internal Server Error
      2018-04-18 12:44:32 ERROR 500: Internal Server Error.

    • Возможно что то не так делаете? Вот мой запрос, сообщение удачно получено:

      @zserver3 ~ $ wget -O /dev/null «http://crierbot.appspot.com/МОЙ_ТОКЕН/send?message=TEST»
      —2018-04-18 09:59:55— http://crierbot.appspot.com/МОЙ_ТОКЕН/send?message=TEST
      Resolving crierbot.appspot.com (crierbot.appspot.com)… 173.194.222.153, 2a00:1450:4010:c01::99
      Connecting to crierbot.appspot.com (crierbot.appspot.com)|173.194.222.153|:80… connected.
      HTTP request sent, awaiting response… 200 OK
      Length: 0 [text/html]
      Saving to: ‘/dev/null’

      /dev/null [ < => ] 0 —.-KB/s in 0s

      2018-04-18 09:59:55 (0.00 B/s) — ‘/dev/null’ saved [0/0]

    • CrierBot хостится на Американских серверах, в GAE, поэтому проблем с отправкой возникать не должно… Только в работе Вашего клиента возможны перебои.

      И да, данный бот — это не моя разработка) Я просто описал инструкцию, как его настроить.

    • Проблем то нету, сегодня все отправляется нормально, вчера вечером тоже. Просто в один момент пытался отправить выдал такую ошибку, что к хосту не может подцепится, подумал может блокировка.

    • Вы уверены, что это санкции? Может быть что то не так делаете или какой лишний символ в строке? Можете скинуть запрос-ответ, если вручную запустить скрипт?

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

Ваш e-mail не будет опубликован.