LINUX.ORG.RU
ФорумAdmin

Отправка сообщений в Telegram

 


0

2

Выход в Интернет осуществляется через proxy. От root команда выполняется ./zbxtg.py «@ivanov» «test» «test» и сообщения приходят в telegram. Если выполнять от пользователя zabbix команду: sudo -u zabbix ./zbxtg.py «@ivanov» «test» «test» то выдаются сообщения об ошибках. Удалось запустить команду от пользователя zabbix, которая приводит к отправке сообщений в телеграм: sudo -u zabbix -E bash -c ‘/usr/lib/zabbix/alertscripts/zbxtg.py «@ivanov» «test» «test»’. Как использовать эту команду, чтобы zabbix отправлял сам сообщения в telegram.

Как использовать эту команду, чтобы zabbix отправлял сам сообщения в telegram.

Забикс и так отправляет с правами пользователя zabbix. Зачем ты пытаешся придумать велосипед?

xaTa ★★★
()

Попробуй отдебажить. Пропиши верменно шелл zabbix пользователю, сделай su zabbix от root, и смотри почему сообщения не уходят. Ты проксю глобально прописал или в скрипте экспортируеш?

xaTa ★★★
()
Ответ на: комментарий от xaTa

Дело в том что zabbix не отправляет сообщения в telegram, я прочитал что это проверяется командой sudo -u zabbix ./zbxtg.py «@ivanov» «test» «test». Если команда отрабатывается, то значит и zabbix сможет отправить. Но из под root-а команда ./zbxtg.py «@ivanov» «test» «test» отправляет сообщения в Telegram, а из под пользователя zabbix ничего не происходит и более того, как я посмотрел через снифер, при команде sudo -u zabbix ./zbxtg.py «@ivanov» «test» «test» не происходит даже обращения к proxy серверу. Нашел в интернете скрипт и проверил его. Когда он отрабатывает, то идет обращение к proxy и отправляются сообщения в Telegram. Вопрос как это реализовать теперь чтобы сам zabbix сервер отправлял. Или иначе - как сделать чтобы пользователь zabbix имел доступ в интернет.

georgekup
() автор топика
Ответ на: комментарий от georgekup

Проксю прописал глобально. Самое необычное что если сделать su zabbix то выполняется: ./zbxtg.py «@ivanov» «test» «test» и сообщения уходят в Телеграм. Т.е как я понимаю от пользователя zabbix все отрабатывает и уходит. Так почему не отрабатывает казалось бы тоже самое при команде sudo -u zabbix ./zbxtg.py «@ivanov» «test» «test».

georgekup
() автор топика
Ответ на: комментарий от georgekup

Шел у пользователя zabbix есть. От него выполняется скрипт, но нее выполняется в окружении пользователя root.

georgekup
() автор топика
Ответ на: комментарий от georgekup

не подскажите как в скрипте экспортировать настройки для proxy

export {http,https}_proxy="http://user:passwd@proxy-ip:port"
xaTa ★★★
()
Ответ на: комментарий от xaTa

Спасибо! но все равно до конца не понимаю.. Я использую скрипт на питоне - zbxtg.py

если его запускать так su - root -c /usr/lib/zabbix/alertscripts/zbxtg.py «@ivanov» «test» «test» то он отрабатывает и отправляет сообщения

но если эту строку вставить в например zbx.sh и выполнить ./zbx.sh "«@ivanov» «test» «test» то скрипт zbx.sh пишет что ему не дали внешних переменных..почему

georgekup
() автор топика
Ответ на: комментарий от georgekup

но если эту строку вставить в например zbx.sh и выполнить ./zbx.sh

Что за изврат? А аргументы ты как ему собрался передавать?

xaTa ★★★
()
Ответ на: комментарий от xaTa

У меня просто не отрабатывает через proxy отправка сообщений. Я проверяю командой sudo -u zabbix ./zbxtg.py «@ivanov» «test» «test» она не проходит. И более того не доходит до proxy. Я пытаюсь составить скрипт, который будет отправлять сообщения в Telegram, но не не знаю что дальше с ним делать, даже если его удастся составить.

georgekup
() автор топика
Ответ на: комментарий от georgekup
#!/bin/bash

TOKEN='твой токен бота'

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

PM="markdown"
CHAT_ID=$( echo $1 | sed s/' '//g )
SUBJECT=$( echo $2 | sed 's/"//g')
MESSAGE=`echo $3 | sed 's/_SMS//g' | sed 's/OK/*OK*/g' | sed 's/PROBLEM/*PROBLEM*/g'|sed 's/"//g'`


curl -s --header 'Content-Type: application/json' --request 'POST' --data "{\"chat_id\":\"${CHAT_ID}\",\"parse_mode\":\"${PM}\",\"text\":\"*${SUBJECT}*\n${MESSAGE}\"}" "https://api.telegram.org/bot${TOKEN}/sendMessage" | grep -q '"ok":false,'

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

Попробуй мой, он на баше.

xaTa ★★★
()

А от пользователя zabbix БЕЗ всяких su и sudo zbxtg.py что, не работает? Скопируй сообщение об ошибке сюда, а не пересказывай.

И используй markdown для оформления кода (по три косых апострова в начале и в конце, а то у тебя всё в кашу слипается и кавычки заменяются на типографские.

```
код
```
legolegs ★★★★★
()
Ответ на: комментарий от legolegs

Zabbix сервер не отправляет сообщения в Telegram отправляя в лог: Failed to execute command «/usr/lib/zabbix/alertscripts/zbxtg.py ‘@ivanov’ ‘Test’ ‘Test’»: Timeout while executing a shell script.

Если же проверять через команду sudo -u zabbix ./zbxtg.py «@ivanov» «test» «test» то выдается сообщение:

\\

File «./zbxtg.py», line 937, in main() File «./zbxtg.py», line 846, in main tg.send_message(uid, zbxtg_body_text) File «./zbxtg.py», line 94, in send_message answer = requests.post(url, params=params, proxies=self.proxies) File «/usr/lib/python2.7/site-packages/requests/api.py», line 116, in post return request(‘post’, url, data=data, json=json, **kwargs) File «/usr/lib/python2.7/site-packages/requests/api.py», line 60, in request return session.request(method=method, url=url, **kwargs) File «/usr/lib/python2.7/site-packages/requests/sessions.py», line 533, in request resp = self.send(prep, **send_kwargs) File «/usr/lib/python2.7/site-packages/requests/sessions.py», line 646, in send r = adapter.send(request, **kwargs) File «/usr/lib/python2.7/site-packages/requests/adapters.py», line 449, in send timeout=timeout File «/usr/lib/python2.7/site-packages/urllib3/connectionpool.py», line 672, in urlopen chunked=chunked, File «/usr/lib/python2.7/site-packages/urllib3/connectionpool.py», line 376, in _make_request self._validate_conn(conn) File «/usr/lib/python2.7/site-packages/urllib3/connectionpool.py», line 994, in _validate_conn conn.connect() File «/usr/lib/python2.7/site-packages/urllib3/connection.py», line 334, in connect conn = self._new_conn() File «/usr/lib/python2.7/site-packages/urllib3/connection.py», line 157, in _new_conn (self._dns_host, self.port), self.timeout, **extra_kw File «/usr/lib/python2.7/site-packages/urllib3/util/connection.py», line 74, in create_connection sock.connect(sa) File «/usr/lib64/python2.7/socket.py», line 224, in meth return getattr(self._sock,name)(*args)

\\

georgekup
() автор топика
Ответ на: комментарий от georgekup

Zabbix сервер не отправляет сообщения в Telegram отправляя в лог: Failed to execute command «/usr/lib/zabbix/alertscripts/zbxtg.py ‘@ivanov’ ‘Test’ ‘Test’»: Timeout while executing a shell script.

скорее всего, ты забыл указать прокси

Если же проверять через команду sudo -u zabbix ./zbxtg.py

зачем ты привел из вывода только трейс, без самого текста ошибки? ты что-то скрываешь? и пользуйся уже форматированием: https://www.linux.org.ru/help/markdown.md

router ★★★★★
()
Ответ на: комментарий от router

Текста ошибки нет, потому что команда sudo -u zabbix «@ivanov» «test» «test» уходит в бесконечное исполнение.

Если ее прервать по ctr + c то выводится, трейс который я привел.

Настройки прокси я делал в /etc/profile.

Проблему удалось решить прямым доступом вне прокси на api.telegram.org.

Хотелось уточнить: Вы написали, что я забыл указать прокси; может кроме /etc/profile можно еще было где-то указать.

И..спасибо всем за ответы!

georgekup
() автор топика
Ответ на: комментарий от georgekup

google zbxtg.py proxy

Set proxy host:port in zbxtg_settings.py if you need an internet proxy (socks5 supported as well, the wiki will help you)

Настройки прокси я делал в /etc/profile.

насколько я помню, если шел /sbin/nologin, то никаких профилей не применяется

router ★★★★★
()
Последнее исправление: router (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.