Buscar en este blog

9.4.12

Chequeos pasivos con Nagios 3.x (NSCA)

Aclaraciones previas
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     
        [...]