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çãoTipos de mídiasCriar tipo de mídia

Nome: Telegram
Tipo: Script
Nome script: telegram
Parâmetros do script
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}

Ativo: Sim

AdministraçãoUsuá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çõesAçõesCriar ação

De um nome para sua ação
Nova condição: Incidente suprimidoNã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 quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!

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/

Rudimar Remontti

Trabalho atualmente como Gerente de Redes em um Provedor de Internet no Rio Grande do Sul.

Você pode gostar...

62 Resultados

  1. Nelson Jhone disse:

    parabens pelo tutorial, teve pequenas mudanças na interface do zabbix 6.2, mas, nada que pequenos ajustes não resolvam.

  2. Andressa disse:

    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.

  3. Igor disse:

    Muito obrigado Rudimar, funcionou perfeitamente no zabbix 4.2 Ubuntu parabéns pelo tutorial muito completo salvou minha vida aqui rsrs.

  4. Daniel Schaeffer disse:

    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?

  5. Marcio disse:

    Quando chego nessa parte, nada acontece. Nem erro
    O que pode ser??

    # telegram “999999999” “Mensagem via Terminal para privado”

  6. bruno wanderson disse:

    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?

  7. Eder Pardeiro disse:

    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?

    • Giullio Vinicius disse:

      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!

  8. welington miranda disse:

    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

  9. Eder disse:

    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?

  10. Igor disse:

    Boa tarde, Meu caro!

    Obrigado por ter compartilhado! Me ajudou!

    Abraços.

  11. robert disse:

    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?

  12. Jamerson Lima disse:

    Muito obrigado por compartilhar conhecimento meu amigo! Implementei em um ambiente aqui show de bola funcionando liso !

  13. Fábio disse:

    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

  14. Francisco Jhonatan Sales . disse:

    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?

  15. Daniel Almeida disse:

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

  16. Edivaldo Junior disse:

    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.

  17. Breno disse:

    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?

  18. Quando executo pelo terminal para fazer o teste no grupo ou chat não recebo as mensagens o que pode ter errado ?

  19. Ramon oliveira disse:

    Boa tarde estou recebendo o seguinte erro para enviar via terminal:
    /usr/bin/telegram: linha 8: curl: comando não encontrado

  20. Henrique Claus disse:

    Que fantástico meu amigo! Obrigado por compartilhar o conhecimento!
    Implementado e funcional no Ubuntu Server 18.04 + Zabbix 4.4.3

  21. Elmar Uliano disse:

    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?

  22. Parabéns, objetivo! ajudou estou sendo notificado.

  23. Diego disse:

    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?

  24. Miqueias Silva Martins disse:

    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.

  25. Nelson disse:

    muito bom, funcionou tranquilo aqui. valeu!!!

  26. Nathan disse:

    Parabéns pelo artigo, very nice!

  27. Itallo Pedrosa disse:

    Como inseri os emojis nas mensagens ??? de problema e correção

  28. Parabéns pelo artigo! Ficou muito bom, preciso e funcional.

  29. Fabiano disse:

    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.

  30. Michel Araujo Santos disse:

    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\”\””}]

  31. Michel Araujo Santos disse:

    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?

  32. Diego disse:

    Deu certinho aqui, show!

  33. Santiago disse:

    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.

  34. Santiago disse:

    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 []

  35. Christian Rosa disse:

    Quanto tento ocorre isso abaixo

    root@mbmzabbix:~# telegram “-313693214” “Mensagem via Terminal para o grupo”
    usage: telegram [-ynsr] user [ttyname] [message…]

  36. Ricardo Gonçalves disse:

    Não achei o ‘incidente suprimido’ nas opções, onde eu posso adicionar a condição?

  1. 25 de janeiro de 2020

    […] veja como fazer o mesmo no início do tutorial que já postei de como enviar alertas pelo zabbix, Zabbix 4.2 enviando alertas no Telegram via Bot (Debian 10), lá no ínico do tutorial explica como criar o bot, pegar o token e como descobrir o ID de um […]

  2. 10 de fevereiro de 2020

    […] pode gostar de integra-lo com o telegram: Zabbix 4 + Alertas no Telegram via Bot Instalação do Grafana e integrando com Zabbix […]

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *