Generalmente, los chequeos que uno realiza son activos, es decir, se configura Nagios para controlar ciertos aspectos de distintos servicios/servidores.
Sin embargo, en ocasiones es necesario que el propio server que maneja servicios que se utilizan , realice los chequeos ante la presencia de algún evento en particular y luego le comunique a Nagios para que realice alguna acción eventualmente. Esto se conoce como chequeo pasivo en Nagios.
Tiene como desventajas principales la necesidad de estar realizando avisos periódicos desde el server a Nagios para notificar el estado del servicio a monitorear, y también una mayor complejidad en la configuración.
En la presente entrada voy a explicar una manera de implementar un chequeo de log sobre un servidor Linux utilizando tres componentes: Nagios, NSCA y Swatch.
NSCA
En palabras de Nagios: "NSCA es un demonio de Linux / Unix que permite integrar las alertas y controles pasivos de las máquinas remotas y aplicaciones con Nagios. Útil para las alertas de seguridad de proceso, así como las configuraciones de Nagios redundantes y distribuidos.".
Se implementa mediante un demonio a la escucha de avisos desde los diferentes servers, el cual notifica al servicio de Nagios correspondiente; y el agente send_nsca ubicado en el nodo a monitorear, quien se encarga de enviar el aviso al demonio NSCA del servidor Nagios.
Dicho demonio se recomienda que sea manejado por el servicio xinetd, quien se encarga de gestionar el acceso y funcionamiento seguro al servicio.
Swatch
Swatch (Simple Log Watcher) , es un software que aprovecha las virtudes de Perl para el trabajo con expresiones regulares, para realizar búsqueda de texto en archivos de texto.
El siguiente recuadro resume la disposición de cada elemento en el esquema que vamos a desarrollar:
Servidor Nagios
Configuración de NSCA
Para comenzar la implementación, en primera instancia desde el lado del servidor Nagios se debe levantar el demonio NSCA, y después habilitar el servicio Nagios.
Para lo primero, en el caso de un server Nagios instalado desde cero personalizadamente, se precisan descargar los fuentes desde Sourceforge, compilarlo y configurarlo como un demonio sobre xinetd. En caso de que Nagios corra sobre la máquina virtual que proporciona la firma no hay que realizar todo esto ya que viene incluido el binario con su configuración.
Para el segundo caso, se precisa únicamente configurar el acceso desde xinetd (/etc/xinetd.d/nsca) y la encripción de los datos (/usr/local/nagios/etc/nsca.cfg).
En /etc/xinetd.d/nsca se deben especificar los hosts o redes a aceptar para recibir los chequeos desde send_nsca:
only_from = REDES_O_HOSTS_A_ACEPTAR
En el archivo de configuración /usr/local/nagios/etc/nsca.cfg se debe especificar la autenticación de la comunicación con el server a monitorear:
password=contrasenia_secreta
decryption_method=10
Configuración del servicio pasivo
Para la configuración del servicio, se puede implementar un template para servicios pasivos y heredar desde el servicio a implementar desde él. En este caso se configura en /usr/local/nagios/etc/services/HOST_A_REVISAR.cfg lo siguiente:
define service{
use generic-service
name passive_service
active_checks_enabled 0
passive_checks_enabled 1 # We want only passive checking
flap_detection_enabled 0
register 0 # This is a template, not a real service
is_volatile 0
check_period 24x7
max_check_attempts 1
normal_check_interval 5
retry_check_interval 1
check_freshness 0
contact_groups admins
check_command check_dummy!0!"Initial OK"
notification_interval 60
notification_period 24x7
notification_options w,u,c,r
stalking_options w,c,u
}
define service{
use passive_service
service_description TestMessage
host_name localhost
check_freshness 1
freshness_threshold 60 # Time in second it will recheck and if not get result will alert as Critical
check_command check_dummy!2!"Didn't not got the response from Passive Check (Please Check)"
}
Servidor a chequear
Del lado del servidor a chequear, se debe instalar Swatch para revisar el o los logs correspondientes, y send_nsca para la notificación al servidor Nagios.
Send_nsca
Para instalar send_nsca se deben descargar los fuentes desde su repositorio en Sourceforge, compilarlos y configurar la aplicación:
[root@server ~]# cd /tmp; wget http://prdownloads.sourceforge.net/sourceforge/nagios/nsca-2.7.2.tar.gz ; tar xvfz nsca-2.7.2.tar.gz; cd nsca-2.7.2; ./configure
En este paso, es posible que se avise que no está instalado el módulo mcrypt, necesario para encriptar la comunicación entre NSCA y el server a monitorear. En dicho caso deberá ser instalado con sus herramientas de desarrollo:
[root@server nsca-2.7.2]# yum install libmcrypt libmcrypt-devel
Luego se compila y se copia el binario y la configuración a sus respectivos directorios:
[root@server nsca-2.7.2]# make all
[root@server nsca-2.7.2]# mkdir -p /usr/local/nagios/bin /usr/local/nagios/etc
[root@server nsca-2.7.2]# cp src/send_nsca /usr/local/nagios/bin/
[root@server nsca-2.7.2]# cp sample-config/send_nsca.cfg /usr/local/nagios/etc/
[root@server nsca-2.7.2]# cd /usr/local/nagios/etc
Paso siguiente, se configuran las credenciales de acceso a NSCA:
[root@server etc]# vi send_nsca.cfg
password=contrasenia_secreta
encryption_method=10
Swatch
Bajar Swatch y descomprimirlo en /tmp desde http://sourceforge.net/projects/swatch/files/latest/download
Correr archivo Makefile.pl para generar Makefile :
[root@server swatch-3.2.3]# perl Makefile.PL
Checking if your kit is complete...
Looks good
Warning: prerequisite Date::Calc 0 not found.
Warning: prerequisite Date::Format 0 not found.
Warning: prerequisite Date::Manip 0 not found.
Warning: prerequisite File::Tail 0 not found.
Writing Makefile for swatch
Checking if your kit is complete...
Looks good
Warning: prerequisite Date::Calc 0 not found.
Warning: prerequisite Date::Format 0 not found.
Warning: prerequisite Date::Manip 0 not found.
Warning: prerequisite File::Tail 0 not found.
Writing Makefile for swatch
En caso que falten módulos, instalarlos (Ver http://www.thegeekstuff.com/2008/09/how-to-install-perl-modules-manually-and-using-cpan-command/)
Ejemplo:
[root@server swatch-3.2.3]# cpan
Terminal does not support AddHistory.
cpan shell -- CPAN exploration and modules installation (v1.7602)
ReadLine support available (try 'install Bundle::CPAN')
cpan>install Date::Calc
Terminal does not support AddHistory.
cpan shell -- CPAN exploration and modules installation (v1.7602)
ReadLine support available (try 'install Bundle::CPAN')
cpan>install Date::Calc
Luego se debe instalar Swatch:
[root@server swatch-3.2.3]# make [root@server swatch-3.2.3]# make test [root@server swatch-3.2.3]# make install [root@server swatch-3.2.3]# make realclean Posteriormente , se debe crear el archivo de configuración de Swatch:
[root@server swatch-3.2.3]# mkdir -p /usr/local/swatch/etc/
[root@server swatch-3.2.3]# cd /usr/local/swatch/etc/
En el archivo .swatchrc se indican las acciones al encontrar un match con la expresión a buscar. En este caso, al encontrar un matching, se graban en archivos temporales la línea del log y el código de error correspondiente a un warning; así como también se ejecuta el script que envía al servidor Nagios la información necesaria:
[root@server etc]# vi .swatchrc
watchfor /string_a_revisar/
exec "echo $_ > /var/run/svc_alertlogerr.msg"
exec "echo 2 > /var/run/svc_alertlogerr.stat"
exec "sh /usr/local/nagios/bin/svc_alertlogerr_stat.sh"
[root@server etc]# chmod 755 .swatchrc
Luego se setea en el archivo /etc/init.d/swatch a Swatch como un demonio para que permanezca continuamente revisando el o los logs:
#!/bin/bash
# Simple Log Watcher Init Script
case "$1" in
'start')
echo "0" > /var/run/svc_alertlogerr.stat
/usr/bin/swatch --daemon --config-file=/usr/local/swatch/etc/.swatchrc --tail-file=/var/log/messages --pid-file=/var/run/swatch.pid
;;
'stop')
PID=`cat /var/run/swatch.pid`
kill $PID
;;
*)
echo "Usage: $0 { start | stop }"
;;
esac
exit 0
[root@server init.d]# chmod 755 swatch
Posteriormente, se agenda una tarea en cron para que envíe al servidor Nagios el aviso de que el servicio está vivo según la frecuencia de refresco especificada en el servicio pasivo de Nagios:
[root@server etc]# crontab -e
*/2 * * * * /usr/local/nagios/bin/svc_alertlogerr_stat.sh
Se debe agregar también una regla de iptables en /etc/sysconfig/iptables para aceptar la salida y entrada del server Nagios a través del puerto 5667 que utiliza NSCA por defecto, además de permitir el ping entrante para el control de actividad general del servidor en Nagios:
-A INPUT -p tcp -d IP_SERVER_NAGIOS --sport 5667 -j ACCEPT
-A INPUT -p icmp -d IP_SERVER_NAGIOS --icmp-type echo-request -j ACCEPT
-A OUTPUT -p icmp -d IP_SERVER_NAGIOS --icmp-type echo-reply -j ACCEPT
Por último, en el servidor Nagios se deben reiniciar los servicios de xinetd y Nagios. Del lado del server a monitorear se deben reiniciar los servicios de iptables y ejecutar por primera vez el script de swatch (/etc/init.d/swatch).