NSCA es una pequeña pieza de software creada específicamente para permitir "passive checks" en Nagios. Tras su compilación, ofrece dos herramientas: El receptor de mensajes 'nsca', que irá instalada en el servidor central de Nagios y el programa que permite enviar mensajes al receptor. Esta parte irá instalada en los clientes que se monitorizan.
En realidad y dado que ambos programas están integrados en el mismo paquete de software en todas las distribuciones Linux, normalmente ambos se instaland en servidor Nagios y clientes, usando en cada uno solamente la parte realmente necesaria.
Sea como fuere, se debe disponer de una instalación operativa de Nagios 3.x (en principio sirve en versiones anteriores, pero no lo he testeado en todas) con algún cliente monitorizado.
Configurando Nagios para aceptar chequeos pasivos
Asegurarse que Nagios está arrancado con las siguientes opciones en "nagios.cfg":
log_passive_checks=1
accept_passive_service_checks=1
accept_passive_host_checks=1
translate_passive_host_checks=0
passive_host_checks_are_soft=0
Instalar el paquete NSCA. Si la distribución utilizada lo soporta, instalarlo con el gestor de paquetes adecuado. También se puede compilar a mano, opción recomendada si nagios fué también compilado a mano. Para compilarlo e instalarlo valdría algo como lo siguiente:
#> cd /tmp
#> wget http://downloads.sourceforge.net/project/nagios/nsca-2.x/nsca-2.9.1/nsca-2.9.1.tar.gz
#> tar xvfz nsca-2.9.1.tar.gz
#> cd nsca-2.9.1
#> export NAGIOS_PATH="Ruta de instalación de Nagios"
#> ./configure --prefix=$NAGIOS_PATH
#> make
#> make all
Los archivos compilados están en ./src
Makefile
Makefile.in
netutils.c
nsca #Binario del servidor receptor de chequeos pasivos
nsca.c
send_nsca #Binario que permite enviar mensajes de chequeo pasivo al servidor
send_nsca.c
utils.c
Como se está configurando el servidor, debemos hacer uso del binario "nsca", que copiaremos en algún lugar de la instalación de la instalación de Nagios:
#> mkdir /opt/nagios-3.3.1/nsca-2.9.1
#> cp nsca /opt/nagios-3.3.1/nsca-2.9.1
Generar un archivo de configuración con los parámetros que debe ejecutarse el servicio de "nsca". A continuación, los mínimos necesarios. Revisar para su configuración en particular.
#> vi /opt/nagios-3.3.1/nsca-2.9.1/nsca.cfg
log_facility=daemon
pid_file=/var/run/nsca.pid
server_port=5667
nsca_user=nagios
nsca_group=nagios
debug=0
command_file=/opt/nagios-3.3.1/var/rw/nagios.cmd
alternate_dump_file=/opt/nagios-3.3.1/var/rw/nsca.dump
aggregate_writes=0
append_to_file=0
max_packet_age=30
decryption_method=1
password=CONTRASENHA
Ahora se debe definir un nuevo tipo de servicio en Nagios que permita los chequeos pasivos. Después de deben definir qué servicios de qué hosts serán pasivos, pero esta parte se explicará más adelante.
/opt/nagios-3.3.1/etc/objects/templates.cfg
[...]
define service{
name passive-service
active_checks_enabled 0
passive_checks_enabled 1
parallelize_check 1
notifications_enabled 1
event_handler_enabled 1
register 0
is_volatile 1
parallelize_check 1
obsess_over_service 1
check_freshness 0
flap_detection_enabled 1
failure_prediction_enabled 1
process_perf_data 1
retain_status_information 1
retain_nonstatus_information 1
check_period 24x7
max_check_attempts 3
normal_check_interval 10
retry_check_interval 2
contact_groups admins
notification_options u,c,r
notification_interval 10
notification_period 24x7
}
[...]
También se debe definir un nuevo "command" tonto:
/opt/nagios-3.3.1/etc/objects/commands.cfg
[...]
# Comando para chequeos pasivos
define command {
command_name check_dummy
command_line $USER1$/check_dummy $ARG1$ "$ARG2$"
}
[...]
Iniciar el demonio "nsca"
Hay varias opciones para hacer esto. La recomendada es utilizar "xinet" para gestionarlo, aunque también se puede ejecutar como servicio aislado y controlarlo con scripts en "init.d". En cualquier caso esto no se explica y se remite a alguno de los siguientes enlaces:
http://raman-kumar.blogspot.com.es/2010/03/nagios-nsca-setup-details.html
Configurar el cliente para enviar mensajes
Instalar "nsca" en la máquina cliente de forma similar al servidor. El programa a utilizar será "send_nsca" y se deberá crear un archivo con las opciones de ejecución similar al siguiente:
./send_nsca.cfg
password=CONTRASENHA
encryption_method=1
Se puede probar a enviar mensajes directamente al servidor nagios-nsca de la siguiente forma:
#echo "mensaje" | send_nsca -H IP_Nagios -d ';' -c send_nsca.cfg
donde:
el mensaje debe tener una estructura como la siguiente: HOSTNAME;SERVICIO;{1,2,3};MENSAJE
HOSTNAME: Es el nombre con el que está definido el cliente en nagios respecto al cual se hace el chequeo.
SERVICIO: Es el nombre con el que está definido el servicio en el cliente en nagios respecto al cual se hace el chequeo.
1,2,3: OK, Warning, Critical
MENSAJE: Texto que aparecerá en en campo "Status Information" de Nagios
';' es el delimitador que separa los campos del "mensaje".
Si se ejecuta este ejemplo, como no se ha definido en nagios ningún servicio pasivo, no ocurrirá nada, excepto que aparezca un mensaje como el siguiente:
1 data packet(s) sent to host successfully.
Que indica que el cliente se "habla" correctamente con el servidor.
El siguiente paso es definir un servicio en nagios para el cliente que se chequee de forma pasiva
Definiendo servicio pasivo
El ejemplo más clásico de chequeo pasivo son los traps snmp. El cliente chequea el estado de sus servicios internamente y cuando debe notificar un cambio, solo en ese momento, se pone en contacto con el servidor de monitorización para indicarle en cambio.
Como jugar con traps en nagios necesita de más piezas, se va a suponer que en el cliente se hace el chequeo pasivo del espacio libre en disco. En el cliente existirá un script, posiblemente ejecutado mediante CRON, que comprobará el espacio libre en disco. En caso de superar cierto límite, el script ejecutará además un comando "send_nsca" que enviará el aviso a nagios que mostrará la alarma correpondiente
Definición del servicio pasivo en nagios:
/opt/nagios-3.3.1/etc/objects/cliente.cfg
define service{
use passive-service
host_name cliente.domain.tld
service_description Disk Free
check_command check_dummy
notifications_enabled 1
}
El script que se ejecutaría en el cliente sería similar al siguiente:
[...]
#Comprueba espacio libre
# Si espacio libre < limite, entonces
echo "cliente.domain.tld;Disk Free;3;Espacio insuficiente en disco" | send_nsca -H IP_Nagios -d ';' -c send_nsca.cfg
[...]