Em caso de dúvida, sugestão ou dificuldade junte-se a nós no Grupo do Telegram Gráfico no Email e Telegram.
O "How to" foi testado no ZABBIX 3.0 ao 7.0 no Debian 9 ao 11, Ubuntu 20 e 22 e CentOS/Oracle Linux/Rocky Linux/Redhat 8.0+, caso não utilize estas distros procure os pacotes descritos para sua necessidade.
- Requisitos
- Chave API WhatsApp
- Chave API Telegram
- Parametros do script
- Consultando informação
- Comando de teste
- Configuração do front
- Detalhes sobre o arquivo de configuração
- Conclusão
- Contribuições
- Agradecimentos
0 – Ter instalado Python 3.9 (ou superior)
1 – Estar logado como root
2 – Executar os seguintes comandos
Debian/Ubuntu
sudo apt-get install -y wget dos2unix git sudo curl bc
CentOS/Oracle Linux/Rocky Linux/Redhat+
sudo dnf install -y wget dos2unix git sudo curl bc gcc libffi-devel python3-devel openssl-devel libevent-devel
Faça o download do script de instalação
cd /tmp
wget https://raw.githubusercontent.com/sansaoipb/scripts/master/notificacoes.sh -O notificacoes.sh
sudo dos2unix notificacoes.sh
sudo bash notificacoes.sh
1 – Esse procedimento foi testado e validado no Ubuntu 22.04, para outras versões/distribuições faça por sua conta.
2 – Eu realizei a instalação pelo vagrant usando a imagem oficial da Ubuntu ( "ubuntu/jammy64" ).
Tentei instalar em uma máquina com o zabbix, e não deu certo, logo, melhor ter uma VM somente para ele ou debugar e entender porque não funcionou.
Depois de aprovisionar VM, realize a instalação OpenSource no Ubuntu 22.04, realize a execução do comando abaixo.
curl -sSL https://raw.githubusercontent.com/marcilioramos/alert_wpp_zabbix/main/config_ambiente.sh | bash
Depois de validar que o serviço está operacional, siga os proximos passos.
Caso o serviço não esteja OK, entre em contato no "grupo de ajuda" supracitado, para mais detalhes sobre a configuração, mas consulte o git do mantenedor e assista o video disponibilizado:
alert_wpp_zabbix
(@MarcilioMRTelecom)
Caso não queira ter a responsabilidade de manter a aplicação Open Source, existe esta opção e será necessário contratar o serviço, em conversa com o responsável consegui um desconto de 50%,
basta informar o cupom zabbix20S
.
Caso use somente o envio por WhatsApp, DESCONSIDERE OS PRÓXIMOS PASSOS, e vá direto para a configuração CLICANDO AQUI
Para iniciarmos, CLIQUE AQUI e faça o login usando sua conta para criar a chave API do Telegram:
Após o login aparecerá esta tela, faça o preenchimento da forma que preferir e clique em "Create application", após isso aparecerá os campos que precisamos, são eles:
o api_id e api_hash.
Criando 'Client App'
Para iniciarmos a configuração de envio, é preciso editar o arquivo de configuração e depois executar o script manualmente para efetivar o login, então entre no diretório “que o script indicou”
e edite os campos abaixo contidos no arquivo configScripts.properties
:
OBS:
1 – O usuário que você declarar no campo “user” precisa ter permissão no mínimo de leitura no ambiente.
2 – Os campos contidos em [PathSectionEmail], [PathSectionTelegram] e [PathSectionWhatsApp], são opcionais, logo se for usar somente telegram, não é necessário preencher a parte do email, assim como de forma inversa.
3 – Se usar gmail, é preciso alterar o acesso à conta para aplicativos, é necessário criar uma "Senha de app",
CRIE AQUI.
[PathSection]
- “url” = http://127.0.0.1/zabbix - URL de acesso ao FRONT com "http://"
- “user” = Admin
- “pass” = zabbix
[PathSectionEmail]
- “smtp_server” = smtp.gmail.com:587
- “mail_user” = SeuEmail@gmail.com
- “mail_pass” = SuaSenha
[PathSectionTelegram]
- “api.id” = 1234567
- “api.hash” = 12asdc64vfda19df165asdvf984dbf45
[PathSectionWhatsApp]
- “line” = 5511950287353
- “acess.key” = XGja6Sgtz0F01rbWNDTc
- “port” = 13008
- “open.source” = no
- “open.source.url” = http://127.0.0.1/api/SendGraph
- “open.source.token” = kjhasdfgyuiwqeoihbjasdc
OBS:
1 – Caso tenha interesse em usar um dos seguintes envios: WhatsApp PAGO, Email ou Teams (e NÃO VAI USAR o Telegram ou WhatsApp Open Source), DESCONSIDERE OS PRÓXIMOS PASSOS, CLICANDO AQUI
2 – [WHATSAPP] - Você pode pesquisar pelo nome, tanto do grupo como do usuário, mas o envio precisa ser feito pelo ID.
3 – [TELEGRAM] - Caso esteja usando conta invés de bot, terá a vantagem de usar este módulo de consulta,
se estiver usando bot, este comando só servirá para finalizarmos a vinculação do remetente.
Este comando, também trará a quantidade e as informações de todos os seus chats, como: Tipo, Nome, ID...
Mas somente para quem estiver USANDO CONTA. e não BOT
sudo -u zabbix ./notificacoes-teste.py --infoAll
3 – Ao executar o comando acima, será solicitado inserir o token do bot ou número de telefone da conta que será usada para envio,
se optar por usar BOT, cole o token, dê ENTER e
DESCONSIDERE OS PRÓXIMOS PASSOS, CLICANDO AQUI
4 – Se optar por usar CONTA, use a seguinte estrutura de telefone
5522988776655
(prefixo para o Brasil, DDD e número),
depois que der “Enter”, receberá um código por SMS e/ou no aplicativo
(no desktop, no celular ou na versão web, basta estar logado),
adicione o código e estará pronto.
Para consultar a configuração de um usuário, grupo ou canal específico, execute o comando abaixo:
Script info ID, Nome ou user.
Exs:
sudo -u zabbix ./notificacoes-teste.py --info "-123456789"
ou
sudo -u zabbix ./notificacoes-teste.py --info "Nome Sobrenome"
ou
sudo -u zabbix ./notificacoes-teste.py --info "usuário"
Pegue o “ID”, o “nome de cadastro” ou o "nome de registro" que aparecerá para executar o teste e posteriormente colocar no zabbix.
OBS:
1 – Lembrando novamente que o comando "info", NÃO FUNCIONA COM BOT do Telegram.
OBS:
0 – Para envio do WhatsApp, não é possivel o envio por nome, é SOMENTE POR "ID".
1 – "-123456789", "Nome Sobrenome" ou "usuário" são informações fictícias para exemplificar, busque um UserID ou nome de usuário válido no seu ambiente, se for grupo ou canal use prioritáriamente o "id";
2 – É recomendado aumentar o tempo de timeout da aplicação, então no arquivo de configuração do server.
(se não mudou o local padrão, estará aqui /etc/zabbix/zabbix_server.conf
ou aqui /usr/local/etc/zabbix_server.conf
)
vá até o paramemtro # Timeout=3
descomente e aumente para 30, ficando assim:
Timeout=30
dessa forma fica garantido a entrega.
3 – A estrutura de teste para o WhatsApp será (prefixo para o Brasil, DDD e número): 5522988776655
;
Para Telegram será: prioritariamente por ID (podendo usar também: 'Nome Sobrenome' ou '@usuário' se não estiver usando bot);
Para Email será: usuario@provedor.com.
Script para realização do teste e iniciar a configuração:
Script, ID, Nome ou user.
Exs:
sudo -u zabbix ./notificacoes-teste.py --send "-123456789"
ou
sudo -u zabbix ./notificacoes-teste.py --send "Nome Sobrenome"
ou
sudo -u zabbix ./notificacoes-teste.py --send "usuário"
ou para realizar 3 envios ao mesmo tempo, basta colocar as informações separados por vígula, por Ex:
sudo -u zabbix ./notificacoes-teste.py --send "-123456789, 5522988776655, usuario@provedor.com"
4 – Para quem usa BOT, para pegar o ID (tanto do grupo/canal, como de tópico), basta copiar o link de alguma mensagem, como a estrutura abaixo.
5 – Caso seja Canal ou SuperGrupo, o ID precisará ser acionado "-100" a frente do ID, confome exemplo abaixo.
Grupo/Canal
https://t.me/c/4100493856/789654 | ||
4100493856
|
789654
|
|
ID para envio
-1004100493856 |
Ex Grupo/Canal:
sudo -u zabbix ./notificacoes-teste.py --send "-1004100493856"
4100493856
|
10562
|
789654
|
ID para envio
-1004100493856_10562 |
Ex Tópico:
sudo -u zabbix ./notificacoes-teste.py --send "-1004100493856_10562"
Com o script adicionado no local indicado acima, precisamos realizar algumas configurações no Front do ZABBIX, no "Tipo de Mídia", (em Administração > Tipo de Mídia) e na "Ação" (em Configuração > Ações).
Variaveis para o tipo de mídia
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}
Existe somente uma exigência na “Mensagem Padrão”,
a primeira linha deve permanecer com as macros/variáveis abaixo ilustradas
(as macros/variáveis entre as "#" ),
podendo editar da segunda linha em diante, seja no "Modelo de mensagem" em "Tipo de mídia" ou na ação.
Modelo Mensagem (Incidente)
{TRIGGER.ID}#{EVENT.ID}#FF0000#10800#
IP/DNS: {HOST.CONN}
Último valor: {ITEM.LASTVALUE}
Modelo Mensagem (Recuperação)
{TRIGGER.ID}#{EVENT.ID}#00C800#3600#
IP/DNS: {HOST.CONN}
Último valor: {ITEM.LASTVALUE}
Duração: {EVENT.DURATION}
OBS:
Os valores
”FF0000” ou ”00C800” são apontamentos para as informar a lista de cores que será utilizada na linha do gráfico
(alarme ou normalização), e ”10800” ou ”3600” é o período do gráfico (3h ou 1h) em segundos.
Por sugestão de "Everaldo Santos Cabral" (@everaldoscabral)
Vamos entender um pouco as funções configuráveis do arquivo de configuração (configScripts.properties
)
[PathSection]
- ack - Ativa/Desativa o ack nos eventos
- salutation - Ativa/Desativa todas as saudações
- path.logs - indica o local onde o log será salvo, o "default" é um diretório "log" no mesmo local do script, se alterar precisa garantir que o usuário zabbix tenha permissão para escrita neste local.
[PathSectionEmail]
- salutation.email - Ativa/Desativa a saudação do email
- mail.from - descreve o remetente.
[PathSectionTelegram]
- salutation.telegram - Ativa/Desativa a saudação do Telegram
- path.graph - caminho onde a imagem para o gráfico será salvo.
[PathSectionWhatsApp]
- salutation.whatsapp - Ativa/Desativa a saudação do whatsapp
- open.source - Define se vc estará usando a API paga ou open source.
- open.source.url - Se definir o campo acima como yes, precisará apontar a URL na estrutura: http://IP_da_VM/api/nome_da_sessao_criada
- open.source.token - Se definir o campo acima como yes, precisará informar o token gerado.
[PathSectionTeams]
- salutation.teams - Ativa/Desativa a saudação do whatsapp
- message.teams - Caso o "ack" em "PathSection" esteja habilitado, esse campo define uma mensagem que serã inserida como comentário no evento
0 – Este script é para agilizar a análise e ficar visualmente mais agradável o recebimento dos alarmes;
1 - Faz uso diretamente da API do Telegram (MTProto), diferentemente da maioria (ouso até dizer todos), que usa o servidor HTTP dos BOTs, criando um ponto a mais de falha, além de ter a opção de escolher o remetente, se será um BOT ou uma conta;
2 - Integração API Telegram e WhatsApp: Realiza consulta para trazer informações do objeto, como Tipo (Grupo ou usuário), ID e nome (utilizado pelo script de "teste")
3 - Integração API ZBX (item): verificando se o item é do "tipo gráfico" (inteiro ou fracionário) para montar o gráfico se não for, ele envia somente o texto;
4 - Integração API ZBX (evento): Realiza ACK no evento, e insere um comentário (Pode ser desativado no arquivo de configuração);
5 - Existe opção de "saudação" (Bom dia, Boa tarde, Boa noite... dependendo do horário), juntamente com o nome, no caso do Telegram e "WhatsApp OpenSource", nome da pessoa, canal, ou grupo (Pode ser desativado no arquivo de configuração);
6 - Consegue realizar a criptografia dos campos, onde existem "informações sensíveis", como token do WhatsApp, o ID de conexão do telegram, usuário e senha do email (caso não use SMTP interno).
7 - Além de diversas pequenas configurações que impacta no resultado final, como:
7.1 - Flag para desconsideração do gráfico;
7.2 - Identificação e montagem do gráfico com todos os itens vinculados a trigger;
7.3 - Tratativa da data do evento, quem nunca se perguntou como alterar o padrão americano (2023.01.07) para o brasileiro (07/01/2023), a mensagem ja chega formatada;
7.4 - Tempo de gráfico personalizado...
Neste link você consegue criar de modelos para mensagens HTML, que foi indicado pelo amigo "Mario"
(@ZXRTI)
Site para criação de modelos HTML
Gostaria de agradecer as mais de 400 pessoas que estão no "grupo dos projetos", que serve como ajuda/sugestão/contribuição e aos que participam mais ativamente ajudando, sugerindo, pontuando, indicando melhorias e testando.
-
A criação deste projeto unificado (email e telegram), foi depois de uma conversa e o de "Everaldo Santos Cabral" (@everaldoscabral) dizer que a informação do arquivo de configuração era "inútil" pra quem usava somente um projeto, e isso me deu um luz para fazer algo diferente.
-
Hoje os projetos tem tantas melhorias e aprimoramentos, muito graças ao "Abner Klug" (@abnerk), que sempre trouxe várias ideias, como colocar opção ao ack, a saudação, dentre outras... Todos podem colaborar para fazermos uma comunidade mais forte e projetos cada vez melhores.
-
Ao "Gabriel R F" (@GabrielRF) que me apresentou ao pyrogram, me abrindo o caminho a alteração na forma de envio, aprimorando e dando mais possibilidades para o projeto.
-
Ao "Marcílio MR TELECOM" (@MarcilioMRTelecom) que dedicou seu tempo para testar e disponibilizar o projeto dd API do WhatsApp OpenSource, nos dando essa nova possibilidade.
Obrigado a todos os envolvidos, tanto pela disponibilidade para fazer os teste, como pela ajuda, confiança e coparticipação nos projetos.