Recibiendo llamadas telefónicas con las notificaciones de Centreon

Bueno, bueno… que vienen curvas… si tienes un sistema de monitorización de Centreon, o basado en Nagios o similar, quizá este post te interese. Lo que vamos a ver es cómo generar las alertas tradicionales de nuestra monitorización, pero esta vez no usaremos alertas por mail o Telegram, si no que hará una llamada telefónica usando una centralita IP que dispongamos en la organización, con ella nos llamará al teléfono que indiquemos y en perfecto castellano nos indicará el problema que existe.

 

Así que lo dicho, si dispones de una centralita de Voz IP y quieres que la monitorización pueda hacer llamadas de teléfono para advertirte con un mensaje de qué Servicio o Servidor se ha caído, no tendrás más que seguir estos sencillos pasos. Si no tienes una centralita VoIP te animo a que montes FreePBX, verás que rápido podrás hacer llamadas voz IP dentro de tu organización, o externas si es que por ejemplo usas la fibra de Movistar, Vodafone… Estos son los pasos que debes seguir en tu máquina de Centreon si quieres que ella pueda hacer llamadas automáticamente.

 

Empezamos instalando Festival y PJPROJECT que lo compilaremos:

yum install expect festival
wget http://www.pjsip.org/release/2.8/pjproject-2.8.tar.bz2
tar xjf pjproject-2.8.tar.bz2
cd pjproject-2.8
./configure
make dep
make

 

Nos generará este binario:

/root/pjproject-2.8/pjsip-apps/bin/pjsua-x86_64-unknown-linux-gnu

 

Deberemos crear un fichero de configuración para PJSUA, donde indicaremos el acceso a nuestra centralita IP con los credenciales correctos para registrarnos y poder realizar llamadas. En mi caso lo dejo aquí ‘/root/pjproject-2.8/pjsip-apps/bin/pjsua.conf’ y este es su contenido:

--null-audio
--registrar sip:DIRECCION_IP_CENTRALITA
--realm=*
--id sip:USUARIO@DIRECCION_IP_CENTRALITA
--username USUARIO
--password CONTRASEÑA

 

Ahora, lo que haremos será crear un script que lo usaremos para realizar la llamada, en mi caso un nombre super intuitivo ‘llama.sh’, este script será ejecutado por Centreon cuando tenga que notificar, al que le pasará como argumento el mensaje que tiene que leernos en la llamada. Indicamos los directorios para Expect, PJSUA y su fichero de configuración que acabamos de crear; así mismo podremos añadir un fichero wav con el sonido de alguna alerta que sonará antes del audio, indicaremos el path del binario Text2wave, la duración de la llamada máxima y como no, el número de teléfono que debe marcar para hacer la llamada, por último la dirección IP de la centralita IP. Así que lo dicho, el contenido de ‘llama.sh’

#! /bin/bash
EXPECT=/usr/bin/expect
PJSUA=/root/pjproject-2.8/pjsip-apps/bin/pjsua-x86_64-unknown-linux-gnu
PJSUACONFIG=/root/pjproject-2.8/pjsip-apps/bin/pjsua.conf
SOUNDFILE=/tmp/alert.wav
TEXT2WAVE=/usr/bin/text2wave
DURATION=20
NUMBER=NUMERO_DE_TELEFONO_A_MARCAR
CENTRALITA = DIRECCION_IP_DE_LA_CENTRALITA
MESSAGE="Monitoring Alert"

# Setting a lock file
# We can't make more than one call
# at a time, because pjsua blocks the port
# so we have to make sure that nobody else tries to call
# If there is already a call we have to wait.

locked=false
while $locked == false ; do
 if ! -f /tmp/caller.lock ; then
  touch /tmp/caller.lock
  locked=true
 else
  sleep 5
 fi
done

# Generating the message
$TEXT2WAVE -o $SOUNDFILE -f 8000 << EOF
$MESSAGE
EOF

# Making the call it self.
# Expect will start pjsua and work with
# it so that it will end it self automatically

$EXPECT << EOF
spawn $PJSUA --config-file $PJSUACONFIG --play-file $SOUNDFILE --auto-play --duration $DURATION --max-calls 1 sip:$NUMBER@$CENTRALITA
expect "VAD re-enabled"
sleep $DURATION
send "q\n"
EOF

# Cleaning up
rm $SOUNDFILE

# Removing the lock file
rm /tmp/caller.lock

 

Podremos hacer si queremos una prueba ahora para ver si va todo bien, bastará con ejecutar el script anterior y entrecomillar como argumento el mensaje que queremos que nos diga por teléfono:

./llama.sh "Hola, esto es un mensaje de prueba que escucharás en ingles de la muerte"

 

Si queremos que la llamada sea en castellano o español, deberemos además realizar estos últimos pasos. Instalaremos las voces de HISPAVOCES, un proyecto de Guadalinex donde nos dejan 2 voces que hablan perfectamente el castellano, no suenan a robot 🙂 Escogeremos si usar la voz femenina o masculina.

yum install hispavoces-pal-diphone hispavoces-sfl-diphone

 

Editamos el fichero de Festival, donde indicaremos que utilice las nuevas voces, editamos ‘/usr/share/festival/lib/voices.scm’ y sobre la línea 328 podremos modificar directamente y añadir una de estas dos voces

...
(defvar default-voice-priority-list
'(JuntaDeAndalucia_es_pa_diphone
nitech_us_slt_arctic_hts
...

 

Y si os digo la verdad, los siguientes apuntes no los recuerdo por qué los tengo anotados… Quizá no me reconocería las 2 voces… pero vaya, lo que vemos aquí es cómo instalar las voces que nos dan la buena gente de Guadalinex mediante RPM (acordaros que la distro de Centreon se basa en un CentOS), pero claro, lo que nos podemos descargar de ellos es en DEB, así que lo que hacemos es descargar, compilar e instalar Alien (y sus requisitos) para posteriormente descargarnoz la voz en .DEB y convertirla a .RPM e instalarla. Al final movemos los ficheros que nos habrá generado al path correcto de Festival y sus voces en castellano

yum install rpm-build
cd /usr/src
wget http://ftp.de.debian.org/debian/pool/main/a/alien/alien_8.92.tar.gz
tar -xf alien_8.92.tar.gz
cd alien
perl Makefile.PL
make
make install

wget https://github.com/guadalinex-archive/hispavoces/raw/master/packages/festvox-palpc16k_1.0-1_all.deb
alien -rv festvox-palpc16k_1.0-1_all.deb
rpm -ivh festvox-palpc16k-1.0-2.noarch.rpm

mv /usr/share/festival/voices/spanish/ /usr/share/festival/lib/voices/es/

 

Ahora de nuevo podréis probar a hacer la llamada igual que antes y veréis como ahora sí nos habla un señor o señora perfectamente en español,

./llama.sh "Hola, esto es un mensaje de prueba que escucharás perfectamente"


Tras disponer ya de toda la configuración lista y el script funcionando, nos toca decirle a Centreon que cuando genere alguna notificación nos llame por teléfono, para ello, lo primero será dar de alta los Comados de las Notificaciones, así que creamos 2, uno para cuando nos notifique de los Hosts y otro para los Servicios. Desde “Configuration” > “Commands” > “Notifications” los definimos, quedando:

 

Llamadas_servicios

/home/llama.sh "En el equipo $HOSTNAME$ el Servicio $SERVICEDESC$ está en estado $SERVICESTATE$"

 

Llamadas_hosts

/home/llama.sh "El equipo $HOSTNAME$ esta en estado $HOSTSTATE$"

 

Y luego ya no queda más que asociarlo, por ejemplo, al usuario o grupo que queramos que reciba la llamada, se los asociamos en “Host Notification Commands” y en “Service Notification Commands”. Como siempre, tras cualquier cambio de configuración, exportamos y grabamos la config de Centreon y a partir de este momento, cuando exista una alerta en nuestro CPD o en nuestra empresa, recibiremos llamadas telefónicas indicándonos cuál es el problema. No me digáis que no es genial para cuando tenemos personal de guardia y queremos despertarle a la hora que sea para que actúe, ¡una maravilla!

Como siempre espero os haya interesado y gracias por compartir en las redes sociales.

 

Héctor Herrero

Autor del blog Bujarra.com
Cualquier necesidad que tengas, no dudes en contactar conmigo, os intentare ayudar siempre que pueda, compartir es vivir 😉 . Disfrutar de los documentos!!!