Zabbix 4.0 + Alertas no Telegram via Bot
Existe um tutorial mais atualizado Zabbix 4.2 enviando alertas no Telegram via Bot (Debian 10)
Vamos aprender como receber os alertas do zabbix através do telegram.
Para instalação do Zabbix 4.0
Instalação do Zabbix 4.0 / 3.4 / 3.0 no Debian 9 Stretch com banco de dados MariaBD
Criando nosso bot
Abra APP do telegram e procure por @BotFather Comece uma uma conversa com ele.
Agora digite /newbot para criar um novo bot. Após o comando você vai dar um nome “Bot Legal RR”. Em seguida é necessário digitar o nome de login sendo obrigatório terminar com bot “legallrr_bot”. Você vai ter um retorno com token que vamos utilizar em seguida.
Nosso token para acessar a API HTTP:
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.
Agora vamos acessar a seguinte URL https://api.telegram.org/botTOKEN/getUpdates para descobrir o ID do usuário que enviou a mensagem.
Ex.: https://api.telegram.org/bot757396508:AAHpaoyVN-95maOCax1vDPDQBnSaZd9P5r0/getUpdates
{"ok":true,"result":[{"update_id":649208620, "message":{"message_id":2,"from":{<strong><font color="red">"id":221122111,"</font></strong>is_bot":false,"first_name":"Rudimar","last_name":"Remontti","username":"remontti","language_code":"pt-br"},"chat":{"id":201149282,"first_name":"Rudimar","last_name":"Remontti","username":"remontti","type":"private"},"date":1541210279,"text":<strong><font color="red">"Testando"</font></strong>}}]}
Você pode criar um grupo também e adicionar seu bot nele, após adiciona-lo envia uma mensagem como /teste para que possamos coletar o ID do grupo.
{"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":{<strong><font color="red">"id":-252697045</font></strong>,"title":"Grupo Legal","type":"group","all_members_are_administrators":true},"date":1541210975,"text":"<strong><font color="red">/teste</font></strong>","entities":[{"offset":0,"length":6,"type":"bot_command"}]}}]}
Note que o nome do grupo meu com um “–” no inicio 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
Ex.: https://api.telegram.org/bot757396508:AAHpaoyVN-95maOCax1vDPDQBnSaZd9P5r0/sendMessage?chat_id=-252697045&text=Minha%20Mensagem
https://api.telegram.org/bot757396508:AAHpaoyVN-95maOCax1vDPDQBnSaZd9P5r0/sendMessage?chat_id=221122111&text=Mensagem%20Direta
Vamos instalar o curl, 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 TOKEN="ALTERE-PELO-SEU-TOKEN" USER=$1 SUBJECT=$2 curl --silent --output /dev/null "https://api.telegram.org/bot$TOKEN/sendMessage?chat_id=$USER&text=$SUBJECT" 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
# telegram "-252697045" "Mensagem via Terminal para o grupo" # telegram "221122111" "Mensagem via Terminal para o grupo"
Integrando o Telegram com o Zabbix
Se você recebeu as mensagens agora vamos ao nosso zabbix.
Clique em: 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}
Ativo: Sim
Agora vá em: Administração ⇒ Usuários e sobre o usuário Admin
Com as opções do usuário aberto clique na aba Mídia e em Adicionar
Tipo: Telegram
Enviar para: ID-Do-Grupo/ID-Usuário
Adicionar
Atualizar
Agora vamos criar a ação que fará o envios dos alertas.
Menu: Configurações ⇒ Ações ⇒ Criar ação
De um nome para sua ação
Nome: Reportar Problema no Telegram
Crie uma no Nova condição: Incidente suprimido
Na aba Operações
Assunto padrão:
❌ {HOST.NAME} • {TRIGGER.NAME} = {ITEM.NAME1} {ITEM.VALUE1}
Operação: 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 a mesma coisa na aba Operações de recuperação
Mas com o Assunto padrão:
✅ {HOST.NAME} • {TRIGGER.NAME} = {ITEM.NAME1} {ITEM.VALUE1}
Pode clicar agora em Adicionar
Pronto! Agora precisamos gerar um incidente para ver se nosso alerta será enviado para o Telegram.
No meu caso vou fazer uma edição /etc/bind/named.conf.options qual possuo um template que criei onde ele verifica a cada modificação no arquivo e me envia um alerta vfs.file.cksum[/etc/bind/named.conf.options].diff(0)}>0
Bingo! Tudo certo, nosso sistema de envio de mensagem está concluído!
Gostou? Deixe seu comentário ficarei feliz em saber que lhe ajudei, e se tiver qualquer pergunta deixe-a também, se preferir acesse o menu Contato lá você encontra meios de falar comigo!
Abraço!
Fontes: https://core.telegram.org/bots & https://www.zabbix.com/documentation/
Pra mim não aparece a opção Incidente Suprimido….
Todos os testes foram realizados com sucesso, porém quanto testo reiniciando um servidor para ver se notifica, não acontece nada.
Poderia nos auxiliar?
Poderia ensinar como enviar os alertas para o grupo ? Ssei que é só colocar o token do grupo.Mas não sei como obter esse token.
o token você deve adicionar o bot IDboot no teu grupo e executar o comando /getgroupid@myidbot que o bot te falará o ID do seu grupo
Muito obrigado!
Parabéns Rudimar! Grande contrib, funcionando perfeito desde a primeira instalação.
Se eu puder abrir uma NFR seria essa = https://github.com/ableev/Zabbix-in-Telegram/wiki/Trigger-severity-as-Emoji
Feliz Ano Novo.
Show de bola.
Obrigado por compartilhar!
Cara muito grato, fiz o passo a passo aqui deu tudo certo..valeu
Parabéns, muito bom o material!
Bom tutorial.
Instalado com sucesso no Zabbix 4.4 CentOS 7
show de bola, deu certo, parabens
Prezado Rudimar,
Primeiramente parabéns e obrigado por este tutorial! Muito intuitivo e útil.
Implementei essa funcionalidade no meu ambiente e recebo as mensagens com sucesso. Porém, as mensagens carecem de algumas informações que julgamos serem essenciais (como nome do host, por exemplo).
Tem alguma forma de incluir essa info nas mensagens?
Obrigado!
Já existe um post mais atualizado: https://blog.remontti.com.br/3053
Posso aplicar na versão 4.0 tbm ?
Alguém conseguiu implantar na versão 4.2. Pra mim em ações não aparece “Crie uma no Nova condição: Incidente suprimido”
Já existe um post mais atualizado: https://blog.remontti.com.br/3053
Opa cara, como voce conseguiu colocar esses emoji de OK e de o X ?
Quando coloco isso no Zabbix ele da erro e nao me deixa colocar nem no subject nem na mensagem
gostariade saber tambem !!!!???
é so alterar o banco do zabbix para o collation utf8_bin, no caso a tabela actions do zabbix
Parabéns Cara, Excelente!
Me ajudou bastante.
Gostaria que o telegram enviasse os graficos dos incidentes, poderiam me auxiliar
Aí até consegue, mas teria que programar o bot.
Perfeito Parabéns novamente, apenas uma duvida chega apenas a “Assunto Padrão”, não é enviado a “Mensagem padrão, como seria para enviar a mesma
La na midia crie um tipo {ALERT.MESSAGE}, e no shell script inclua mais uma variável para receber esse valor.
Cara, como você incluiria no Shell para exibir o message?
Tested, but I have received only one message from zabbix. In the terminal test messages, all was fine, but when scripts where running, only one of many events has been received in my telegram client, regardless, the monitor says all messages has benn delivered. I will keep testing.
Thanks a lot for the tutorial. Best regards.
Try to decrease the size of your trigger text
Primeiramente parabéns pelo tutorial Rudimar.
Estou com um problema e gostaria de ajuda se possível.
Segui todo o tutorial e consegui enviar a mensagem através da linha de comando, porém quando a trigger é ativada, consta que a mensagem foi enviada, porém ele não envia de fato.
No log do script telegram não aparece nada, é como se o Zabbix não tivesse executando o script.
Quando faço o envio pela linha de comando aparece no log e mensagem é enviada normalmente.
Já confirmei o diretório, permissão de leitura, escrita, execução.
Novamente parabéns e agradeço caso possa ajudar.
Verifique na ação se as condições estão certas. (Já aconteceu comigo de ter q excluir a ação e criar novamente)
Obrigado pelo retorno Rudimar.
Refiz a ação exatamente como o tutorial, mas creio que seja algum problema de permissão do usuário zabbix.
Habilitei o uso do shell para o usuário zabbix e ele não envia mensagem pela linha de comando.
Já dei permissão no arquivo, inclui no sudoers (usuário e grupo) e mesmo usando “sudo telegram …” ele não executa o script.
Vou continuar tentando, alguma forma funcionará rs.
Novamente parabéns e obrigado pela atenção, abc.
Qlqr coisa chama no telegram.
Bom dia, amigo.
Estou com o mesmo problema que você e já tentei até as coisas que citou em seu reply.
Conseguiu encontrar uma solução?
Olá, tive o mesmo problema. Para resolver eu fui em Reports -> Action Log e verifiquei que o texto da minha trigger era muito grande. Fiz o teste executando o script com o texto da minha trigger e a mensagem não chegou, após isso diminui o tamanho do texto e a mensagem foi enviada com sucesso.
Acho que é uma limitação do telegram.
Boa tarde! Estou fazendo testes utilizando ubuntu server, quando executo o comando no terminal não aparece nenhuma falha, porém não chega a mensagem, alguma ideia do que pode ser? Grato!
Tenta verificar nos logs, deve ser algum detalhe “besta”
Quando dou o comando no terminal:
curl –silent –output /dev/null “https://api.telegram.org/bot711022803:AAE_qJvtVeogljhKsMqzYzNnB-WKGAdF04E/sendMessage?chat_id=-387922844&text=Mensagem via Terminal para o grupo”
A mensagem é enviado normalmente…
Mas quando dou o comando: telegram “-387922844” “Mensagem via Terminal para o grupo”
A mensagem não é enviada.
Amigo, boa tarde
Também apanhei nessa parte, corrigi a URL para:
curl –silent –output /dev/null “https://api.telegram.org/bot$TOKEN/sendMessage?chat_id=$USER&text=$SUBJECT”
nesse caso, voce tera que fazer o seguinte ttps://api.telegram.org/bot711022803:AAE_qJvtVeogljhKsMqzYzNnB-WKGAdF04E/sendMessage?chat_id=-387922844’&’text=Mensagem via Terminal para o grupo”
adicionar um ” entre o & da url assim como fiz acima
Olá, tudo bem? Apenas uma correção no texto, o print tá certo:
De: Crie uma no Nova condição: Incidente não suprimido
Para: Crie uma no Nova condição: “Incidente suprimido”
Excelente artigo, vlw!
Acertado! Valeu!
Excelente
Amigo parabéns pelo post ficou perfeito !!!
Boa tarde…
Funciona no CentOS ?
CentOS vai ser diferente.
Com CentOS Linux release 7.6.1810 ( core )
#!/bin/bash
TOKEN=”ALTERE-PELO-SEU-TOKEN”
USER=$1
SUBJECT=$2
curl -s -X POST https://api.telegram.org/bot$TOKEN/sendMessage -d chat_id=$USER -d text=”$SUBJECT” > /dev/null 2>&1
exit 0
Boa tarde, no CentOS envia apenas parte da mensagem,
Tutorial é voltado a distribuição Debian 😉
Olá esse tutorial ainda esta aberto? Segui ele, ate consigo mandar mensagem para o celular via comando, mas direto do Zabbix da erro com essa mensagem:
Não é possível executar o comando “/ usr / lib / zabbix / alertscripts / Telegram”: [2] Nenhum arquivo ou diretório
Dei todas as permissoes para o arquivo telegram mesmo assim nao vai
SHOW!… 100% … OBRIGADO POR COMPARTILHAR…
Amigo, estou com esse problema, sabe de algo que possa me ajudar ?
Traceback (most recent call last):
File “./telegram”, line 13, in
tb.send_message(DESTINATION,SUBJECT + ‘\n’ + MESSAGE)
File “/usr/local/lib/python2.7/dist-packages/telebot/__init__.py”, line 598, in send_message
reply_markup, parse_mode, disable_notification))
File “/usr/local/lib/python2.7/dist-packages/telebot/apihelper.py”, line 140, in send_message
return _make_request(token, method_url, params=payload, method=’post’)
File “/usr/local/lib/python2.7/dist-packages/telebot/apihelper.py”, line 54, in _make_request
timeout=(connect_timeout, read_timeout), proxies=proxy)
File “/usr/local/lib/python2.7/dist-packages/requests/sessions.py”, line 512, in request
resp = self.send(prep, **send_kwargs)
File “/usr/local/lib/python2.7/dist-packages/requests/sessions.py”, line 622, in send
r = adapter.send(request, **kwargs)
File “/usr/local/lib/python2.7/dist-packages/requests/adapters.py”, line 526, in send
raise ReadTimeout(e, request=request)
requests.exceptions.ReadTimeout: HTTPSConnectionPool(host=’api.telegram.org’, port=443): Read timed out. (read timeout=3.5)
Ou distribuição errada, ou não tem os pacotes necessários instalado.
Show Rudimar, obrigado por compartilhar conosco. Um grande abraço!