Integrando Nagios com Asterisk

gnu

Descrição das atividades que desenvolvi para integrar a ferramenta Nagios com o servidor Asterisk, realizando ligações quando um host/serviço estivesse down.

[ Hits: 21.501 ]

Por: Sidney Alexandre Pagel em 01/01/2013


Atacando o problema



O primeiro ponto foi criar uma relação de confiança de serviço SSH entre os servidores, para que o envio de arquivos via SCP, seja feito sem a requisição de senha. Existem inúmeros tutoriais na Internet descrevendo como fazer isso, e não se trata do escopo do presente artigo.

Feito isso, procurei um meio de obter as informações que necessitava: o nome do host/serviço, se se tratava de UP ou DOWN (pois o Nagios também avisa quando um host/serviço volta a funcionar) e o número de telefone que deveria receber a ligação.

No arquivo contacts.cfg, contido no diretório do Nagios (geralmente nagios/etc/objects), constam os contatos, que podem ser cadastrados para receberem avisos de quedas de hosts e serviços. Entre outras informações, pode-se inserir a informação "pager", a frente da qual podemos colocar o número de celular do contato.

Exemplo de parte do arquivo:

define contact{
   contact_name                    sidney
   use                             generic-contact
   alias                           Sidney Pagel
   host_notifications_enabled      1
   service_notifications_enabled   0
   service_notification_period     24x7
   host_notification_period        24x7
   service_notification_options    w,u,c,r
   host_notification_options       d,u,r
   service_notification_commands   notify-service-by-email notify-service-by-sms
   host_notification_commands      notify-host-by-email notify-host-by-sms 
   email                           sidney.pagel@meuemail.com.br
   pager                           00000000
   }

Verifiquem, também, a linha "host_notification_commands", que é onde inserimos os comandos que irão gerar os avisos que queremos que esta pessoa receba. Note que meu "contato" possui ativados (host notification enabled 1) os comandos: notify-host-by-email e notify-host-by-sms.

A sintaxe destes comandos é encontrada em commands.cfg. Veja a sintaxe do comando notify-host-by-email:

define command{
command_name notify-host-by-email
command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$
}

Notem a existência das variáveis:
  • $NOTIFICATIONTYPE
  • $HOSTNAME
  • $HOSTSTATE
  • $HOSTADDRESS
  • $HOSTOUTPUT
  • $LONGDATETIME

Estas variáveis são usadas para compor o comando "mail -s". Veja o comando após o último pipe. Será enviado um e-mail, como comando mail -s, contendo o $NOTIFICATIONTYPE$, cuja variável armazena a informação de DOWN ou UP do host, o nome do host (variável $HOSTNAME), e o status atual do host (UP OU DOWN, contidos na variável $HOSTSTATE).

Para bom entendedor, meia palavra basta. Observando esta sintaxe, já podemos entender como conseguir os dados que queremos para que o Nagios possa compor o arquivo que deve ser enviado para o Asterisk:
  • O nome do host/serviço: $HOSTNAME;
  • Se se trata de UP ou DOWN: $HOSTSTATE;
  • Número de telefone que deve receber a ligação: $CONTACTPAGER (descobri pesquisando na Internet e o campo pager, do contacts.cfg, é armazenado nessa variável).

Boa parte da solução já se encontra pronta. Basta agora criar um comando que capture essas variáveis e as insira em arquivos para que possamos trabalhar com elas. Criei a entrada "notify host by phone", dentro de commands.cfg, com a seguinte composição:

define command{
command_name notify-host-by-fone
command_line /bin/echo $HOSTNAME$ > /opt/scripts/astnagios/hostiden && /bin/echo $HOSTSTATE$ > /opt/scripts/astnagios/hoststate && /bin/echo $CONTACTPAGER$ > /opt/scripts/astnagios/numcel && /bin/astnagios.sh
}

Explicando: criei o diretório /opt/scripts/astnagios, e crio dentro desse diretório o arquivo "hostiden", que contém a informação da variável $HOSTNAME, ou seja, o nome do host. Crio também, o arquivo "hoststate", com a informação da variável $HOSTSTATE, que vai receber UP ou DOWN, ou seja, o estado do host.

Adicionalmente, é criado o arquivo "numcel17", que contém a informação da variável $CONTACPAGER, ou seja, o número de celular do contato que deve ser avisado do UP ou DOWN do host. Finalmente, executo o comando /bin/astnagios.sh, que se trata do script que lê os conteúdos destes arquivos e cria os arquivos a serem enviados para o Asterisk.

Página anterior     Próxima página

Páginas do artigo
   1. O início
   2. Atacando o problema
   3. O script
Outros artigos deste autor

NagVis - Gestor de mapas pra lá de especial

Configurando um domínio pelo serviço ipturbo empresarial (Brasil Telecom)

O software livre na administração pública

Mais sobre terminais leves....

Pequena solução para backup em redes mistas

Leitura recomendada

Gerando gráficos sem mistérios no MRTG (Debian)

Instalando Apache Tomcat em Linux 2.6

Recuperando RouterOS na RouterBOARD 450

Servidor de Banco de Dados + Servidor Web PHP

Instalação e configuração do Apache2 com SSL e MOD_JK no Solaris

  
Comentários
[1] Comentário enviado por fabio em 01/01/2013 - 13:50h

Meus parabéns, ótimo trabalho!

Primeiro artigo do ano no VOL já começa com uma solução super criativa.

[2] Comentário enviado por gnu em 01/01/2013 - 23:43h

Muito Obrigado! Vindo de uma pessoa com o conhecimento que você tem, tenho que imprimir e enquadrar seu elogio.. hehehe

[3] Comentário enviado por danniel-lara em 02/01/2013 - 10:02h

Parabéns pelo Artigo muito bom mesmo

[4] Comentário enviado por Rafael Oliveira em 02/01/2013 - 12:04h

Parabéns gnu!
Realmente muito criativa e eficiente a sua ideia.

[5] Comentário enviado por cesar.info em 03/01/2013 - 20:40h

Imaginando algo mais "mirabolante", daria pra pensar em criar alguns comandos de gerenciamento do servidor através da URA, etc.

Mandou bem, muito bem.

Abs.

[6] Comentário enviado por feimsacuel em 05/01/2013 - 16:28h

Muito bom essa solução, gostaria de saber se vc sabe como monitorar o link R2 das placas khomps pelo snmp, mas valeu pelas dicas.

[7] Comentário enviado por fernandotrilha em 24/03/2014 - 16:56h

Sidney, estou implementando isso aqui na empresa, mas não estou conseguindo fazer o Nagios executar o comando notify-host-by-fone;
Consegue me dar uma força?

[8] Comentário enviado por thla_88 em 10/01/2015 - 17:53h


Sidney ótima postagem, estou estudando a fundo o nagios e o asterisk, paguei duas cadeiras que implementavam essas maravilhosas ferramentas. Gostaria de saber como vc fez o script do envio automático do SCP para que toda vez o nagios podesse alertar o asterisk se um host está DOWN ou UP?

[9] Comentário enviado por gnu em 12/01/2015 - 10:22h


Olá. O script no artigo é o astnagios.sh. Dentro dele, é efetuada a cópia do arquivo .call diretamente para a pasta outgoing no servidor asterisk. No entanto, se fosse implementar a solução novamente hoje, faria de maneira diferente, com um banco de dados registrando as ligações, e forçando o receptor da chamada a registrar o recebimento da mesma através de alguma opção na URA. Na época, eu criei os arquivos up e down de cada host, e hoje também faria diferente, uma vez que é possível utilizar o serviço da google para enviar texto com o nome do servidor e receber o arquivo de áudio. Se tiver interesse em implementar a solução de maneira mais "elegante", me passe seu endereço de email, que lhe enviarei meu skype id. Gostaria de discutir com você a possibilidade de o implantarmos em conjunto, pois queria estabelecer essa solução com a devida documentação para servir de base para um artigo (estou precisando pra faculdade.. hhehehehe). Como aqui deixamos de utilizar por diversas razões, estou em busca de um ambiente para implementação.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts