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
fi

Basado 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.sh

Y 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.cfg

Deberías obtener algo como esto:

Verificar Configuración de Nagios

Asegúrate de que devuelva 0 errores y 0 advertencias y procede a recargar el servicio:

sudo systemctl reload-or-restart nagios.service

Despué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_nrpe

Permite 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.150

Define 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.service

Verifica que el servicio NRPE esté en funcionamiento:

cat /etc/services | grep nrpe  
netstat -at | grep nrpe

Ahora 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-plugin

Así 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
fi

Permite la ejecución del script:

sudo chmod +x /usr/local/scripts/check_root_home_du.sh

El 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.sh

Y reinicia el listener de NRPE:

sudo systemctl restart nagios-nrpe-server.service

Ahora 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.cfg
sudo systemctl reload-or-restart nagios.service

Y 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.

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.