Envio de Alertas do Zabbix via WhatsApp

Envio de Alertas do Zabbix via WhatsApp

 O que é o Zabbix?

O Zabbix é uma ferramenta de monitoramento de redes, servidores, VM´s e serviços em nuvens. Também sendo um software de código aberto, que pode ser utilizada para monitoramento de disponibilidade de aplicações ou desempenho de sistemas. Sendo assim, o proxy Zabbix por exemplo, pode ajudar a monitorar grandes data centers com eficiência e também pode ser executado em hardware integrado para ambientes menores.

 

Por Que utilizar o Zabbix?

Além de ser uma ferramenta de código aberto, ele nos disponibiliza uma série de funcionalidades que facilitam o uso diário no monitoramento dos sistemas.

 

 Suas funcionalidades são:

  •  Monitoramento de saúde e desempenho dos servidores, dispositivos de hardware, redes, aplicações e serviços;
  •  Coleta dados sobre CPU, memória, disco e utilização de rede;
  •  Detecta e alerta sobre problemas automaticamente;
  •  Permite consfigurar triggers e ações para eventos especificos;
  •  Permite criar painéis personalizados e visualizações de dados;
  •  Permite enviar alertas e notificações por e-mail, Telegram, sistemas de Helpdesk ou via WhatsApp (Como iremos ver nesse post);

 

Parte 1: Configuração do Zabbix para Enviar Alertas via WhatsApp

Nessa primeira parte, será necessario criar um arquivo executável dentro do ambiente onde o Zabbix se encontra.

 

1. Criação e resolução do script:

Para iniciar a nossa conexão com o zabbix via WhatsApp, será necessário criar um arquivo executável dentro do seguinte caminho no ambiente Zabbix `/usr/lib/zabbix/alertscripts/`. Ao estar no diretório correto, de os seguintes comandos:

 

  • 1.1 Criação do arquivo:

    $ mkdir alertasWhatsApp.sh
  • 1.2 Permissões de execução para o arquivo:

    $ chmod +x alertasWhatsApp.sh

2 – Desenvolvimento do script:

 Após seguir os passos anteriores, temos já criados o nosso arquivo e também temos a permissão de execução do próprio dentro de nosso ambiente. Vamos para a criação do script que fará o envio das notificações Zabbix.
    #!/bin/bash
    BASE_URL=”http://localhost:4000/api/message” # Caso esteja rodando localmente ou a URL do seu Ambiente
    PHONE=”$1″
    TITULO=”$2″
    MESSAGE=$(echo “$3” | tr -d ‘\n’ | tr -d ‘\r’)

 

    # Registro de debug (opcional)
    echo “$(date): PHONE=$PHONE, TITULO=$TITULO, MESSAGE=$MESSAGE” >>
    ,  → /var/log/zabbix/beezap_debug.log

 

    curl –location –request POST “$URL” \
    –header ‘Content-Type: application/json’ \
    –data-raw “{
        \”number\”: \”${PHONE}\”,
        \”message\”: \”${MESSAGE}\”

 

 2.1 Criando o Tipo de Mídia no Zabbix:

  No painel do Zabbix, crie um novo tipo de mídia para enviar mensagens via WhatsApp. O formato de mensagem do alerta pode ser customizado com variáveis do Zabbix, como `EVENT.NAME`, `EVENT.TIME`,  e outras.

 

2.2 Criando a Ação do Trigger:

Crie uma trigger action e associe ao tipo de mídia que você criou, incluindo o número de WhatsApp ou ID do grupo.

 Ambiente Zabbix

 Após as configurações anteriores realizadas e validadas no seu ambiente Zabbix, podemos seguir para o passo de integração e configuração da nossa API com o WhatsApp.

Parte 2: Criação da API de Envio de Mensagens

 

Agora, vamos criar a API que será responsável por fazer a conexão e enviar as mensagens via WhatsApp, utilizando o `venom-bot` como base.

 

1.1 Instalando Dependências e iniciando a API:

    apt-get install -y build-essential
    apt-get install libgbm-dev

 

    # Instalando o navegador Google Chrome
    wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
    sudo apt install -y ./google-chrome-stable_current_amd64.deb
    dpkg -i ./google-chrome-stable_current_amd64.deb

 

    # Instalação e atualizando o Node
    apt install npm
    npm install -g n
    n latest

 

    ### Após instalar o node, é recomendado fechar o terminal atual e abrir uma nova sessão do SSH

 

    # Iniciando projeto
    npm init -y

 

    # Instalando as dependencias
    npm uninstall venom-bot
    npm install venom-bot@5.0.20
    npm install express
    npm install pm2

1.2 Criando script para conexão e envio das mensagens:

Esse arquivo será o responsavel por criar o servidor que irá enviar as mensagens para o WhatsApp.
var express = require(“express”);
var venom = require(“venom-bot”);

 

venom
  .create({
    session: ‘API-ZAP-BEE’
  })
  .then((client) => start(client))
  .catch((erro) => {
    console.log(erro);
  });

 

function start(client) {
  var app = express();

 

  app.use(express.json());
  app.use(express.urlencoded({ extended: true }));

 

  app.listen(4000, () => {
    console.log(“Servidor rodando na porta 4000”);
  });

 

  app.get(“/api/message”, async (req, res, next) => {
    console.log(“ChatID:”, req.query.number);
    const chatid = req.query.number;

 

    const isGroup = (chatid) => {
      return chatid.toString().startsWith(’55’) && chatid.toString().length === 12;
    };

 

    try {
      if (isGroup(chatid)) {
        console.log(‘Enviando mensagem em número!’);
        await client.sendText(req.query.number + ‘@c.us’, req.query.message);
      } else {
        console.log(‘Enviando mensagem em um grupo!’);
        await client.sendText(req.query.number + ‘@g.us’, req.query.message);
      }
      res.json(req.query);
    } catch (error) {
      console.error(‘Erro ao enviar a mensagem:’, error);
      res.status(500).json({ error: ‘Erro ao enviar a mensagem’ });
    }
  });

 

  app.post(“/api/message”, async (req, res, next) => {
    console.log(“ChatID:”, req.body.number);
    const chatid = req.body.number;

 

    const isGroup = (chatid) => {
      return chatid.toString().startsWith(’55’) && chatid.toString().length === 12;
    };

 

    try {
      if (isGroup(chatid)) {
        console.log(‘Enviando mensagem em número!’);
        await client.sendText(req.body.number + ‘@c.us’, req.body.message);
      } else {
        console.log(‘Enviando mensagem em um grupo!’);
        await client.sendText(req.body.number + ‘@g.us’, req.body.message);
      }
      res.json(req.body);
    } catch (error) {
      console.error(‘Erro ao enviar a mensagem:’, error);
      res.status(500).json({ error: ‘Erro ao enviar a mensagem’ });
    }
  });

 

  client.onMessage((message) => {
    if (message.body === ‘Bee’) {
      client.sendText(message.from, ‘Bem-vindo a Bee Solutions!’).catch((error) => {
        console.error(‘Erro ao enviar a resposta:’, error);
      });
    }
  });
}
Após a instalação das dependências necessárias e do script, basta rodar o comando de inicialização da api:
    $ node beezap.js
Se for o caso execute em segundo plano com pm2:
    $ pm2 start beezap.js
    $ pm2 status
    $ pm2 logs

 

1.3 Ler QR Code e tokens :

Assim que iniciar a API, e se todas as dependências estiverem corretas, irá abrir na tela do seu navegador o WhatsAppWeb que será por esse meio que iremos fazer a conexão `API > WhatsApp > Zabbix`. Quando for pedido, basta scanear o QR-Code que vai aparecer na tela com o número escolhido para fazer o envio das mensagens.
Após a conexão concluída com sucesso, irá ser criada umas pasta chamada `tokens` na raíz do seu projeto, onde serão salvas as informações e dados necessários para manter a conexão e login com o WhatsApp. Esse arquivo pode ser copiado e utilizado em outros projetos para fazer o login com o número referente. Porem assim que a sessão é encerrada no telefone, se perde todos os ambientes conectados.

 

2 Iniciando o servidor:

 Assim que todos os passos tiverem sido concluídos, localmente por exemplo, e o servidor estiver rodando na porta `3000` por exemplo, iniciaremos os testes, onde no seu própriao navegador, caso esteja localmente, você irá passar a seguinte URL para testar:

 

    `http://localhost:3000/api/message?number=5599999999&message=test`

 

  • No campo number  vai o número ao qual quer receber a mensagem de test.
  • E no message,  o valor o qual quer enviar.

 

Caso esteja rodando em seu ambiente de produção por exemplo, para fazer um teste simples para conferir se está funcionando as funcionalidades e a conexão com a API, rode o seguinte comando no seu terminal:
    curl –location –request POST ‘http://localhost:3000/api/message’ \ 
  –header ‘Content-Type: application/json’ \
  –data-raw ‘{
    “number”: “5599999999”,
    “message”: “Test de mesagem WhatsApp”
  }
Caso a mensagem for enviada com sucesso, você verá uma resposta JSON confirmando o envio.

 Parte 3: Configuração de Firewall (Opcional)

 

Para garantir que o servidor esteja seguro e acessível por IPs específicos, você pode configurar o firewall usando o iptables:
    apt install iptables-persistent

 

    iptables -I INPUT -s 127.0.0.1 -p tcp –dport 4000 -j ACCEPT
    iptables -A INPUT -s 192.168.18.0/24 -p tcp –dport 4000 -j ACCEPT
    iptables -A INPUT -p tcp –dport 4000 -j DROP

 

    # Salvando regras atuais no arquivo
    iptables-save > /etc/iptables/rules.v4

 

Conclusão

 

Agora você tem um sistema de monitoramento do Zabbix que envia alertas via WhatsApp utilizando o venom-bot. Essa solução proporciona uma maneira eficaz de receber notificações em tempo real, diretamente no WhatsApp, e pode ser personalizada conforme as necessidades da sua infraestrutura.

 

 Ressalvas

 

  • Não utilizem essa API para envio em massa ou Spam, pois é possivel que o número de envio seja banido por diretrizes da META;
  • Protejam a API com Firewall, e autenticação por Token.

 

 Referências

 

Repositórios:

https://github.com/orkestral/venom
https://www.zabbix.com/manuals

 

Video de referência:

[Bee Solutions](https://www.youtube.com/watch?v=QKFdWH0p7sA)

 

Anterior DeepSeek IA open source

About author

Você pode gostar também

Cloud

Curso de Terraform atualizado: aprenda Infraestrutura como Código e impulsione sua carreira

Olá, jovem Padawan interessado em Infra como Código, Cloud e DevOps! Nesse post trago uma boa notícia para você que quer dar um up no seu conhecimento em Terraform. A

Infraestrutura TI

Testando e validando suas Roles do Ansible com o Molecule

Hoje, no blog da 4Linux, vamos falar sobre como podemos testar as nossas Roles antes de serem aplicadas no ambiente de produção. O Molecule é um projeto que permite que

Cloud

Gerenciamento eficiente de discos em Linux com LVM: Guia passo a passo

O gerenciamento de discos em ambientes linux utilizando o LVM fornece uma visão de alto nível à estrutura de discos presentes em um sistema. Isso dá muito mais flexibilidade na