Translate

miércoles, abril 29, 2015

Monitorización de procesos Windows con Nagios



 
En ocasiones nos podremos encontrar con la necesidad de monitorizar con Nagios un proceso (entendido como aplicación en ejecución) que se encuentra en ejecución en un sistema Windows.  Para ello se puede emplear  el plugin check_winprocess (https://www.itefix.no/i2/check_winprocess ) creado por la empresa Itefix.
 
Se trata de un plugin basado en NRPE, aplicación que permite ejecutar remotamente plugins de Nagios en otras máquinas, bajo Linux o bajo Windows.


  

 
Para hacer funcionar NRPE en el cliente se ha utilizado NSClient++, concretamente la versión 0.3.9 :http://sourceforge.net/projects/nscplus/files/nscplus/NSClient%2B%2B%200.3.9/. La última versión de NSClient++ a fecha de creación de este artículo (0.4.1.73) no funciona correctamente  para nuestro propósito. 
 

Una vez instalado NSClient++ (marcar como mínimo check_nrpe en el proceso de instalación) deberemos copiar el ejecutable check_winprocess.exe dentro del directorio scriptsde NSClient++. En nuestro caso la ruta es C:\Program Files\NSClient++\scripts . Además deberemos copiar el fichero check_winprocess.pl en el directorio libexec de Nagios en nuestro servidor de monitorización.

A continuación se deberán añadir al final del fichero de configuración NSC.ini ubicado en c:\ Program Files\NSClient++ unas líneas similares a las siguientes:

[NRPE Handlers]
command[nombre_check]=Path_WinProcess_NSClient\check_winprocess.exe –filter “imagename comparador(eq,ne,…) nombreProceso_a_Monitorizar.exe

Por ejemplo, vamos a monitorizar una serie de procesos asociados a una aplicación, para lo cual accedemos al administrador de tareas de Windows:





 [NRPE Handlers]
command[check_proc_StrLive]=C:\Program Files\NSClient++\scripts\check_winprocess\check_winprocess.exe --filter "imagename eq StreamLive.exe"
command[check_proc_DRBatch]=C:\Program Files\NSClient++\scripts\check_winprocess\check_winprocess.exe --filter "imagename eq DRBatchServer.exe"
command[check_proc_KMOOP]=C:\Program Files\NSClient++\scripts\check_winprocess\check_winprocess.exe --filter "imagename eq KMOOPEncoder.exe"
command[check_proc_KMMuxer]=C:\Program Files\NSClient++\scripts\check_winprocess\check_winprocess.exe --filter "imagename eq KMMuxer.exe"

De forma que añadimos al final del fichero NSC.ini las líneas indicadas:



Una vez creados nuestros manejadores en el sistema Windows, se deberán añadir los comandos oportunos a nuestro servidor Nagios (en el fichero commands.cfg):



Vamos a hacer uso de check_nrpe, como se ha indicado al comienzo de este artículo, y necesitaremos conocer la IP del sistema Windows a monitorizar y el nombre del manejador que hemos indicado en el fichero NSC.ini del NSClient++.

El formato del comando a utilizar:

Check_nrpe  –H   IP_EquipoWindows  –c   handler_NSC_ini

Una vez creado el comando, se puede añadir al fichero de monitorización del equipo en Nagios (en el directorio servers de nagios):




En este caso emplearemos el nombre definido en commands.cfg

Ya sólo queda reiniciar Nagios para que coja la nueva configuración:





Y observar los resultados:






INFORMACIÓN SOBRE WINPROCESS


NAME
   check_winprocess - Nagios NRPE plugin for checking processes

SYNOPSIS
   check_winprocess [--filter *filter spec*[,*filter spec*] ... ] ... ]
   [--warning *threshold*] [--critical *threshold*] [--compare *operator*]
   [--first *number*] [--kill] [--verbose] [--help]

DESCRIPTION
   check_winprocess is a Nagios NRPE plugin for checking processes by using
   criteria like status, name, cpu and memory usage and many more. You can
   also specify if the processes meeting the criteria will be killed.
   check_process uses Windows tools *tasklist* and *taskkill* (available in
   XP and later).

OPTIONS
   --filter *filter spec*[,*filter spec*] ... ] ... ]
       Specify filters to select processes. A *filter spec* consists of
       three fields: filter name, operator and value. You can specify
       several comma separated filters for one --filter option, as well as
       several --filter options. Defaults to all processes if no filter is
       defined. List of filters available (see tasklist documentation for
       more help):

        Filter Name     Valid Operators           Valid Value(s)
        -----------     ---------------           --------------
        STATUS          eq, ne                    RUNNING | NOT RESPONDING
        IMAGENAME       eq, ne                    Image name
        PID             eq, ne, gt, lt, ge, le    PID value
        SESSION         eq, ne, gt, lt, ge, le    Session number
        SESSIONNAME     eq, ne                    Session name
        CPUTIME         eq, ne, gt, lt, ge, le    CPU time in the format
                                                  of hh:mm:ss.
                                                  hh - hours,
                                                  mm - minutes, ss - seconds
        MEMUSAGE        eq, ne, gt, lt, ge, le    Memory usage in KB
        USERNAME        eq, ne                    User name in [domain\]user
                                                  format
        SERVICES        eq, ne                    Service name
        WINDOWTITLE     eq, ne                    Window title
        MODULES         eq, ne                    DLL name

   --warning *threshold*
       Return WARNING if the number of processes matching the criteria is
       more than *threshold*. Optional.

   --critical *threshold*
       Return CRITICAL if the number of processes matching the criteria is
       more than *threshold*. Optional.

   --compare *operator*
       Specify the type of comparison operator for threshold checks.
       Optional. Available values are:

        'eq'  equal to
        'ne'  not equal
        'gt'  greater than (default!)
        'ge'  greater or equal
        'lt'  less than
        'le'  less or equal

   --first *number*
       List process names as a part of plugin output. The first specified
       number of processes will be selected. Optional.

   --kill
       Kill the processes matching the filtering criteria. Useful as an
       action handler. Works only if at least one filter is defined.
       Optional.

   --verbose
       Increase output verbosity for debugging.

   --help
       Produce a help message.

EXAMPLES
    check_winprocess.exe --warn 100 --critical 300

   Checks the total number of processes in memory and returns WARNING for
   more than 100 processes or CRITICAL for more than 300 processes.

    check_winprocess.exe --filter "imagename eq runaway.exe","cputime gt 01:00:00" --critical 1

   Checks if there exists *runaway.exe* processes with CPU time longer than
   one hour, returns CRITICAL if there was at least one process.

    check_winprocess.exe --filter "imagename eq A.EXE","imagename eq B.EXE","imagename eq C.EXE" --compare ne --critical 3

   Checks if there exists A.EXE, B.EXE and C.EXE processes, returns CRITICAL
   if the number of processes is not 3.

    check_winprocess.exe --filter "memusage gt 102400" --filter "status eq NOT RESPONDING" --kill --critical 1

   Checks if there exists processes with memory consumption more than 100 MB
   and in *NOT RESPONDING* state, kills them and returns CRITICAL if there
   was at least one process.

EXIT VALUES
    0 OK
    1 WARNING
    2 CRITICAL
    3 UNKNOWN

No hay comentarios: