Zabbix com notificações pelo telegram

zabbix_telegram

Sobre

Zabbix é uma ferramenta de monitoramento de ativos computacionais, bastante robusta e expansível. Neste artigo será demonstrado como configurá-lo para enviar alertas através do telegram, que é um aplicativo de mensagens instantâneas disponível para Android, iOS, Windows Phone, OS X, Gnu/Linux e mais.

Será utilizado o telegram-cli, um software não oficial, escrito em C, que destina-se à criar uma interface de linha de comando para o telegram.

Ambiente

Este procedimento foi testado com servidor zabbix 2.2.x rodando no debian 7 (Wheezy) ou 8 (Jessie). Se você não estiver utilizando debian, visite a página do telegram-cli para obter instruções de quais bibliotecas instalar.

O commit utilizado foi o 3ced7bb, versão 1.3.1 do telegram-cli.

Dependências

Afim de sanar as dependências da compilação, abra um terminal e, como root, execute o comando:

Instale o pacote git, caso não o tenha.

Baixar e compilar

A saída será parecida com esta:

Configurando

Copiando e criando os arquivos necessários.

Crie o arquivo telegram.config com o seguinte conteúdo:

Execute o telegram-cli. Você será redirecionado para o console da ferramenta, indicado por um “>” no início de cada linha.

Pode-se digitar help para ver todos os comandos disponíveis.

Neste momento é necessário aguardar até que o texto phone number apareça. Quando isso ocorrer, digite o número de telefone que está cadastrado no telegram, no formato +55 (prefixo para o Brasil) seguido do DDD e número. Exemplo:

Um detalhe interessante: o código também pode ser recebido pelo aplicativo instalado no celular e na versão para desktop, bastando ter um deles instalado e aberto.

Execute os comandos contact_list e dialog_list para que o telegram-cli carregue sua lista de contatos e as conversas atuais.

Caso você queira que o zabbix envie a mensagem para um determinado usuário, execute user_info seguido do nome do contato conforme está na sua agenda. Se, por outro lado, você quiser enviar para um grupo, execute chat_info seguido do nome do grupo. Observe que a tecla TAB pode ser utilizada para autocompletar as palavras.

Exemplos:

Nota: nos nomes de contatos e grupos, espaços são transformados em underscore (_), cerquilhas (#) em arrobas (@) e contatos com mesmo nome tem um #1 acrescentado ao nome (exemplo: Gnu#1, Gnu#2).

Perceba que na quarta linha de cada exemplo é exibido o código do usuário ou grupo, 1234567 nestes casos. Guarde este número, ele será utilizado mais a frente, na interface do Zabbix.

Agora o telegram-cli está configurado para utilizar a sua conta. Podemos sair do console dele digitando safe_quit.

Integrando ao zabbix

Para enviar uma mensagem, é necessário iniciar o binário telegram-cli, esperar que ele conecte à rede e envie a mensagem. Nos meus testes isso levou cerca de 7-10 segundos. Utilizo há cerca de três meses e funciona bem nos ambientes que tenho, inclusive o envio simultâneo de mensagens.

Para fazer este processo, criaremos um script em /usr/src/tg/zabbix/telegram_standalone.sh com o seguinte conteúdo:

Usando o comando chmod +x telegram_standalone.sh, aplique permissões de execução ao script.

Altere o dono do diretório do telegram-cli e atribua um shell ao usuário zabbix:

 

Inclua uma linha com o texto AlertScriptsPath=/usr/src/tg/zabbix/ no arquivo de configuração do servidor zabbix (e.g. /etc/zabbix/zabbix_server.conf). Após isso, reinicie o servidor.

Na interface web do Zabbix, vá em Administração -> Tipos de mídia. Na lateral direita, clique no botão Criar tipo de mídia e preencha conforme a imagem.

tipos_de_midia

Agora vá em Administração -> Usuários, selecione o usuário que receberá as notificações via telegram, clique na aba Mídia e, por fim, clique em adicionar. Preencha de forma parecida com a da imagem.

tipos_de_midia_usuario

Repare que no campo Enviar para é utilizado o código que obtemos anteriormente, precedido do texto user# para usuários ou chat# para grupos.

Está feito. Para testar você pode criar uma trigger do tipo {Zabbix server:agent.ping.last(0)}=1 e marcar a opção Geração de múltiplos eventos de INCIDENTE.

Muito obrigado ao Vitaly Valtman pelo belo software e por ceder parte do seu tempo ao esclarecimento de dúvidas.

Referência

https://github.com/vysheng/tg/blob/master/README.md

Histórico

  • 03/05/2015 versão inicial
  • 11/05/2015 adicionada a dica do @GabRF de como enviar os alertas para um grupo
  • 14/05/2015 adicionado mais detalhes sobre o envio para grupos
  • 20/05/2015 atualizado da versão 1.2.0 (commit) para a versão 1.3.1 (commit) do telegram-cli

 

 

 

32 thoughts on “Zabbix com notificações pelo telegram

  1. Bom dia, usei o telegram em ambiente de monitoramento zabbix onde trabalhei anteriormente, agora trabalho em ambiente predominantemente windows (ARRRRGGGHHH), mas fazer o quê?? Ate aparecer outra coisa…É possível usar o telegram para me enviar alertas de monitoramento de algum software no meu servidor windows?

    Agradeço imensamente!!

  2. Olá, boa tarde. quando chego no passo de executar o telegran.cli ele da a mensagem abaixo e não entra no console para testes. podem me ajudar?

    Comando executado: ./telegram-cli –rsa-key tg-server.pub –config telegram.config

    “for use in the OpenSSL Toolkit. (http://www.openssl.org/)

    telegram-cli: tgl/mtproto-utils.c:101: BN2ull: Assertion 0' failed.
    SIGNAL received
    htelegram-cli(print_backtrace+0x27)[0x80a9817]
    telegram-cli(termination_signal_handler+0x81)[0x80a98b1]
    linux-gate.so.1(__kernel_sigreturn+0x0)[0xb7725d1c]
    linux-gate.so.1(__kernel_vsyscall+0x10)[0xb7725d40]
    /lib/i386-linux-gnu/i686/cmov/libc.so.6(gsignal+0x47)[0xb71e9367]
    /lib/i386-linux-gnu/i686/cmov/libc.so.6(abort+0x143)[0xb71eaa23]
    /lib/i386-linux-gnu/i686/cmov/libc.so.6(+0x276c7)[0xb71e26c7]
    /lib/i386-linux-gnu/i686/cmov/libc.so.6(+0x27777)[0xb71e2777]
    telegram-cli[0x80f5a7e]
    telegram-cli[0x80ca212]
    telegram-cli[0x80cd672]
    telegram-cli[0x80f4bd3]
    /usr/lib/i386-linux-gnu/libevent-2.0.so.5(event_base_loop+0x73d)[0xb76c636d]
    telegram-cli(net_loop+0xac)[0x80aadbc]
    telegram-cli(loop+0x196)[0x80ac086]
    telegram-cli(inner_main+0x17)[0x80a8da7]
    telegram-cli(main+0x2f0)[0x80a7f10]
    /lib/i386-linux-gnu/i686/cmov/libc.so.6(__libc_start_main+0xf3)[0xb71d4a63]
    telegram-cli[0x80a801d]
    root@SRV-TESTE:/usr/src/tg/zabbix# clear
    root@SRV-TESTE:/usr/src/tg/zabbix# telegram-cli --config /etc/telegram.conf --rsa-key /usr/local/telegram-cli/keys/tg-server.pubcd /usr/src
    change_user_group: can't find the user telegramd to switch to
    Telegram-cli version 1.4.1, Copyright (C) 2013-2015 Vitaly Valtman
    Telegram-cli comes with ABSOLUTELY NO WARRANTY; for details type
    show_license’.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type show_license' for details.
    Telegram-cli uses libtgl version 2.1.0
    Telegram-cli includes software developed by the OpenSSL Project
    for use in the OpenSSL Toolkit. (http://www.openssl.org/)
    telegram-cli: tgl/mtproto-utils.c:101: BN2ull: Assertion
    0′ failed.
    SIGNAL received
    htelegram-cli(print_backtrace+0x27)[0x80a9817]
    telegram-cli(termination_signal_handler+0x81)[0x80a98b1]
    linux-gate.so.1(__kernel_sigreturn+0x0)[0xb7783d1c]
    linux-gate.so.1(__kernel_vsyscall+0x10)[0xb7783d40]
    /lib/i386-linux-gnu/i686/cmov/libc.so.6(gsignal+0x47)[0xb7247367]
    /lib/i386-linux-gnu/i686/cmov/libc.so.6(abort+0x143)[0xb7248a23]
    /lib/i386-linux-gnu/i686/cmov/libc.so.6(+0x276c7)[0xb72406c7]
    /lib/i386-linux-gnu/i686/cmov/libc.so.6(+0x27777)[0xb7240777]
    telegram-cli[0x80f5a7e]
    telegram-cli[0x80ca212]
    telegram-cli[0x80cd672]
    telegram-cli[0x80f4bd3]
    /usr/lib/i386-linux-gnu/libevent-2.0.so.5(event_base_loop+0x73d)[0xb772436d]
    telegram-cli(net_loop+0xac)[0x80aadbc]
    telegram-cli(loop+0x196)[0x80ac086]
    telegram-cli(inner_main+0x17)[0x80a8da7]
    telegram-cli(main+0x2f0)[0x80a7f10]
    /lib/i386-linux-gnu/i686/cmov/libc.so.6(__libc_start_main+0xf3)[0xb7232a63]
    telegram-cli[0x80a801d]

    Após volta para o console normal.

    1. Verifique se a pasta zabbix que você criou está nesse diretório, se não tiver mude essa linha no telegram.config para a pasta certa que vc criou, tive o mesmo problema e era isso. config_directory = “/usr/src/tg/zabbix/” , no meu caso estava em “/root/tg/zabbix”.

  3. Pessoal,

    tentei rodar o script e o erro que me apareceu foi o seguinte:

    ./telegram.sh user#195555073 “teste as $(date)”
    Telegram-cli version 1.4.1, Copyright (C) 2013-2015 Vitaly Valtman
    Telegram-cli comes with ABSOLUTELY NO WARRANTY; for details type show_license'.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type
    show_license’ for details.
    Telegram-cli uses libtgl version 2.1.0
    Telegram-cli includes software developed by the OpenSSL Project
    for use in the OpenSSL Toolkit. (http://www.openssl.org/)
    Can not read config ‘telegram.config’: error ‘file I/O error’ on the line 0

    Algum help?

  4. Olá, o meu script não executa, aparece uma mensagem de “Timeout in execute shell scrip”
    possuo outros scripts e funcionam perfeitamente.

  5. Tive problemas para fazer a instalação.

    Telegram-cli version 1.4.1, Copyright (C) 2013-2015 Vitaly Valtman
    Telegram-cli comes with ABSOLUTELY NO WARRANTY; for details type show_license'.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type
    show_license’ for details.
    Telegram-cli uses libtgl version 2.1.0
    Telegram-cli includes software developed by the OpenSSL Project
    for use in the OpenSSL Toolkit. (http://www.openssl.org/)
    I: config dir=[/home/a/.telegram-cli]

    telegram-cli: tgl/mtproto-utils.c:101: BN2ull: Assertion `0′ failed.
    SIGNAL received
    hbin/telegram-cli(print_backtrace+0x32)[0x80a9882]
    bin/telegram-cli(termination_signal_handler+0x81)[0x80a9931]
    [0xb76ffbc4]
    [0xb76ffbe8]
    /lib/i386-linux-gnu/libc.so.6(gsignal+0x47)[0xb7249057]
    /lib/i386-linux-gnu/libc.so.6(abort+0x149)[0xb724a699]
    /lib/i386-linux-gnu/libc.so.6(+0x250f7)[0xb72420f7]
    /lib/i386-linux-gnu/libc.so.6(+0x2517b)[0xb724217b]
    bin/telegram-cli[0x80f605e]
    bin/telegram-cli[0x80cb1b2]
    bin/telegram-cli[0x80cde22]
    bin/telegram-cli[0x80f5172]
    /usr/lib/i386-linux-gnu/libevent-2.0.so.5(event_base_loop+0x73d)[0xb76a2a5d]
    bin/telegram-cli(net_loop+0xbc)[0x80aaefc]
    bin/telegram-cli(loop+0x196)[0x80ac286]
    bin/telegram-cli(inner_main+0x17)[0x80a8de7]
    bin/telegram-cli(main+0x30b)[0x80a7f1b]
    /lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xde)[0xb723572e]
    bin/telegram-cli[0x80a803d]

    A solução foi comentar a linha no arquivo mtproto-utils.c a linha 101.

    antes de compilar

    Caminho
    /tg/tgl/mtproto-utils.c

    Antes

    assert (0); // As long as nobody ever uses this code, assume it is broken.

    Depois

    /assert (0); // As long as nobody ever uses this code, assume it is broken./

    1. Tobias, quando executo o script , pede o numero do tel , assim que informo chega pra mim um codigo no celular mas nao envia a mensagem retorna a mensagem
      telegram-cli: loop.c:480: write_auth_file: Assertion `auth_file_fd >= 0′ failed.
      SIGNAL received

  6. Boa noite,

    Consigo usar meu nuemero do telegram ai e enviar alertas pra mim mesmo no meu celular?

  7. Boa noite
    Eu consigo enviar mensagens pra mim mesmo tipo cadastro meu numero ai e assim q tiver um evento ele envia pro meu telegram de mesmo numero no celular?

  8. Tobias corrige seu tutorial! Nele você ensina a criar o script telegram_standalone.sh mas dentro do zabbix vc descreve telegram.sh
    Por isso está dando o erro de arquivo ou diretório inválido, pois o zabbix busca dentro da pasta um arquivo que não existe.

  9. Tutorial nota 10000

    Tenho só uma observação… Na imagem de exemplo esta escrito para chamar o script telegram.sh mas no tutorial o script que foi criado se chama telegram_standalone.sh.

    Penei um pouco mas consegui verificar pelo debug, agora funcionando 100%

    Obrigado por compartilhar!

  10. Tobia,

    Antes de mais nada, parabéns pelo tutoria/artigo. Realmente muito didático.

    Em algo eu devo ter errado, certamente. Segui suas orientações quando ao DEBUG (porque a ação na trigger apresenta “Falhou) e e ao monitorar o log eu me deparo com o que parecer ser o envio correto da mensagem:

    49882: 1022:20151210:175153.102 In zbx_popen() command:’/usr/src/tg/zabbix/telegram_standalone.sh “user#XXXXXXXX” “PROBLEM: Zabbix server has just been restarted” “Trigger: Zabbix server has just been restarted

    Porém a mensagem não chega para mim.

    Se já tiver passado por isso ou visto problema parecido e puder me orientar eu agradeço.

    1. Felizmente descobri após tentar enviar a mensagem manualmente pelo script.

      O Telegram pediu para me registrar novamente e feito isso as notificações começaram a chegar.

  11. Tobias boa noite
    fiz o usermode -shell… em todas as pasta e agora estou recebendo as notificacoes no celular
    obrigado mais uma vez pela dica Valeu !!!!!!

  12. Bom dia, Gostei muito do Tutorial, segui a risca, consigo enviar mensagens tanto pelo usuário zabbix como pelo usuário root, utilizando tanto o telegram-cli quanto pelo script telegram_standalone.sh, cadastrei direitinho a mídia no usuário, porém não recebo nenhum alerta pelo telegram.
    ja reiniciei o servidor e tudo mais.
    Estou fazendo a configuração em um servidor Ubuntu server 14.04

    Se puderem me auxiliar, ficaria muito grato.

  13. Caro Tobias,

    Consegui resolver.

    O problema era o selinux ativado…O nosso padrão aqui é ativado, mas achei que estava configurado de forma a permitir…

    Forte abraço e obrigado pela ajuda.

    P.S: O TG atualizou e no Centos está pedindo uma lib nova…

    Att

  14. Tobias,

    Seguem:

    1) bash-4.1$ ls -lha telegram5.sh
    -rwxrwxrwx. 1 zabbix zabbix 506 Mai 16 17:01 telegram5.sh

    2) Já havia feito, não alterou…

    3) Está sim, com $ no final de cada linha e nas linhas em branco – https://www.dropbox.com/s/d24yoze3bb4jcwj/Captura%20de%20tela%202015-05-16%2017.09.54.png?dl=0

    4) Está com “defalut” /etc/fstab – /dev/mapper/VolGroup-lv_root / ext4 defaults 1 1

    5.1) bash-4.1$ file telegram5.sh
    telegram5.sh: POSIX shell script text executable

    5.2) bash-4.1$ file /bin/bash
    /bin/bash: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped

    5.3) bash-4.1$ ls –la telegram5.sh
    ls: impossível acessar –la: Arquivo ou diretório não encontrado
    telegram5.sh
    ———
    bash-4.1$ ls -lha telegram5.sh
    -rwxrwxrwx. 1 zabbix zabbix 506 Mai 16 17:01 telegram5.sh

    5.4) bash-4.1$ echo $SHELL
    /bin/bash

    Dei permissão 777 para o telegram-cli e o script (telegram5.sh) para teste….. Não rolou.

    Obrigado mais uma vez.

  15. Caro Tobias.

    Segui 100% o tutorial em 2 servidores e em ambos consigo até me comunicar com o Telegram CLI, mas o zabbix não envia a mensagem.

    No dashboard aparecem os alertas, mas a mensagem no telegram não chega….

    Ficou também a dúvida de como descobrir o chat#.

    Abraços e parabéns pelo trabalho.

    1. Olá Rodrigo.

      Você atribuiu permissão para o usuário do zabbix no diretório onde você baixou o telegram-cli ? No texto, é o trecho:
      # chown -R zabbix: /usr/src/tg/
      # usermod --shell /bin/bash zabbix

      Caso tenha feito isso e continue sem conseguir enviar as mensagens, entre no shell do servidor, com o usuário do zabbix, vá até o diretório onde está o script telegram_standalone.sh e execute-o. Exemplo:
      ./telegram_standalone.sh user#12345687 "teste as $(date)"

      Adicionei mais informações na seção “Configurando”, sobre como obter o id de um grupo.

      1. Caro Tobias.

        Sim, consigo enviar mensagens para usuários e grupos através do CLI. Tanto como root, quanto como “zabbix”.

        No dashboard do zabbix alerta a trigger, mas não recebo a mensagem no grupo que configurei…Já tentei com usuário também…

        Criei a mídia certinho, criei a trigger e configurei o usuário (um com chat# e outro com user#)…

        Não recebo o alerta….Muito estranho.

        1. Rodrigo, em “Monitoramento” -> “Eventos”, o que aparece na coluna “Ações” das triggers que você está testando? Caso seja “falhou”, faça o seguinte:

          * No arquivo de configuração do servidor, altere o DebugLevel para 4 e reinicie o servidor.
          * Monitore o log com “tailf /var/log/zabbix-server/zabbix_server.log | tee /tmp/telegram_debug.log | grep -ni telegram”
          * Analise a saída do comando acima. Se o script for executado corretamente você verá algo do tipo:

          [...]
          1814: 2472:20150515:215823.937 In zbx_popen() command:'/usr/src/tg/zabbix//telegram_standalone.sh "user#1234567" "PROBLEM: trigger teste no debian8" "Trigger: trigger teste no debian8
          2399: 2472:20150515:215831.118 telegram_standalone.sh output:
          2400:Telegram-cli version 1.2.0, Copyright (C) 2013-2015 Vitaly Valtman
          2401:Telegram-cli comes with ABSOLUTELY NO WARRANTY; for details type `show_license'.
          2404:Telegram-cli uses libtgl version 1.2.0
          2412:User Telegram updated photo
          [...]

          Agora veja um exemplo para uma saída de erro, neste caso o diretorio /usr/src/tg/zabbix não existia:

          1805: 2472:20150515:215646.476 query [txnlev:0] [update alerts set retries=2,error='/usr/src/tg/zabbix//telegram_standalone.sh: [2] No such file or directory' where alertid=72]

          Neste exemplo é possível entender o problema apenas vendo esta linha, mas caso o seu seja diferente, repare que no início da linha há o número 1805, que refere-se à linha 1805 no arquivo /tmp/telegram_debug.log. Abra-o e vá até a linha (no vim é :1805), veja os registros gravados pouco antes e depois deste.

          Depois de realizar o processo, altere novamente o DebugLevel para o valor anterior (o padrão é 3) e reinicie o servidor.

          Deixe-me saber o que ocorrerá.

          1. Tobias,

            Agradeço muito a atenção dada aos questionamentos. Felizmente, conseguimos uma luz com o debug. Eu havia colocado o debug em modo 4, mas não descomentei a linha (loucura)…

            Agora apareceu o motivo.
            12407: 30880:20150516:151022.118 telegram5.sh output:
            12408:sh: /usr/lib/zabbix/alertscripts//telegram5.sh: /bin/bash: bad interpreter: Permissão negada

            Passwd: zabbix:x:498:498:Zabbix Monitoring System:/usr/share/zabbix:/bin/bash
            Centos 6.5

            Estou à procura de como resolver, não parece dificil….algo relacionado com a bash do user zabbix (eu consigo executar o script com o usuario zabbix).

            1. Rodrigo, no momento não tenho um host com CentOS 6.5 para testar. Tente cada uma das opções se a anterior a ela não funcionar:
              * chmod +x nome_do_script.sh
              * altere o /bin/bash para /bin/sh no inicio do script
              * abra o script no vim, execute :set list e veja se apenas um $ aparecerá no final de cada linha. Caso apareça outra coisa, veja aqui http://peczenyj.blogspot.com.br/2007/07/resolvendo-problemas-comuns-2-bad.html
              * verifique se a partição onde o script está foi montado com permissões de execução
              * poste aqui o resultado dos comandos (execute todos com o usuario zabbix): file nome_do_script.sh; file /bin/bash; ls –la nome_do_script.sh; echo $SHELL

              1. Tobias,

                Seguem:

                1) bash-4.1$ ls -lha telegram5.sh
                -rwxrwxrwx. 1 zabbix zabbix 506 Mai 16 17:01 telegram5.sh

                2) Já havia feito, não alterou…

                3) Está sim, com $ no final de cada linha e nas linhas em branco – https://www.dropbox.com/s/d24yoze3bb4jcwj/Captura%20de%20tela%202015-05-16%2017.09.54.png?dl=0

                4) Está com “defalut” /etc/fstab – /dev/mapper/VolGroup-lv_root / ext4 defaults 1 1

                5.1) bash-4.1$ file telegram5.sh
                telegram5.sh: POSIX shell script text executable

                5.2) bash-4.1$ file /bin/bash
                /bin/bash: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped

                5.3) bash-4.1$ ls –la telegram5.sh
                ls: impossível acessar –la: Arquivo ou diretório não encontrado
                telegram5.sh
                ———
                bash-4.1$ ls -lha telegram5.sh
                -rwxrwxrwx. 1 zabbix zabbix 506 Mai 16 17:01 telegram5.sh

                5.4) bash-4.1$ echo $SHELL
                /bin/bash

                Dei permissão 777 para o telegram-cli e o script (telegram5.sh) para teste….. Não rolou.

                Obrigado mais uma vez.

                1. Rodrigo bom dia
                  Executa o script no servidor direto na pasta e ele vai pedir para vc configurar o telefone e os dados novamente, depois vc reinicia o servidor e o mesmo vai enviar a mensagem.

      2. Tobias boa noite
        obrigado pelo tutorial, você me ajudou muito, porem ainda nao consigo disparar o alerta pelo zabbix
        obs quando eu uso o usermod –shell /bin/bash zabbix ele meu retorna
        usermod : nenhuma mudança

Deixe uma resposta