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.