domingo, 6 de septiembre de 2015

Chequeos pasivos con Nagios, NSCA y Swatch

En el mundo del monitoreo de sistemas, Nagios es tal vez una de las más completas y utilizadas soluciones en ese rubro.



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



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

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 OUTPUT -p tcp -d IP_SERVER_NAGIOS --dport 5667 -j ACCEPT
-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). 

1 comentario:

  1. Buen día Juan Pablo, buscando información en la red encontré tu blog, muy interesante y gracias por la información, sin embargo tenía unas dudas, que quizás tu puedas ayudarme.

    necesito hacer un chequeo pasivo con Nagios y Check_mk de un grupo grande de equipos, es decir no quiero que todo la carga caiga sobre el servidor si no que los terminales sean los que mandan la información al servidor y este solo "vea" o "escuche" la información.

    te parece que se puede hacer de la menara que explicas en este blog o a tu parecer hay otra manera de hacerlo, es importante para nosotros tener un "live report" de los equipos.

    agradecido y atento a cualquier comentario.

    Ing. Pedro Alcalá

    ResponderEliminar