Nagios Plugin · 7 min read · Nov 18, 2025
Cómo escribir un plugin de verificación personalizado para Nagios
Este tutorial fue probado usando Nagios Core 4.3.4 en Debian 9.2
A pesar de que Nagios Exchange tiene miles de plugins disponibles para descargar de forma gratuita, a veces el estado que se necesita verificar es muy específico para tu escenario.
Consideraciones
Se asume que:
- Tienes Nagios instalado y en funcionamiento (Puedes seguir este Tutorial si no).
- Conoces lo básico sobre la administración de Nagios.
El servidor Nagios en este ejemplo está alojado en 192.168.0.150 y un cliente de ejemplo está alojado en la IP 192.168.0.200
Códigos de Salida
Para identificar el estado de un servicio monitoreado, Nagios ejecuta un plugin de verificación en él. Nagios puede determinar cuál es el estado del servicio leyendo el código de salida de la verificación.
Nagios entiende los siguientes códigos de salida:
- 0 - El servicio está OK.
- 1 - El servicio tiene una ADVERTENCIA.
- 2 - El servicio está en un estado CRÍTICO.
- 3 - El estado del servicio es DESCONOCIDO.
Un programa puede ser escrito en cualquier lenguaje para funcionar como un plugin de verificación de Nagios. Basado en la condición verificada, el plugin puede hacer que Nagios sea consciente de un servicio que no funciona correctamente.
Plugin de Ejemplo
Usaré un ejemplo simple. Escribí un plugin en un script bash para verificar las Advertencias actuales. Supongamos que tengo el servidor Nagios configurado para alertar solo en estado crítico, así que quiero una alerta si tengo demasiados servicios en estado de Advertencia.
Considera el siguiente script (check_warnings.sh):
#!/bin/bash
countWarnings=$(/usr/local/nagios/bin/nagiostats | grep "Ok/Warn/Unk/Crit:" | sed 's/[[:space:]]//g' | cut -d"/" -f5)
if (($countWarnings<=5)); then
echo "OK - $countWarnings servicios en estado de Advertencia"
exit 0
elif ((6<=$countWarnings && $countWarnings<=30)); then
# Este caso no tiene sentido porque solo agrega una advertencia.
# Es solo para hacer un ejemplo de todas las salidas posibles.
echo "ADVERTENCIA - $countWarnings servicios en estado de Advertencia"
exit 1
elif ((30<=$countWarnings)); then
echo "CRÍTICO - $countWarnings servicios en estado de Advertencia"
exit 2
else
echo "DESCONOCIDO - $countWarnings"
exit 3
fiBasado en la información proporcionada por la herramienta nagiostats, asumo que todo está bien si hay cinco o menos servicios en estado de Advertencia.
Dejaré este script con todos los otros plugins de Nagios dentro de /usr/local/nagios/libexec/ (Este directorio puede ser diferente dependiendo de tu configuración).
Como cada plugin de Nagios, querrás verificar desde la línea de comandos antes de agregarlo a los archivos de configuración.
Recuerda permitir la ejecución del script:
sudo chmod +x /usr/local/nagios/libexec/check_warnings.shY luego ejecutarlo como cualquier otro script:
El resultado es un mensaje de texto y un código de salida:
Establecer un Nuevo Comando de Verificación y Servicio
Este paso será el mismo con tus propios plugins, y si descargas un plugin de terceros de internet también.
Primero debes definir un comando en el archivo commands.cfg. La ubicación de este archivo depende de la configuración que hayas realizado, en mi caso está en /usr/local/nagios/etc/objects/commands.cfg.
Así que agregaré al final del archivo el siguiente bloque:
# Comandos de plugins personalizados...
define command{
command_name check_warnings
command_line $USER1$/check_warnings.sh
}Recuerda que la variable $USER1$ es una variable local de Nagios establecida en el archivo resource.cfg, en mi caso apuntando a /usr/local/nagios/libexec.
Después de definir el comando, puedes asociar ese comando a un servicio, y luego a un host. En este ejemplo vamos a definir un servicio y asignarlo a localhost, porque esta verificación es en Nagios mismo.
Edita el archivo /usr/local/nagios/etc/objects/localhost.cfg y agrega el siguiente bloque:
# Ejemplo - Verificar advertencias actuales...
define service{
use local-service
host_name localhost
service_description Advertencias del Servidor Nagios
check_command check_warnings
}Ahora estamos listos, lo único que falta es recargar Nagios para leer los archivos de configuración nuevamente.
Siempre recuerda, antes de recargar Nagios, verifica que no haya errores en la configuración. Haces esto con el comando nagios -v como root:
sudo /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfgDeberías obtener algo como esto:

Asegúrate de que devuelva 0 errores y 0 advertencias y procede a recargar el servicio:
sudo systemctl reload-or-restart nagios.serviceDespués de recargar el servicio, verás la verificación asociada en el localhost. Primero como pendiente:
Y después de la ejecución con su resultado:
Usar NRPE para ejecutar en Clientes
Para ejecutar un script en un cliente remoto, necesitarás configurar el Ejecutor de Plugins Remotos de Nagios (NRPE)
Como este tutorial se basa en Debian 9, mostraré como ejemplo cómo instalarlo, pero puedes encontrar instrucciones para cualquier distribución.
Instalación genérica en Cliente basado en Debian
Ten en cuenta que toda la configuración en esta sección se realiza en el cliente que se va a verificar, no en el servidor nagios.
Instala NRPE y los plugins de Nagios:
sudo apt-get install libcurl4-openssl-dev nagios-plugins nagios-nrpe-server nagios-nrpe-plugin --no-install-recommends
sudo ln -s /usr/lib/nagios/plugins/check_nrpe /usr/bin/check_nrpePermite que el servidor Nagios ejecute comandos en el cliente agregándolo a la entrada allowed_hosts en /etc/nagios/nrpe.cfg. La línea debería verse así:
allowed_hosts=127.0.0.1,::1,192.168.0.150Define las verificaciones estándar que realizarás en cada cliente con NRPE. Define las verificaciones en /etc/nagios/nrpe_local.cfg. Por ejemplo, un modelo para el archivo podría ser:
######################################
# Realiza cualquier configuración local de nrpe aquí
######################################
#-----------------------------------------------------------------------------------
# Usuarios
command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10
# Carga
command[check_load]=/usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20
command[check_zombie_procs]=/usr/lib/nagios/plugins/check_procs -w 5 -c 10 -s Z
command[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 150 -c 200
# Disco
command[check_root]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /
command[check_boot]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /boot
command[check_usr]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /usr
command[check_var]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /var
command[check_tmp]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /tmp
# Si deseas agregar un punto de montaje no estándar:
# command[check_mnt1]=/usr/lib/nagios/plugins/check_disk -w 4% -c 1% -p /export
#-----------------------------------------------------------------------------------La idea de tener ese archivo genérico es que puedas verificar lo mismo en cada cliente.
Asegúrate de que el archivo local y el directorio .d estén incluidos en el archivo de configuración principal con:
cat /etc/nagios/nrpe.cfg | grep include | grep -v ^#Reinicia el servicio:
sudo systemctl restart nagios-nrpe-server.serviceVerifica que el servicio NRPE esté en funcionamiento:
cat /etc/services | grep nrpe
netstat -at | grep nrpeAhora verifica uno de los comandos NRPE definidos anteriormente desde el servidor Nagios:
Ten en cuenta que el comando check_users NRPE fue definido en el archivo /etc/nagios/nrpe_local.cfg para ejecutar /usr/lib/nagios/plugins/check_users -w 5 -c 10.
En caso de que no tengas el plugin en el servidor Nagios, puedes instalarlo con:
sudo apt-get install nagios-nrpe-pluginAsí que, resumiendo, el NRPE ejecutará un script en un host remoto y devolverá el código de salida al servidor Nagios.
Configuración para Scripts Personalizados
Para usar un script personalizado como un plugin para ejecutar de forma remota a través de NRPE, primero debes escribir el script en el servidor, por ejemplo en /usr/local/scripts/check_root_home_du.sh:
#!/bin/bash
homeUsage=$(du -s /root/ | cut -f1)
if (($homeUsage<=$((1024*1024)))); then
echo "OK - El uso del hogar raíz es $(du -sh /root/ | cut -f1)"
exit 0
elif (($((1024*1024))<$homeUsage && $homeUsage<=$((3*1024*1024)))); then
echo "ADVERTENCIA - El uso del hogar raíz es $(du -sh /root/ | cut -f1)"
exit 1
elif (($((3*1024*1024))<$homeUsage)); then
echo "CRÍTICO - El uso del hogar raíz es $(du -sh /root/ | cut -f1)"
exit 2
else
echo "DESCONOCIDO - Valor recibido: $homeUsage"
exit 3
fiPermite la ejecución del script:
sudo chmod +x /usr/local/scripts/check_root_home_du.shEl script anterior es un ejemplo muy simple, verificando el uso del disco del directorio /root y estableciendo un umbral para considerarlo OK, Advertencia o Crítico.
Agrega el comando al archivo de configuración de NRPE en el cliente (/etc/nagios/nrpe_local.cfg):
# Personalizado
command[check_root_home_du]=/usr/local/scripts/check_root_home_du.shY reinicia el listener de NRPE:
sudo systemctl restart nagios-nrpe-server.serviceAhora podemos acceder al servidor y probarlo como cualquier plugin estándar
Establecer la Verificación NRPE en los Archivos de Configuración del Servidor
Ahora sabemos que el plugin personalizado está funcionando en el cliente y en el servidor, y que el NRPE se está comunicando correctamente, podemos proceder a configurar los archivos de Nagios para verificar el dispositivo remoto. Así que en el servidor establece los archivos:
/usr/local/nagios/etc/objects/commands.cfg:
#...
define command{
command_name check_nrpe
command_line /usr/lib/nagios/plugins/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}/usr/local/nagios/etc/objects/nrpeclient.cfg:
define host{
use linux-server
host_name nrpeclient
alias nrpeclient
address 192.168.0.200
}
define service{
use local-service
host_name nrpeclient
service_description Uso del Hogar Raíz
check_command check_nrpe!check_root_home_du
}Ten en cuenta que el símbolo ! separa el comando de los argumentos en la entrada check_command. Esto define que check_nrpe es el comando y check_root_home_du es el valor de $ARG1$.
Además, dependiendo de tu configuración, deberías agregar este último archivo al archivo principal (/usr/local/nagios/etc/nagios.cfg):
#...
cfg_file=/usr/local/nagios/etc/objects/nrpeclient.cfg
#...Verifica la configuración y, si no hay errores o advertencias, recarga el servicio:
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfgsudo systemctl reload-or-restart nagios.serviceY ahora tienes una nueva verificación personalizada en un host:
Conclusión
Nagios tiene una enorme biblioteca de plugins disponibles en Nagios Exchange. Sin embargo, en un entorno grande es muy probable que necesites algunas verificaciones personalizadas para usos específicos, por ejemplo: Verificar el resultado de una tarea determinada, monitorear una aplicación desarrollada internamente, entre otros.
La flexibilidad que proporciona Nagios es perfecta para estos escenarios.
Recibe nuevas publicaciones en tu bandeja de entrada.
No spam. Cancela la suscripción en cualquier momento.