Zabbix 4.2/4.4 enviando alertas no Telegram via Bot (Debian 10)
Vamos aprender como receber os alertas do zabbix através do telegram.
Requisitos:
Instalação do Zabbix 4.4 no Debian 10 Buster
ou
Instalação do Zabbix 4.2 no Debian 10 Buster
Criando Bot no telegram
Abra o Telegram e procure por @BotFather.
Inicie a conversa com ele.
– Digite o comando /newbot para iniciar a criação de um novo bot.
– Após o comando você vai dar um nome para seu bot. Ex.: “Bot Legal RR”.
– Em seguida é necessário digitar o nome de usuário para o bot, sendo obrigatório terminar com bot. Ex.: “legallrr_bot”.
– Ao finalizar você receber informações com seu TOKEN, que vamos utilizar em seguida.
Neste exemplo nosso token para acessar a API HTTP ficou:
757396508:AAHpaoyVN-95maOCax1vDPDQBnSaZd9P5r0
Agora procure pelo seu bot e comece uma conversa com ele e envie uma mensagem de teste para o mesmo, pois vamos precisar descobrir o ID do seu usuário, para que ele possa lhe enviar as mensagens.
Abra em seu seu navegador a seguinte URL https://api.telegram.org/botTOKEN/getUpdates para descobrir o ID do usuário que enviou a mensagem ou de um grupo.
Ex.: https://api.telegram.org/bot757396508:AAHpaoyVN-95maOCax1vDPDQBnSaZd9P5r0/getUpdates
:: Chat privado ::
{"ok":true,"result":[{ "update_id":649208620,"message":{ "message_id":2,"from":{"id":221122111,"is_bot":false,"first_name":"Rudimar","last_name":"Remontti","username":"remontti","language_code":"pt-br"}, "chat":{"id":999999999,"first_name":"Rudimar","last_name":"Remontti","username":"remontti","type":"private"}, "date":1541210279,"text":"Testando" } }]}
ID do chat privado: 999999999
Se desejar criar um grupo também, basta adicionar seu bot a ele, após adiciona-lo envia uma mensagem como /teste para que possamos coletar o ID do grupo.
:: Chat em Grupo ::
{"ok":true,"result":[{ "update_id":649208622,"message":{"message_id":4,"from":{ "id":221122111,"is_bot":false,"first_name":"Rudimar","last_name":"Remontti","username":"remontti","language_code":"pt-br"}, "chat":{"id":-888888888,"title":"Grupo Legal","type":"group","all_members_are_administrators":true },"date":1541210975,"text":"/teste","entities":[{"offset":0,"length":6,"type":"bot_command"} }]}
ID do chat grupo: -888888888
Grupo sempre tem um sinal “-” na frente do ID.
Para testarmos se o envio esta funcionando, abra seu navegador e cole a seguinte URL:
https://api.telegram.org/botTOKEN/sendMessage?chat_id=ID&text=Minha%20Mensagem
É necessário ter o curl instalado, uma ferramenta para comando para transferência de dados com sintaxe URL.
# apt install curl
O diretório padrão no zabbix para os scripts fica em /usr/lib/zabbix/alertscripts/.
(Obs: No tutorial Zabbix 3.0.x com notificações via Telegram nos alteramos o valor de AlertScriptsPath, então caso você seja um leitor que quer apenas migrar, volte o diretório esta em /opt/telegram)
Vamos criar o arquivo telegram
# vim /usr/lib/zabbix/alertscripts/telegram
#!/bin/bash # Autor: remontti.com.br TOKEN="ALTERE-PELO-SEU-TOKEN" USER=$1 SUBJECT=$2 MESSAGE=$3 NL=" " curl --silent -X POST --data-urlencode "chat_id=${USER}" --data-urlencode "text=${SUBJECT}${NL}${NL}${MESSAGE}" "https://api.telegram.org/bot${TOKEN}/sendMessage?disable_web_page_preview=true&parse_mode=html" | grep -q '"ok":true' exit 0
De permissão para executar, em seguida vamos criar um atalho em /usr/bin/ e alterar as permissões para o usuário do zabbix.
# chmod +x /usr/lib/zabbix/alertscripts/telegram # ln -s /usr/lib/zabbix/alertscripts/telegram /usr/bin/telegram # chown zabbix. -R /usr/lib/zabbix/alertscripts
Agora execute em seu terminal para verificar se seu bot já consegue fazer o envio de mensages.
# telegram "-888888888" "Mensagem via Terminal para grupo" # telegram "999999999" "Mensagem via Terminal para privado"
::Configurações no Zabbix ::
Administração ⇒ Tipos de mídias ⇒ Criar tipo de mídia
Nome: Telegram
Tipo: Script
Nome script: telegram
Parâmetros do script
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}
Ativo: Sim
Administração ⇒ Usuários Clique no usuário Admin
Com as opções do usuário aberto clique na aba Mídia clique no Adicionar (2)
Tipo: Telegram
Enviar para: ID-Do-Grupo/ID-Usuário
Agora vamos criar a ação que fará o envios dos alertas.
Configurações ⇒ Ações ⇒ Criar ação
De um nome para sua ação
Nova condição: Incidente suprimido – Não
Aba Operações
Assunto padrão:
❌ Problema: <b>{HOST.NAME} </b>
Mensagem padrão
<code>{EVENT.NAME}</code> <b>{ITEM.NAME1}</b> <i>{ITEM.VALUE1}</i> <a href="{HOST.IP}">{HOST.IP}</a> <i>{EVENT.SEVERITY}</i>
Operações: Clique em Nova Mais campos se abrirão, agora em Enviar para Usuário Clique em Adicionar e Selecione o Usuário Admin qual configuramos a mídia. Na opção Enviar apenas para: Selecione Telegram, e em seguida Adicionar
Vamos repetir praticamente na aba Operações de recuperação
Assunto padrão:
✅ Resolvido: <b>{HOST.NAME} </b>
Mensagem padrão
<code>{EVENT.NAME}</code> <b>{ITEM.NAME1}</b> <i>{ITEM.VALUE1}</i> <a href="{HOST.IP}">{HOST.IP}</a> <i>{EVENT.SEVERITY}</i>
Pode clicar agora em Adicionar na seção Operações
Aba Operações de atualização
Assunto padrão:
Problema atualizado: {EVENT.NAME}
Mensagem padrão
{USER.FULLNAME} {EVENT.UPDATE.ACTION} problema em {EVENT.UPDATE.DATE} {EVENT.UPDATE.TIME}. {EVENT.UPDATE.MESSAGE} O status atual do problema é {EVENT.STATUS}, reconhecido: {EVENT.ACK.STATUS}.
E por fim clique no botão Adicionar.
Pronto! Agora precisamos gerar um incidente para ver se nosso alerta será enviado para o Telegram.
No meu caso vou atualizar meu root server do bind9.11 para ver se recebo alertas. Vou editar o arquivo /usr/share/dns/root.hints (que na versão do debian 9 era /etc/bind/db.root). Possuo um template que criei onde ele verifica alterações no arquivo: zbx_export_templates_bin9.11.xml
Bingo! Tudo certo, nosso sistema de envio de mensagem está concluído!
Gostou?
Se não puder doar pode deixar seu agradecimento nos comentário também ficarei feliz em saber que ajudei. Se tiver qualquer pergunta deixe-a também. Se preferir entrar em Contato clique aqui.
Abraço!
Fontes: https://core.telegram.org/bots & https://www.zabbix.com/documentation/
parabens pelo tutorial, teve pequenas mudanças na interface do zabbix 6.2, mas, nada que pequenos ajustes não resolvam.
Parabéns pelo tutorial, mas apesar de tudo ter dado certo continuo não conseguindo enviar os alertas. A mensagem de erro que aparece no Zabbix é Cannot execute command “/usr/lib/zabbix/alertscripts/telegram”: [2] No such file or directory. O envio da mensagem via termnal deu certo.
Muito obrigado Rudimar, funcionou perfeitamente no zabbix 4.2 Ubuntu parabéns pelo tutorial muito completo salvou minha vida aqui rsrs.
Caro Rudimar, parabéns pelo excelente artigo! Fiz todo o processo aqui e funcionou sem problemas. Fiquei apenas com uma dúvida: caso tenha algum problema, existe algum log no server que eu possa visualizar para identificar erros? O zabbix_server.log talvez?
Quando chego nessa parte, nada acontece. Nem erro
O que pode ser??
# telegram “999999999” “Mensagem via Terminal para privado”
falta um – antes dos numeros
e o numero e o id do usuario ou do grupo para que vai enviar
Boa noite, fiz todos os procedimentos e fui fazer um teste reiniciando um aparelho, no zabbix aparece a mensagem de incidente so que nao envia mensagem para o telegram, vi aqui que apresenta essa mensagem
Cannot execute command “/usr/share/zabbix/alertscripts/telegram”: [2] No such file or directory
o que pode ser?
Mesmo problema aqui.
Conseguiu resolver?
Alguém conseguiu?
Bom dia!!!
Nessa parte:
https://api.telegram.org/bot757396508:AAHpaoyVN-95maOCax1vDPDQBnSaZd9P5r0/getUpdates
Ao invés de aparecer o ID do ChatPrivado, apareceu isso:
{“ok”:true,”result”:[]}
Como devo proceder?
O meu estava assim também, descobri outra forma de conseguir o ID do User
Através do IDBOT , só pesquisar por ele nos contatos e usar o comando /getid ele retornará o id do seu usuário do telegram!
amigos cuidado na parte do script em administração, tipos de midia, o nome do script nao pode ter letras maiusculas, o linux e case sensitive
com isso ele nao vai achar /telegram aonde contem o script e vai da falha e nao enviara a mensagem. Espero ter ajudado muitos que nao conseguiram. Obrigado
Tutorial muito bom, só que preciso de uma ajuda, tenho dois links um esta sendo monitorado por um zabbix, criei outro zabbix para poder monitorar o outro link, fiz regra no mangle do mikrotik para ele sair por um link e monitorar o outro pingando alguns sites, todos ips do telegram que achei sai pelo link certo e os sites pelo outro link, porem quando vou testar não envia msg, só envia quando volto a ativar o link, alguém sabe como funciona a api do telegram?
Boa tarde, Meu caro!
Obrigado por ter compartilhado! Me ajudou!
Abraços.
Dei todas as permiçoes e executo pelo terminal, chegam normalmente no grupo, mas quando envio pela ação criada, não chegam.
Nos logs do zabbix em reports, aparecem como enviados. O que pode ser?
Estou com o mesmo problema, chegou a encontrar a solução ?
Muito obrigado por compartilhar conhecimento meu amigo! Implementei em um ambiente aqui show de bola funcionando liso !
Boa noite,
Na etapa de criar o arquivo telegram, só precisa acrescentar o TOKEN? Eu não estou conseguindo passar dessa etapa.
Pelo navegador eu consigo enviar a mensgem normal.
#!/bin/bash
# Autor: remontti.com.br
TOKEN=”ALTERE-PELO-SEU-TOKEN”
USER=$1
SUBJECT=$2
MESSAGE=$3
NL=”
”
curl –silent -X POST –data-urlencode “chat_id=${USER}” –data-urlencode “text=${SUBJECT}${NL}${NL}${MESSAGE}” “https://api.telegram.org/bot${TOKEN}/sendMessage?disable_web_page_preview=true&parse_mode=html” | grep -q ‘”ok”:true’
exit 0
Boa tarde fiz esse tutorial e estava funcionando normalmente, porem do nada parou de enviar os alertas, fiz todos os testes possíveis, testei o BOT enviando mensagens via URL e funciona, revisei todo o procedimento no zabbix e o Scrip Telegram, e estão todos OK, agora não consigo enviar mensagem pelo Terminal, o Curl esta instalado dei todas as permissões como manda o tutorial, e no Zabbix os alertas são enviados normalmente sem erros, so que não chegam no telegram, poderia me ajudar?
Verifica se o ID do grupo não alterou. Ele muda qnd vc adiciona algum usuário e coloca ele como adm.
?Olá. Estou com o mesmo problema. Conseguiu resolver?
Boa tarde,
Estou com o mesmo problema.
Conseguiram resolver?
Caramba amigo quanta competência e paciência para ciar um conteúdo tao rico em detalhes e imagens, sei bem que isso da muito trabalho. Parabéns sou fan sempre passando por aqui!!!
Parabpens Rudimar, o seu script funciona perfeitamente, agora gostaria de saber se vc pode atualizá-lo (script) colocando os gráficos quando a pessoa recebe a mensagem pelo Telegram.
Seria bem interessante, mas não vi em lugar nenhum ainda.
Bom dia Daniel.
Procurou pouco, o meu projeto existe desde 2015, comecei com Perl e agora está em Python.
Mando gráfico até por email.
https://github.com/sansaoipb/Telegram-Graph-authenticated_Python
Muito bom, parabéns!
Obrigado 🤗
Bom dia!
Ótimo tutorial, porém estou com o seguinte caso:
Preciso utilizar dois bot’s para envio de mensagens e o sistema reconhece apenas o bot principal do arquivo “telegram”, se cria-se um arquivo com outro nome ele simplesmente ignora.
Se coloca-se os dois bots no mesmo arquivo ele envia normalmente.
Alguém teve a mesma necessidade e conseguiu achar uma solução?
Quando executo pelo terminal para fazer o teste no grupo ou chat não recebo as mensagens o que pode ter errado ?
A única variável q vc deve alterar é onde está escrito TOKEN logo abaixo do autor. Veja se é isso.
Boa tarde estou recebendo o seguinte erro para enviar via terminal:
/usr/bin/telegram: linha 8: curl: comando não encontrado
apt install curl
Que fantástico meu amigo! Obrigado por compartilhar o conhecimento!
Implementado e funcional no Ubuntu Server 18.04 + Zabbix 4.4.3
Bom dia.
As mensagens enviadas pelo terminal chegam no telegram normalmente.
As mensagens na interface web do zabbix aparecem como enviadas mas não aparecem no telegram.
Poderia me ajudar por favor?
Deve ta faltando alguma conf, chegou a verificar se no usuario (media) tem o id do chat/user?
Parabéns, objetivo! ajudou estou sendo notificado.
Cara muito obrigado o tutorial está perfeito, porém a empresa usa a versão 3.2.0 do Zabbix não tem as opções de operações de recuperação, é p possível configurar mesmo assim pra chegar outro tipo de mensagem quando o link retornar?
Bom dia, estou recebendo apenas o assunto da mensagem e não o conteúdo dela, e os comando de html não estão funcionando.
Perdão, já funcionou, tinha me esquecido de colocar
MESSAGE=$3
NL=”
”
parabéns pelo post.
você colocou o TOKEN com “” ou sem ? eu botei com e não ta funcionando
muito bom, funcionou tranquilo aqui. valeu!!!
Parabéns pelo artigo, very nice!
Como inseri os emojis nas mensagens ??? de problema e correção
Parabéns pelo artigo! Ficou muito bom, preciso e funcional.
Rudimar,
Consigo enviar mensagem através do terminal do servidor mas quando vai para o Zabbix ele mostra a seguinte mensagem de erro: Timeout while executing a shell script.
Pode ser falta de permissão. Teria que olhar nos logs do zabbix (debug se necessário para ver o motivo q ele nao envia)
amigo veja, veja em administração, tipos de midia, o nome do script nao pode ter letras maiusculas, o linux e case sensitive
Esta dando este erro.
Traceback (most recent call last):
File “/usr/lib/zabbix/alertscripts/alerta_telegram.py”, line 14, in
alerta.send_message(DESTINATARIO, ASSUNTO + ‘\n’ + MENSAGEM, disable_web_page_preview=True, parse_mode=’HTML’)
File “/usr/lib/python2.7/site-packages/telebot/__init__.py”, line 598, in send_message
reply_markup, parse_mode, disable_notification))
File “/usr/lib/python2.7/site-packages/telebot/apihelper.py”, line 140, in send_message
return _make_request(token, method_url, params=payload, method=’post’)
File “/usr/lib/python2.7/site-packages/telebot/apihelper.py”, line 56, in _make_request
return _check_result(method_name, result)[‘result’]
File “/usr/lib/python2.7/site-packages/telebot/apihelper.py”, line 75, in _check_result
raise ApiException(msg, method_name, result)
telebot.apihelper.ApiException: A request to the Telegram API was unsuccessful. The server returned HTTP 400 Bad Request. Response body:
[{“ok”:false,”error_code”:400,”description”:”Bad Request: can’t parse entities: Unmatched end tag at byte offset 29, expected \”\”, found\”\””}]
“description”:”Bad Request: can’t parse entities: Unmatched end tag at byte offset 29 Deve ter alguma carácter errado, ou código.
Boa tarde,
Minha estrutura esta funcionando tudo certinho. Porém, só estou recebendo as notificações com o problema. Quando o problema esta normalizado não estou recebendo notificação de normalização do problema.
O que pode estar acontecendo?
Possivelmente esta parte faltou algo [IMAGEM]
Deu certinho aqui, show!
As mensagens executadas pelo terminal, chegam normalmente no grupo, mas quando envio pela ação criada, não chegam.
Nos logs do zabbix em reports, aparecem como enviados.
Veja se deu as permissões certas.
Ao colocar as informações no navegador seguido do Token, aparece apenas isso na página, o ID do chat não vem.
ok true
result []
Quanto tento ocorre isso abaixo
root@mbmzabbix:~# telegram “-313693214” “Mensagem via Terminal para o grupo”
usage: telegram [-ynsr] user [ttyname] [message…]
O script telegram q criamos nao da alerta de:
usage: telegram [-ynsr] user [ttyname] [message…]
Vc deve ter instalado outra coisa ai (provalemente o pacote do telegram)
Não achei o ‘incidente suprimido’ nas opções, onde eu posso adicionar a condição?