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 scripts de 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