Neste artigo vamos abordar uma configuração muito útil, a utilização do monitoramento de mensagens da ferramenta Zabbix através do Telegram. Com esta configuração você será capaz de personalizar suas mensagens e visualiza-las a partir de seu aplicativo de mensagens, otimizando assim o tempo de respostas para incidentes.
CONSIDERAÇÕES
Vamos levar em consideração que você já possua um ambiente com o Zabbix instalado e rodando normalmente. Caso queria aprender como instalar a ferramenta Zabbix no Linux, confira o artigo “Instalando Servidor Zabbix”. Também é necessário que você seja capaz de criar um bot pelo aplicativo Telegram. Caso queira aprender como criar um bot, confira nosso artigo “Configurando Telegram Bot”. Para este artigo estamos utilizando a distribuição Debian 8.8., mas você pode utilizar sua distro de preferência.
1) INSTALANDO PACOTES.
Para realizarmos a integração de nosso bot Telegram com a ferramenta Zabbix é necessário a instalação do pacote “python-pip“. Realize a instalação conforme ilustrado abaixo.
apt-get install python-pip
Agora a partir do python, vamos instalar a API do Telegram.
pip install pyTelegramBotAPI
2) CONFIGURANDO SCRIPT.
Com os pacotes instalados, vamos criar um script que fará interação com nosso Telegram Bot. Para isso, crie um arquivo em “/usr/local/share/zabbix/alertscripts” chamado “telegram.sh“, e com seu editor de texto de preferência, adicione o conteúdo conforme ilustrado abaixo.
vi /usr/local/share/zabbix/alertscripts/telegram.sh
#!/usr/bin/env python import telebot,sys BOT_TOKEN='121455441:EEASDa4DjfSjnSv7-g_nHaTrbaKdRggf3l4I' DESTINATION=sys.argv[1] SUBJECT=sys.argv[2] MESSAGE=sys.argv[3] MESSAGE = MESSAGE.replace('/n','\n') tb = telebot.TeleBot(BOT_TOKEN) tb.send_message(DESTINATION,SUBJECT + '\n' + MESSAGE)
A variável do “BOT_TOKEN” deve ser substituída pelo token do seu bot criado. Realize a alteração salve e saia da edição do arquivo. De permissão de execução ao arquivo “telegram.sh” e adicione o usuário “zabbix” como dono do arquivo, conforme ilustrado abaixo.
chmod +x telegram.sh chown -R zabbix telegram.sh
3) ADICIONANDO BOT AO GRUPO DE MONITORAMENTO.
Para que possamos usufruir do monitoramento entre equipes, precisamos criar um grupo no aplicativo Telegram, Ex: “Monitoramento Zabbix”. Realize a criação do grupo e adicione seu bot a ele.
Precisamos agora enviar uma mensagem para o bot a partir do grupo. Isso é importante, pois através da interação com o bot, conseguiremos pegar o ID do grupo que será utilizado nas configurações do Zabbix. Envie uma mensagem para o bot a partir do grupo criado conforme ilustrado abaixo.
/start@Jarbaszabbix_bot
Em seu navegador, vamos acessar as informações destinadas ao bot. Para isso, acesse o endereço ilustrado abaixo e substituindo a variável <BOT_TOKEN> pelo token do seu bot.
curl "https://api.telegram.org/bot<BOT_TOKEN>/getUpdates"
Você será capaz de visualizar algumas informações sobre seu bot, inclusive o ID do grupo no qual o mesmo pertence.
4) TESTANDO SCRIPT.
Com as devidas configurações realizadas, precisamos agora testar nosso script. Para isso, execute o mesmo a partir do shell, conforme ilustrado abaixo.
./telegram.sh <ID_USER> Teste Mensagem
A variável “ID_USER” deve ser substituída pelo ID do usuário disponibilizada no link executado no brower, conforme mencionado no passo 3. Se a execução do script for satisfatória, você verá em seu Telegram a mensagem “Teste Mensagem” enviada pelo bot.
5) ADICIONANDO SCRIPT AO ZABBIX.
Vamos realizar a integração de nosso script com a ferramenta Zabbix. Para isso acesse “Administração>Tipos de Mídias” é clique em “Criar tipo de mídia“. Feito isso, realize as configurações conforme ilustrado abaixo e em seguida clique em “Adicionar“.
Agora precisamos ir em “Administração>Usuários“, escolha o usuário, no nosso caso estamos utilizando o usuário Admin. Selecione “Mídia” e clique em “Adicionar“. Realize as configurações conforme ilustrado abaixo.
O Campo “Enviar para” deve ser substituído pelo ID do grupo de monitoramento no qual o bot pertence. Este ID pode ser encontrado pelo browser, através do link informado no passo 3. Realize a configuração e clique em “Adicionar“.
Por último, precisamos configurar nossas ações “Triggers“, no qual irão fornecer as informações necessárias através do script Telegram. Para isso, acesse “Configuração>Ações” e clique em “Criar ação“. Definas as configurações conforme ilustrado abaixo.
Também precisamos definir as operações. Acesse a opção “Operações” e clique no botão “Nova” localizado na parte inferior da tela, conforme ilustrado abaixo.
Defina o usuário, no nosso caso estamos utilizando o usuário Admin, e clique em “Adicionar“.
Feito isso, clique em “Adicionar” para finalizarmos a configuração da nova ação, conforme ilustrado abaixo.
Pronto, nossa ferramenta Zabbix já esta integrada com o Telegram.
CONCLUSÃO
Neste artigo foi abordado de maneira prática, a utilização do aplicativo Telegram para monitoramento de alertar emitidos pela ferramenta Zabbix.
Se você gostou deste post e através dele pude lhe ajudar, o que acha de aproximarmos nosso contato? Siga meu blog e me adicione no Linkedin, aproveite para classificar algumas das minhas competências/recomendações, este simples gesto faz toda a diferença.
Att,
Rafael Oliveira
SysAdmin
35 respostas
Olá Rafael, sim! Muito Obrigada. Esclareceu as minhas dúvidas e consegui por em prática tais situações. Um abraço e sucesso.
Que bom Laura, precisando só falar! Abr.
Boa tarde,
Simples e objetivo! Parabéns!!!
só um parentese..
Eu estava encontrando esse erro no envio da mensagem:
ValueError: Timeout value connect was (3.5, 9999), but it must be an int or float. (zabbix 3.4)
Solucionei atualizando API com esse comando
#sudo pip install pyTelegramBotAPI –upgrade
Boa tarde Diego! Obrigado, fico duplamente feliz rsrs, a primeira por poder ajudar de alguma forma, e a segunda por receber sua contribuição. Muito obrigado! Ela fica registrado aqui, assim se surgir alguém com problema semelhante já absorve a solução abordada por você. Abr.
Oi Rafael, sim me respondeu em partes!
Mas é preciso criar um novo bot ou posso criar grupos diferentes apenas? A minha ideia é manter o mesmo bot e criar outros grupos para inserir mídias diferentes no zabbix (Administração>Mídia). Seguindo essa lógica colocaria apenas o novo id do grupo no campo “Enviar para:”. Em resumo a ideia é enviar diferentes mensagens para diferentes pessoas. Se eu criar um novo bot eu terei que mudar o tokem no passo 2, no script, e não sei como fazer isto. Meu raciocínio está correto?
1) No app telegram você pode inserir o mesmo bot em quantos grupos quiser, este seria o primeiro passo.
2) Você pode adicionar várias “Mídias” ao usuário (Passo 3). Para cada mídia adicionada, você deve informar o grupo no qual o bot pertence. Desta forma você terá um único script atrelado a um único bot_token, porém membro de grupos diferentes.
Uma outra alternativa é criar bots diferentes utilizando scripts diferentes, exemplo: telegram1.sh, telegram2.sh etc… A regra é: Cada script representa um bot.
No meu caso só utilizo um único bot, não tive a necessidade de criar vários bots para vários grupos, dependendo do que quer monitorar parece interessante.
Espero desta vez ter conseguido responder! 🙂
Att.
Olá, ótimo tutorial.Eu posso criar um novo bot e add diferentes pessoas nogrupo?
O meu user id não vai alterar? é só refazer o passo 3 em diante?
Obrigada
Bom dia Laura!
Obrigado, fico feliz que tenha gostado. Respondendo sua pergunta, você pode criar quantos grupos e bots quiser, porém o que vai mandar é o BOT_TOKEN do script, cada bot tem um código bot_token diferente, assim como cada grupo possui um ID diferente também. O ID mencionado no artigo esta relacionado a identificação do grupo no qual deseja que o bot envie informações. Espero ter conseguido responder sua pergunta. Att.
Para quem esteja sendo apresentado o erro:
Traceback (most recent call last):
File “./telegram.sh”, line 8, in
MESSAGE=sys.argv[3]
IndexError: list index out of range
Ele ocorre devido a falta de informar o campo MESSAGE ao executar o script na mão.
Dará erro:
./telegram.sh Teste
Não dará erro:
./telegram.sh Teste Mensagem
Vlw Brunão! Obrigado pela contribuição…
eu estou com esse erro ainda
Fala Rafael Oliveira, boa tarde!
Estou encontrando este erro quando vou executar o script. Ja li e reli tudo e nao achei o erro.
root@zabbix:/usr/lib/zabbix/alertscripts# ./telegram 129452749 Teste Mensagem Traceback (most recent call last):
File “./telegram”, line 3, in
import telebot,sys
ImportError: No module named telebot
Fala Alex!
Desculpa a demora em responder. Se fez tudo certinho da uma olhada neste post aqui.
https://stackoverflow.com/questions/34360424/importerror-on-archlinux-arm
Pode ser que esteja relacionado com seu problema.
Depois da um feedback, Abr.
Amigo estou com o seguinte erro, pode me ajudar?
Traceback (most recent call last):
File “./telegram.sh”, line 8, in
MESSAGE=sys.argv[3]
IndexError: list index out of range
Bom dia Jose! Creio que esteja faltando passar informação do zabbix para o script, da um pente fino no artigo e verifique se existe algo errado ou diferente. O “IndexError” significa que o script está tentando acessar a posição do ponteiro “[3]” da lista, porém essa posição não existe, como se a lista de argumentos fosse menor, faltando passar o argumento da posição “sys.argv[3]”. Depois compartilha aqui o resultado, abr.
Por favor alguém pode me ajudar. Vou descrever o erro abaixo.
root@krauserXserver:/usr/local/share/zabbix/alertscripts# ./Telegram.sh 221172035 tst 443
Traceback (most recent call last):
File “./Telegram.sh”, line 13, in
tb.send_message(DESTINATION, SUBJECT + ‘\n’ + MESSAGE)
File “/usr/local/lib/python2.7/dist-packages/telebot/__init__.py”, line 470, in send_message
reply_markup, parse_mode, disable_notification))
File “/usr/local/lib/python2.7/dist-packages/telebot/apihelper.py”, line 135, 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 508, in request
resp = self.send(prep, **send_kwargs)
File “/usr/local/lib/python2.7/dist-packages/requests/sessions.py”, line 618, in send
r = adapter.send(request, **kwargs)
File “/usr/local/lib/python2.7/dist-packages/requests/adapters.py”, line 521, in send
raise ReadTimeout(e, request=request)
requests.exceptions.ReadTimeout: HTTPSConnectionPool(host=’api.telegram.org’, port=443): Read timed out. (read timeout=3.5)
Já tentei de tudo mas não consegui resolver
Bom dia Wellington, verifiquei seu erro, creio que esteja relacionado a versão do pacote “pyTelegramBotAPI” é interessantes verificar o github da biblioteca utilizada, desta forma é possível acompanhar os erros do pacote que poderão vir a existir, a versão que foi utilizada com sucesso na configuração deste artigo foi “3.1.0”. Abr.
Rafael, estou com esse mesmo erro.
Tem como colocar um tutorial de como resolver ?
Fala Jackson! Provavelmente o erro esta relacionado a versão do pyTelegramBotAPI.
#sudo pip install pyTelegramBotAPI –upgrade
Att,
Wellington Almeida, se você conseguiu resolver, tem como postar ??
Boa tarde, muito obrigado, muito em breve irei fazer.
Perfeito!!! Ajudou demais! Obrigado!!
Disponha! Precisando estamos ai.
Não tem para centos 7
Bom dia Andre! Eu criei como padrão utilizando Debian, pois é o sistema que mais trabalho. Se você domina o CentOS, conseguirá realizar as configurações sem problema. Só precisa entender as características e diferenças entre eles. Estou anotando aqui seu pedido, futuramente vou tentar montar para os dois ambientes. Abr. 😉
Gostaria tb de um tuto para o Centos 7, estou penando com esse erro.
Traceback (most recent call last):
File “/usr/lib/zabbix/alertscripts/telegram.py”, line 2, in
import telebot,sys
ImportError: No module named telebot
Não sei mais onde recorrer.
Fala Bruno, está na agenda aqui para montar o zabbix com base em Centos, assim que fizer público no site, cadastre seu email no site caso ainda não fez para acompanhar. Sobre o erro, parece que ele não encontrou o módulo do telebot. Assim que fizer verifico esse problema. Abr.