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

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

Ativo: Sim


Clique em: Adicionar

Agora vá em: AdministraçãoUsuá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çõesAçõesCriar 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/

Rudimar Remontti

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

Você pode gostar...

51 Resultados

  1. Maurício Casagrande disse:

    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?

  2. Thiago Amâncio disse:

    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.

  3. Fábio Cabrita disse:

    Muito obrigado!

  4. Jáder disse:

    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.

  5. Luis disse:

    Show de bola.
    Obrigado por compartilhar!

  6. joao disse:

    Cara muito grato, fiz o passo a passo aqui deu tudo certo..valeu

  7. Wesllen disse:

    Parabéns, muito bom o material!

  8. Alex Carvalho Silva disse:

    Bom tutorial.
    Instalado com sucesso no Zabbix 4.4 CentOS 7

  9. ediekes disse:

    show de bola, deu certo, parabens

  10. André Mandelli disse:

    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!

  11. Christian Rosa disse:

    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”

  12. Joao Santos disse:

    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

  13. Pytter Andrade disse:

    Parabéns Cara, Excelente!

    Me ajudou bastante.

  14. Daniel Castilho disse:

    Gostaria que o telegram enviasse os graficos dos incidentes, poderiam me auxiliar

  15. 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

  16. Enrique Galarza disse:

    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.

  17. Henrique disse:

    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)

      • Henrique disse:

        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.

    • Josué Bezerra disse:

      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.

  18. Victor Fonseca disse:

    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!

  19. Ledson disse:

    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.

    • Rodrigo disse:

      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”

    • Pigosso disse:

      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

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

  21. Eduardo Sousa disse:

    Amigo parabéns pelo post ficou perfeito !!!

  22. Israel Caruso disse:

    Boa tarde…
    Funciona no CentOS ?

  23. Janilson disse:

    SHOW!… 100% … OBRIGADO POR COMPARTILHAR…

  24. Jackson disse:

    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)

  25. Sérgio Lackmann disse:

    Show Rudimar, obrigado por compartilhar conosco. Um grande abraço!

Deixe um comentário

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