Nagios enviando alertas via WhatsAPP

Requisitos

1. Servidor Linux Rodando o Nagios:

Testado em CentOS 5.5 e 6.4 x86_64. No entanto, nada impede de ser implementado em outras distros.

2. yowsup:

Este é o ‘cara’ deste artigo.

O que é: escrito em Python, é uma Interface de Linha de Comando utilizada para interagir com o WhatsAPP, para ser mais claro, é um WhatsAPP via linha de comando. Dentre todas as funcionalidades deste, usaremos apenas 3, vistas mais adiante.

3. Um número/CHIP:

Neste caso, um número de Celular. Este será responsável por registrar-se junto aos servidores do WhatsAPP e enviar as mensagens de alertas.

Obs: use um número/chip apenas para esta função. Se registrado posteriormente, via Smartphone, por exemplo, a aplicação deixará de funcionar. Os servidores do WhatsAPP só permitem a utilização/registro em um único equipamento por vez.

4. Dependências:

  • python 2.6 ou superior (python26)
  • python26-libs
  • python26-argparse
  • python26-dateutil

Obs: estou usando CentOS.

* Importante: este artigo não aborda a instalação de um servidor Nagios. Sendo assim, partimos do principio de que você já tem um ambiente com o Nagios funcionando. 

Instalação

yowsup

1. Instalando as dependências

# yum install python26 python26-libs python26-argparse python26-dateutil

Obs: caso os pacotes não estejam disponiveis, tente instalar algum repositório, como: epel, remi, rpmforge, etc.

2. Baixando o yowsup:

# cd /opt
# wget
 https://github.com/tgalal/yowsup/archive/yowsup-master.zip –no-check-certificate
# unzip yowsup-master.zip

3. Configurando o yowsup:

# cd yowsup-master/src
# chmod +x yowsup-cli
# cp config.example zapzap.config

 cc=55    #código do País(BR)
phone=55+DDD+NUMERO    #Exemplo 559182820000
id=Nagios Alerta
password=VAMOS REQUISITAR 

4. Registrando o Número:

# ./yowsup-cli -r sms -c zapzap.config
 status: sent
retry_after: 3605
length: 6
method: sms 

Onde:

  • -r–requestcode :: solicita o código de registro.
  • sms :: recebe uma mensagem de texto com o código de registro.
  • -c–config :: arquivo de configuração que contém o número do WhatsAPP.

Em seguida, será recebido um sms contendo o código de registro.

4.1 Ativando o registro:

# ./yowsup-cli -R 123-456 -c zapzap.config
 status: ok
kind: free
pw: aGGVSOGy6+OsMl0Ctz5nAc5tvO0=
price: US$0.99
price_expiration: 1400041960
currency: USD
cost: 0.99
login: 559182820000
type: existing
expiration: 1428155655 

Onde:

  • -R–register :: Comando para registrar o número WhatsAPP.
  • 123-456 :: código recebido via sms.
  • -c–config :: arquivo de configuração que contém o número do WhatsAPP.

Obs: inserir o campo “password=(item 3)” no arquivo zapzap.config com o valor pw da saida do comando acima(4.1).

pw :: aGGVSOGy6+OsMl0Ctz5nAc5tvO0=

5. Enviando uma mensagem:

# ./yowsup-cli -s 559182189171 “Testando ZapZap CLI – VOL” -w -c zapzap.config
 Connecting to c.whatsapp.net
Authed 559182820000
Sent message
Got sent receipt 

Onde:

  • -s–send :: Comando de envio de mensagem.
  • 559182189171 :: Número de destino contendo código do País + DDD.
  • -w–wait :: Quando usado o -s(–send) a conexão não irá fechar até que o servidor (WhatsAPP) tenha recebido a mensagem.
  • -c–config :: arquivo de configuração que contém o número do WhatsAPP.

Obs: como foi dito anteriormente, utilizamos apenas os comandos requestregister e send.

Porém, existem outros comandos. Para isso:

# ./yowsup-cli -h

Nagios

1. Configurando os alertas do Nagios:

1.1 Criando o comando de envio.

Para isso, devemos alterar o arquivo command-plugins.cfg do Nagios. No meu caso, está localizado em /etc/nagios/objects/.

Inserir as linhas:

define command{
command_name notify-by-wapp
command_line /opt/yowsup-master/src/yowsup-cli –send $CONTACTPAGER$ “$HOSTADDRESS$ $HOSTALIAS$: $SERVICEDESC$ is $SERVICESTATE$” –wait –config /opt/yowsup-master/src/zapzap.config
}

1.2 Criando o contato:

Este será o contato que irá receber os alertas do Nagios pelo WhatsAPP. Para isso, vamos alterar o arquivo contacts.cfg do Nagios. No meu caso, está em /etc/nagios/objects/.

define contact {
contact_name nagiosadmin
alias Nagios Admin
contactgroups admins
host_notifications_enabled 1
service_notifications_enabled 1
host_notification_period 24×7
service_notification_period 24×7
host_notification_options d,u,r,f,s
service_notification_options w,u,c,r,f,s
host_notification_commands notify-by-wapp
service_notification_commands notify-by-wapp
can_submit_commands 1
retain_status_information 1
retain_nonstatus_information 1
email [email protected]
pager 559182189171
use gleison
register 1
}

Obs: caso você possua um contato já configurado, basta alterar/inserir as seguintes linhas.

host_notification_commands notify-by-wapp
service_notification_commands notify-by-wapp
pager 559182189171

1.3 Configurando o Alerta de um Host:

Altere dentro do seu arquivo de um Host as seguintes linhas.

define host {
.
.
.
event_handler notify-by-wapp
contacts nagiosadmin
.
.
}

1.4 Configurando o Alerta de um Serviço:

Altere dentro do seu arquivo de um Serviço, as seguintes linhas.

define service {
.
.
.
event_handler notify-by-wapp
contacts nagiosadmin
.
.
}

* Importante: lembre-se sempre de verificar no Nagios, se as configurações estão corretas antes de tentar reiniciar.

# nagios -v /etc/nagios/nagios.cfg
Total Warnings: 0
Total Errors: 0 

Testando

Existem várias formas de simular um teste.

Eu sempre realizo bloqueando a chegada do servidor Nagios a determinado Host, ou Serviço via IPtables. Assim, tenho como testar a falha em um serviço ou no host, sem que ocorra parada nos mesmos.

HOST (Exemplo Ping):

# iptables -I OUTPUT -p icmp -d HOST_MONITORADO -j DROP

SERVIÇO (Exemplo SMTP):

# iptables -I OUTPUT -p tcp -d HOST_MONITORADO –dport 25 -j DROP

Considerações

Espero que tenha sido direto.

No entanto, sempre ocorrem dúvidas, uma vez que o mundo Open Source proporciona isso de você poder trabalhar suas idéias, não ficando amarrado a ambientes fechados, trazendo os mais variados “labs”.

Quaisquer dúvidas estamos ai.

[]s

Rolar para cima