PDA

Просмотр полной версии : Zabbix. Уведомления в Telegram


Vander
10.06.2017, 16:10
Всем привет! Задался вопросом настройки Zabbix, столкнулся с проблемой, не приходят уведомления в Telegram.

Общая информация:
- Zabbix 3.2.3

- OS FreeBSD 11.0.

Тело используемого скрипта:

Код:



# vim /usr/local/etc/zabbix32/zabbix//alertscripts/zabbix_notify.sh

#!/usr/local/bin/bash

TOKEN='тут мой токен'

which curl &>/tmp/telegram.log

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" | $

if [ $? -eq 0 ] ; then exit 1 ; fi


Владельцем файла назначен zabbix.
Выполнена команда: chmod +x zabbix_notify.sh

Скрины настроек Zabbix:

https://forum.antichat.xyz/attachments/28956080/img_2d35c7abe1.png

https://forum.antichat.xyz/attachments/28956080/img_7f6ae584cd.png

https://forum.antichat.xyz/attachments/28956080/img_3422ab2d8c.png

https://forum.antichat.xyz/attachments/28956080/img_fba94568cb.png

Уведомления исправно приходят на email но не в телеграм.
Если запускать скрипт вручную от любого пользователя, с параметрами:
./zabbix_notify.sh "my ID" "test" "test"
Все, так же исправно.
Надеюсь кто-то подскажет, в чем может быть трабл.

Vertigo
10.06.2017, 17:20
Если я верно понял,то используется такая конфигурация
https://blog.amet13.name/2017/03/zabbix-telegram.html
Можно свериться и обратить внимание на строку # vim /usr/lib/zabbix/ там не прописывается local
Надеюсь,что пригодится.
Но для начала стоит попробовать в строке #!/usr/local/bin/bash написать #! /bin/bash в самом начале,т.к.
это является правилом и началом любого bash-скрипта.

Vander
10.06.2017, 18:23
Vertigo сказал(а):

Если я верно понял,то используется такая конфигурация


Верно, остальное сейчас попробую. Спасибо.





Код:



# vim /usr/local/etc/zabbix32/zabbix/alertscripts/zabbix_notify.sh

#! /usr/local/bin/bash

TOKEN='3846MYTOKENY9DCfE'

which curl &>/tmp/telegram.log

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 -$

if [ $? -eq 0 ] ; then exit 1 ; fi


Привел, скрипт к такому виду, по прежнему не сработало, хотя в журнале

https://forum.antichat.xyz/attachments/28956086/img_a1393e9777.png

Vertigo
11.06.2017, 10:27
Не могу понять ,почему строки нет в скрипте такой: #!/bin/bash
А если вот так попробовать:
1.) убираем строку #!/usr/local/bin/bash , вместо неё пишем просто #!/bin/bash
2.) Строку curl -s --header...приводим к такому виду
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,'
3.) Команда на исполняемость скрипта : chmod +x /usr/local/zabbix32/zabbix/alertscripts/telegram.sh

Вариант 2 . Могут быть проблемы,если при настройке не указать реальное имя хоста ,указанное в веб- интерфейсе (Hostname=Zabbix server).

Vander
11.06.2017, 12:55
Код:



# vim /usr/local/etc/zabbix32/zabbix/alertscripts/zabbix_notify.sh

#!/bin/bash

TOKEN='токен'

which curl &>/tmp/telegram.log

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


Привел к такому виду, все же не помогло.


Vertigo сказал(а):

Вариант 2


Вот тут не совсем понял

Vertigo
11.06.2017, 13:39
Vander сказал(а):

Код:



Вот тут не совсем понял
Рекомендуют в настройке Zabbix в интерфейсе указывать реальное имя машины (хоста)
Вот ещё неплохой разбор этой темы с комментариями к решению проблем
http://blog.angel2s2.ru/2016/03/zabbix-telegram.html


[/QUOTE]

Vander
13.06.2017, 17:46
Вообще никак))

Создается впечатление, что zabbix вообще не дергает даже скрипт. Если выполняю вручную скрипт с параметрами - "ID" test test - все приходит. И в dump.txt:

HTTP/1.1 200 OK
Server: nginx/1.10.1
Date: Tue, 13 Jun 2017 13:35:53 GMT
Content-Type: application/json
Content-Length: 217
Connection: keep-alive
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Expose-Headers: Content-Length,Content-Type,Date,Server,Connection
Strict-Transport-Security: max-age=31536000; includeSubdomains

Добавил строку в скрипт - curl --dump-header /tmp/dump.txt -s --header 'Content-Type: application/json' --request 'POST' --data "{\"chat_id\":\"${CHAT_ID}\",\"text\":\"${SUBJECT} \n${MESSAGE}\"}" "https://api.telegram.org/bot${TOKEN}/sendMessage" | $

Если жду алерта от Zabbix, то ничего не происходит, совсем.

Vertigo
14.06.2017, 02:30
Засада какая-то.Что ещё можно проверить и пробовать:
1.Владельца скрипта и пользователь ,от которого он запущен.
Пробовать запустить скрипт от этого пользователя.
2.Вместо localhost пробовать указать 127.0.0.1 ,или наоборот.
Параллельно отключить DBSocket (если такой есть)
3. Вкладка администрирование-пользователи,выбираем нужного польз-ля
Далее,перейти во вкладку "оповещение"- жмём добавить -"способ оповещения"-Telegram
Ввести токен в поле "Отправить .." и добавить этот способ оповещения в меню "настройки-действия"
В веб-интерфейсе вроде всё активировано и указано,даже не знаю где ещё копать.

Vander
14.06.2017, 14:33
Vertigo сказал(а):

1.Владельца скрипта и пользователь ,от которого он запущен.


[root@asterisk /usr/local/etc/zabbix32/zabbix/alertscripts]# ls -l
total 4
-rwxrwxrwx 1 zabbix zabbix 700 Jun 13 16:24 zabbix_notify.sh



Vertigo сказал(а):

Пробовать запустить скрипт от этого пользователя.


[zabbix@asterisk /usr/local/etc/zabbix32/zabbix/alertscripts]$ ./zabbix_notify.sh "252352354" dfdfd dfdfd
[zabbix@asterisk /usr/local/etc/zabbix32/zabbix/alertscripts]$
Все ОК.



Vertigo сказал(а):

Ввести токен в поле "Отправить .." и добавить этот способ оповещения в меню "настройки-действия"


Тоже не помогло))

### Option: DBSocket
# Path to MySQL socket.
#
# Mandatory: no
# Default:
DBSocket=/tmp/mysql.sock

Тоже без результата)




Vander сказал(а):

[root@asterisk /usr/local/etc/zabbix32/zabbix/alertscripts]# ls -l
total 4
-rwxrwxrwx 1 zabbix zabbix 700 Jun 13 16:24 zabbix_notify.sh

[zabbix@asterisk /usr/local/etc/zabbix32/zabbix/alertscripts]$ ./zabbix_notify.sh "252352354" dfdfd dfdfd
[zabbix@asterisk /usr/local/etc/zabbix32/zabbix/alertscripts]$
Все ОК.

Тоже не помогло))

### Option: DBSocket
# Path to MySQL socket.
#
# Mandatory: no
# Default:
DBSocket=/tmp/mysql.sock

Тоже без результата)



Итак, после множества тщетных попыток, стала ясна одна вещь - Zabbix не передает параметр chat_id в скрипт.

После создания скрипта с таким содержимым:

Код:



#!/bin/bash

echo $0 $1 $2 $3 $4 $5 > /tmp/tg.log


В логфайле /tmp/tg.log -
[zabbix@asterisk /usr/local/etc/zabbix32/zabbix/alertscripts]$ cat /tmp/tg.log
Original event ID: 91erconnect.gr:icmpping): Up (1)2749482 OKing state Trigger: Ping state
[zabbix@asterisk /usr/local/etc/zabbix32/zabbix/alertscripts]$

Соответственно, буду копать в этом направлении. Может, кто сталкивался с таким?