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
Comentarios