Skip to content

sansaoipb/Graphical_notifications_Zabbix

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Doações

PagSeguro

PayPal

PicPay

Graphical Notifications Zabbix

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.

Sumário


Requisitos

0 – Ter instalado Python 3.9 (ou superior)
1 – Estar logado como root
2 – Executar os seguintes comandos

Instale os pacotes:

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

Criando Chave API WhatsApp

Instalação do WhatsApp OpenSource

OBS:
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)

Contratação da API para WhatsApp

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.

Para contratar acesse o site https://www.netizap.app/

Caso use somente o envio por WhatsApp, DESCONSIDERE OS PRÓXIMOS PASSOS, e vá direto para a configuração CLICANDO AQUI

Criando Chave API Telegram

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'

Edite os parâmetros

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

Consultando Configuração

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.

Comando para teste

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.

ID Grupo/Canal

4100493856

ID Msg

789654
ID para envio
-1004100493856

Ex Grupo/Canal:
sudo -u zabbix ./notificacoes-teste.py --send "-1004100493856"

ID Grupo/Canal

4100493856

Tópico

10562

ID Msg

789654
ID para envio
-1004100493856_10562

Ex Tópico:
sudo -u zabbix ./notificacoes-teste.py --send "-1004100493856_10562"

Configurando envio

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

Tipo de Mídia



Variaveis para o tipo de mídia
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}

Configuração para envio

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.

Imagem da Mensagem:



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.

Configurando o usuário



Resultado:



Arquivo de configuração


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

Conclusão

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

Contribuições

Neste link você consegue criar de modelos para mensagens HTML, que foi indicado pelo amigo "Mario" (@ZXRTI)
Site para criação de modelos HTML

Agradecimentos

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.




About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages