Vous êtes sur la page 1sur 11

Documentacin Nagios para Alertas por:

Llamadas Asterisk +Nagios y Telefonos IP


Envios de SMS
Envios de Correo
Comunicacin jabber

Use Asterisk for Nagios Notifications

Solution

Components Tested scenario


Operating system: Red Hat, Ubuntu 8.04
CentOS, Fedora or Ubuntu
Nagios 3.0.1
Monitoring software: Nagios
Cepstral Swift 4.2.1
VoIP software: Asterisk
Asterisk 1.4.17
Text-to-speech software:
Cepstral TTS
This is a description about how to connect Nagios to Asterisk.
So you can receive automatic phone calls if Nagios reports some
failure. Here is an example about you may hear:
Cepstral TTS Demo

There is also another script on-line that lets your Nagios box call thru the
Asterisk Manager protocol (that way you can have your Nagios installation on a
separate box). See http://www.pplusdomain.net/asterisk_notification.html for
more information.
Nagios configuration
Una vez terminada la instalacin, podemos empezar con la configuracin de Nagios.
El archivo principal donde se definen los parmetros para el programa es nagios.cfg y lo
encontramos en la carpeta /etc/nagios.
Para la instalacin que vamos a hacer no se necesita ningn tipo de modifica.
Los que tenemos que modificar son los siguientes archivos presentes en la carpeta
/etc/nagios/objects:
commands.cfg

localhost.cfg

contact.cfg

Empezemos con contact.cfg


Contacts
/usr/local/nagios/etc/objects/contacts.cfg

En este archivo cambiamos estas lneas:


[...]
define contact{
contact_name nagiosadmin
use generic-contact
alias Nagios Admin
email nagios@localhost
}
para que queden:
define contact{
contact_name nagiosadmin
use generic-contact
alias Nagios Administrador
email fulano@gmail.com;
}[...]

Y TAMBIEN PONEMOS ESTAS

[...]
define contact{
contact_name nagiosadmin
use generic-contact
alias Nagios Admin
service_notification_commands notify-service-by-phone
host_notification_commands notify-host-by-phone
email test@example.com
address2 SIP/1000
} [...]

Notification command
vim /usr/local/nagios/etc/objects/commands.cfg
[...]
define command{
command_name notify-host-by-phone
command_line $USER1$/notify-by-phone.sh $CONTACTADDRESS2$
"Nagios Host Alarm. Notification Type: $NOTIFICATIONTYPE$. Host:
$HOSTNAME$. State: $HOSTSTATE$. Address: $HOSTADDRESS$ Info:
$HOSTOUTPUT$ Time: $LONGDATETIME$" _host_$HOSTEVENTID$
}
define command{
command_name notify-service-by-phone
command_line $USER1$/notify-by-phone.sh $CONTACTADDRESS2$
"Nagios Service Alarm. Notification Type: $NOTIFICATIONTYPE$. Service:
$SERVICEDESC$. Host: $HOSTALIAS$. Address: $HOSTADDRESS$. State:
$SERVICESTATE$. Time: $LONGDATETIME$. Additional Info:
$SERVICEOUTPUT$" _service_$SERVICEEVENTID$
}[...]

El acceso a la pagina de Nagios est protegido y para poder acceder tenemos que
configurar la contrasea del usuario predefinido nagiosadmin de la siguiente forma:
htpasswd -bc /etc/nagios/htpasswd.users nagiosadmin sesamo
Adding password for user nagiosadmin
Este comando crear una archivo htpasswd.users que contendr los datos de acceso para el usuario
predefinido nagiosadmin (en nuestro caso la contrasea es sesamo)
Configuramos Nagios y Apache para que arranquen en automtico:
chkconfig nagios on
chkconfig httpd on
Arrancamos primero apache y luego Nagios:
/etc/init.d/httpd start
/etc/init.d/nagios start
Para entrar en la pagina de Nagios:
http://ipservidor/nagios

----------------------------------------------------------------------------------
Command name: nombre del commando
----------------------------------------------------------------------------------
Command line: los parmetros que pasaremos al comando:
La macro (variable) $USER1$ contiene el valor /usr/lib/nagios/plugins como especificado en el
archivo /etc/nagios/resource.cfg
------------------------------------------------------------------------------------
notify-host-by-phone Nombre del plugin
-----------------------------------------------------------------------------------
$HOSTADDRESS$ la opcin H define el servidor que vamos a interrogar y
$HOSTADDRESS$ es una macro (variable) predefinida que contiene el nombre del servidor
como lo definiremos luego en localhost.cfg
------------------------------------------------------------------------------------
-C public es la comunidad que vamos a utilizar para conectarnos al agente como definido en el
archivo /etc/snmp/snmp.conf que hemos visto en el precedente articulo
-----------------------------------------------------------------------------------
-o la OID que vamos a consultar
-P 2c versin de SNMP utilizada para la consulta
-l la etiqueta que definiremos
-w est por Warning
-c est por Critical
----------------------------------------------------------------------------------
$ARG1$ $ARG2$ $ARG3$ ARG4$ son las macros (variables) cuyo valor ser asignado desde la
configuracin de localhost.cfg
----------------------------------------------------------------------------------
Ej
nano /etc/nagios/objects/commands.cfg
al final del archivo aadimos:
define command{
command_name check_snmp
command_line $USER1$/check_snmp -H $HOSTADDRESS$ -C public -o $ARG1$ -P 2c
-l $ARG2$ -w $ARG3$ -c $ARG4$
}

IMPORTANTE
Una vez terminada la instalacin, podemos empezar con la configuracin de Nagios.
El archivo principal donde se definen los parmetros para el programa es nagios.cfg y lo
encontramos en la carpeta /etc/nagios.
Para la instalacin que vamos a hacer no se necesita ningn tipo de modifica.
Los que tenemos que modificar son los siguientes archivos presentes en la carpeta
/etc/nagios/objects:
commands.cfg

localhost.cfg

contact.cfg

Empezemos con contact.cfg


----------------------------------
Para terminar la configuracin modificamos el archivo localhost.cfg. Cambiamos de nombre al que
viene con la instalacin de Nagios:
mv /etc/nagios/objects/localhost.cfg /etc/nagios/objects/localhost.cfg.old
y creamos uno nuevo
nano /etc/nagios/objects/localhsot.cfg
Aadimos las siguientes lneas:
define host{
use linux-server
host_name VozOrg
alias VozOrg
address 127.0.0.1
}
define service{
use local-service
host_name VozOrg
service_description SIP
check_command check_snmp!ASTERISK-
MIB::astChanTypeChannels.10!"Canales SIP Activos"!8!16
notifications_enabled 0
}
define service{
use local-service
host_name VozOrg
service_description IAX2
check_command check_snmp!ASTERISK-
MIB::astChanTypeChannels.5!"Canales IAX2 Activos"!4!8
notifications_enabled 0
}
define service{
use local-service
host_name VozOrg
service_description DAHDI
check_command check_snmp!ASTERISK-
MIB::astChanTypeChannels.1!"Canales DAHDI Activos"!4!8
notifications_enabled 0
}
define service{
use local-service
host_name VozOrg
service_description Asterisk_check
check_command check_asterisk
notifications_enabled 0
}
Una pequea explicacin. En el primer bloque definimos el nombre del servidor, un alias y la
direccin IP (en este caso siendo Nagios y Asterisk instalados en el mismo servidor indicamos
127.0.0.1 o localhost).
En los tres bloques que siguen controlamos, a travs del plugin chek_snmp, los canales SIP,
IAX2 y DAHDI activos. Asignamos a las cuatros macros (variables) que hemos visto al momento
de la configuracin del comando ($ARG1$ $ARG2$ $ARG3$ ARG4$) los respectivos valores
separados por el caracter !
Las OID las tomamos interrogando Asterisk con SNMP como hemos visto en el precedente articulo.
En el ultimo bloque utilizamos el plugin check_asterisk.pl y a travs del AMI de Asterisk
controlamos que est corriendo.
Si queremos controlar tambin algunos servicios bsicos del servidor (usuarios, procesos, carga,
etc) aadimos estas lneas:
define service{
use local-service
host_name VozOrg
service_description PING
check_command check_ping!100.0,20%!500.0,60%
}
define service{
use local-service
host_name VozOrg
service_description Current Users
check_command check_local_users!20!50
}
define service{
use local-service
host_name VozOrg
service_description Total Processes
check_command check_local_procs!250!400!RSZDT
}
define service{
use local-service
host_name VozOrg
service_description Current Load
check_command check_local_load!5.0,4.0,3.0!10.0,6.0,4.0
}
define service{
use local-service
host_name VozOrg
service_description SSH
check_command check_ssh
notifications_enabled 0 }
Ahoras estamos listos para arrancar nagios. Antes de hacerlo hay una forma de controlar que todos
los archivos de Nagios estn sin errores:
nagios v /etc/nagios/nagios.cfg
Si la respuesta termina con:
Total Warnings: 0
Total Errors: 0
Things look okay - No serious problems were detected during the pre-flight check
Significa que todo est bien. En caso contrario Nagios indicar el archivo y la lnea donde se
encuentra el error.
El acceso a la pagina de Nagios est protegido y para poder acceder tenemos que configurar la
contrasea del usuario predefinido nagiosadmin de la siguiente forma:
htpasswd -bc /etc/nagios/htpasswd.users nagiosadmin sesamo
Adding password for user nagiosadmin
Este comando crear una archivo htpasswd.users que contendr los datos de acceso para el usuario
predefinido nagiosadmin (en nuestro caso la contrasea es sesamo)
Configuramos Nagios y Apache para que arranquen en automtico:
chkconfig nagios on
chkconfig httpd on
Arrancamos primero apache y luego Nagios:
/etc/init.d/httpd start
/etc/init.d/nagios start
Para entrar en la pagina de Nagios:
http://ipservidor/nagios

Asterisk configuration
/etc/asterisk/extensions.conf
[...]
[alarm]
exten => s,1,Answer
exten => s,2,NoOp(alarmid: ${alarmid})
exten => s,3,Playback(/var/spool/alarm/alarm${alarmid})
exten => s,4,Hangup
[...]

Connection script see also Asterisk auto-dial out


/usr/local/nagios/libexec/notify-by-phone.sh
#!/bin/bash
channel=$1
alarmtext=$2
alarmid=$3

cd /var/spool/alarm
echo $alarmtext > alarm$alarmid.txt
/opt/swift/bin/swift -n Allison-8KHz -f alarm$alarmid.txt -o
alarm$alarmid.tmp.wav
/usr/bin/sox alarm$alarmid.tmp.wav -r 8000 alarm$alarmid.ul
/bin/mv -f alarm$alarmid.ul alarm$alarmid.ulaw
/bin/rm alarm$alarmid.tmp.wav
echo "Channel: $1
MaxRetries: 2
RetryTime: 60
WaitTime: 30
Context: alarm
Extension: s
Priority: 1
Set: alarmid=$alarmid" > alarm$alarmid.call
/bin/chmod 777 alarm$alarmid.call
/bin/mv alarm$alarmid.call /var/spool/asterisk/outgoing

Setup procedure
prerequisites: Nagios, Asterisk and Cepstral installed

as root:
apt-get install sox
apt-get install libsox-fmt-all

mkdir /var/spool/alarm
chown nagios.asterisk /var/spool/alarm/

usermod -G nagcmd,asterisk nagios

vim /usr/local/nagios/libexec/notify-by-phone.sh # (copy and paste above


script)
chown nagios.nagios /usr/local/nagios/libexec/notify-by-phone.sh
chmod 750 /usr/local/nagios/libexec/notify-by-phone.sh

vim /usr/local/nagios/etc/objects/contacts.cfg # (copy and paste above


config)
vim /usr/local/nagios/etc/objects/commands.cfg # (copy and paste above
config)
/etc/init.d/nagios reload

vim /etc/asterisk/extensions.conf # (copy and paste above config)


/etc/init.d/asterisk reload

Test via command line


su nagios
/usr/local/nagios/libexec/notify-by-phone.sh SIP/1000 "hello world" first_test_id
Envo de SMS mediante Nagios
Primero indicamos en /usr/local/nagios/etc/objects/commands.cfg que
existe un comando nuevo para ejecutar cosas. En este caso el comando
ejecuta una orden que manda sms. Nos vamos al final del fichero y ponemos
define command{
command_name host-notify-by-sms
command_line /usr/bin/wget --no-check-certificate
"https://myaccount.voicetrading.com/clx/sendsms.php?
username=usuario_betamax&password=password_betamax&from=+tu_n
umero_origen&to=+tu_movil_destion&text='$NOTIFICATIONTYPE$:
$HOSTNAME$ is $HOSTSTATE$ ($OUTPUT$)' " -O /tmp/SMS.resultado.xml
}

Ahora Nagios sabe que tiene que ejecutar cuando llegue el momento.
Como probablemente estemos puestos como nagiosadmin, estaremos
haciendo uso de generic-contact para notificaciones. Todo esto lo podemos
comprobar en /usr/local/nagios/etc/objects/contacts.cfg. Una vez que
sabemos quin somos y cmo se nos notifica (suponemos que estamos en
generic-contact), editamos /usr/local/nagios/etc/objects/templates.cfg y
veremos algo como
define contact{
name generic-contact
service_notification_period 24x7
host_notification_period 24x7
service_notification_options w,u,c,r,f,s
host_notification_options d,u,r,f,s
service_notification_commands notify-service-by-email
host_notification_commands notify-host-by-email
register 0 }
y aadiremos a host_notification_commands todos aquellos comandos que
queremos se ejecuten cuando hay problemas. En este caso, se llama host-
notify-by-sms. El resultado es:

define contact{
name generic-contact
service_notification_period 24x7
host_notification_period 24x7
service_notification_options w,u,c,r,f,s
host_notification_options d,u,r,f,s
service_notification_commands notify-service-by-email
host_notification_commands notify-host-by-email,host-notify-by-
sms
register 0
}

Con esto ya tenemos el sistema listo para enviar sms cuando el host en
cuestin se nos caiga o tenga problemas.