Monitoreo Icinga · 7 min read · Nov 18, 2025

Agregar un nuevo Host y Servicios a ser Monitoreados por Icinga 2

En este tutorial, te mostraré cómo agregar un nuevo host para ser monitoreado por Icinga 2 y cómo los servicios del host, como un servidor web HTTP, pueden ser monitoreados por Icinga. También te mostraré cómo crear tu propio comando de plugin personalizado de Icinga para monitorear servicios UDP en tu infraestructura de red.

Icinga 2 proporciona una infraestructura de plug-in que permite implementar verificaciones de servidores y servicios, así como notificaciones fácilmente. Este hecho permite a los administradores de sistemas y programadores construir nuevas funcionalidades para Icinga 2 y crear comandos especiales especializados en verificar diferentes aspectos de un host, un servicio de red o una funcionalidad de red.

Icinga 2 almacena definiciones de Host con atributos de objeto utilizados para reglas de servicio, notificaciones, dependencias y objetos de tiempo de inactividad programado en el archivo hosts.conf que se encuentra en el directorio /etc/icinga2/conf.d/. En este archivo puedes agregar una nueva definición de host para ser verificada por el proceso de monitoreo de Icinga2. En el siguiente ejemplo, agregaremos una nueva definición para que nuestro enrutador de puerta de enlace predeterminado pueda ser verificado periódicamente por Icinga2 para ver si está en línea a través de verificaciones ICMP.

nano /etc/icinga2/conf.d/hosts.conf

Ve al final del archivo y agrega las siguientes líneas para agregar la nueva definición de host.

object Host "Router" {  
  address = "192.168.1.1"  
  check_command = "hostalive"  
}

Por ejemplo, en el enrutador principal también queremos verificar el estado del servidor web HTTP que se utiliza para la autenticación y configuraciones. Las siguientes líneas verificarán el servidor web en el enrutador para ver si el servidor HTTP está vivo y responde con los códigos HTTP adecuados.

object Service "http" {  
  host_name = "Router"  
  check_command = "http"  
}

Monitorear servidor web con Icinga 2

Para que Icinga 2 recoja las nuevas definiciones de Host y comience a monitorear periódicamente el nuevo recurso, necesitas reiniciar el proceso emitiendo el siguiente comando.

systemctl restart icinga2.service

Para verificar el estado del host recién agregado, en este caso, el enrutador, inicia sesión en el panel web de Icinga 2 y navega a Resumen -> Hosts. En el panel derecho, deberías ver el estado del host recién agregado, como se ilustra en la imagen a continuación que describe el estado de nuestro enrutador. Las verificaciones de hosts se realizan básicamente a través del protocolo ICMP y Icinga2 mostrará el tiempo de viaje redondo promedio para un host en el panel web.

Estado del host Icinga 2

Si deseas mostrar el estado de las verificaciones de servicio HTTP del host, navega a Resumen -> Grupos de servicio y haz clic en Verificaciones HTTP. En el panel derecho, deberías ver el estado del servicio HTTP del enrutador, como se ilustra en la siguiente captura de pantalla.

Estado del servicio del host

Icinga 2 viene con una serie de comandos predefinidos que se pueden usar para monitorear una amplia gama de servicios. Pero esos comandos predeterminados a veces no son suficientes para verificar servicios personalizados. En este caso, un enfoque es crear tu propio script de comando personalizado que pueda ser llamado por Icinga 2 para monitorear el servicio. En el siguiente ejemplo te mostraremos cómo agregar un nuevo script de comando personalizado para verificar el estado de diferentes servicios UDP en tu red. El comando personalizado debe ser parametrizado y debe contener al menos dos parámetros, en la forma de –H nombre de host o IP y –p número de puerto. El script de comando personalizado para verificar un puerto de servicio UDP debe colocarse en el directorio /usr/lib/nagios/plugins/ y debe tener el contenido como se declara en el siguiente ejemplo.

nano /usr/lib/nagios/plugins/check_udpport

extracto del archivo check_udpport.

#!/bin/bash  
while getopts H:p: option  
do  
 case "${option}"  
in  
H) addr=${OPTARG};;  
p) port=${OPTARG};;  
 esac  
done  
   
/bin/nc -vz -u "$addr" "$port" > /dev/null 2>&1  
   
stat=`echo $?`  
   
if test $stat -eq 0; then  
echo "Puerto $port está abierto en $addr"  
exit 0  
else  
echo "Puerto $port no está abierto en $addr"  
exit 2  
fi

Plugin UDP personalizado de Icunga

Intentemos entender cómo funciona este script. Como puedes ver, el plugin no es más que un simple script de Bash. Usamos una expresión de control while para recorrer dos parámetros definidos por las letras H y p. Las dos letras de variables de shell H y p están parametrizadas y se analizan como argumentos de línea de comandos utilizando la declaración case. La declaración case probará si los parámetros existen y los declarará para las variables addr y port. A continuación, las variables $ addr y $ port se agregarán como opciones de comando para el comando netcat, que, a su vez, comprobará si el número de puerto, definido en la $port variable, está abierto para el host con la dirección IP definida por la $addr variable. La salida del comando netcat y los errores eventuales no son de interés para este plugin, por lo que se descartarán en el agujero negro de Linux /dev/null. Lo que necesitamos es el código de salida del comando netcat. Después de que netcat verifique el puerto en el host, siempre devolverá un código de salida 0 en caso de que el puerto UDP sondeado esté abierto. El resto del comando es bastante simple. Una declaración condicional if-else imprimirá lo siguiente: si el puerto UDP está abierto en la dirección IP especificada, imprime la cadena con el contenido ‘el puerto está abierto’ para esa dirección IP del host junto con el código de salida 0. El código de salida 0 es siempre el código de éxito o sin error devuelto por un proceso en Linux. Si el puerto UDP no está abierto (el código de salida de netcat será diferente de 0), imprime la cadena que dice ‘el puerto no está abierto’ para el host y agrega el código de salida de 2. Los códigos de salida agregados después de cada cadena impresa en este script tienen un gran significado para las verificaciones de Icinga2, como se explica a continuación.

Código de retorno del plugin de comando para el estado del servicio o estado del host en Icinga 2:

0 = OK para servicios y UP para hosts

1 = WARNING para servicios y UP o DOWN/UNREACHABLE para hosts (el host está fluctuando o cambia sus estados con frecuencia)

2 = CRITICAL para servicios y DOWN/UNREACHABLE para hosts

3 = UNKNOWN DOWN/UNREACHABLE

Así que básicamente, Icinga 2 ejecutará este script con el parámetro de host y puerto y devolverá dos estados: o el puerto UDP no es accesible y te alertará que el servicio UDP del host es Crítico o el puerto UDP es accesible y te informará que el servicio UDP está funcionando en buenas condiciones y está OK.

Después de que hayas editado el archivo del script, guárdalo y ciérralo y asegúrate de que el archivo pueda ser lanzado en ejecución agregando los permisos de ejecución con el siguiente comando.

chmod +x /usr/lib/nagios/plugins/check_udpport

Luego, para probar si el script está funcionando como se esperaba, ejecuta el comando contra un puerto UDP abierto y un puerto UDP cerrado sobre un host en tu red emitiendo la siguiente sintaxis.

Aquí se verifica el servidor TFTP para el host 192.168.1.2.

/usr/lib/nagios/plugins/check_udpport –H 192.168.1.2 –p 69 

Simula las verificaciones contra un puerto UDP que sabes con certeza que está cerrado

/usr/lib/nagios/plugins/check_udpport –H 192.168.1.2 –p 68

Probar puerto UDP

Para que este nuevo plugin personalizado sea ampliamente utilizado en Icinga 2, agrega una nueva definición de comando en el archivo de configuración de comandos de Icinga 2, como se muestra en el siguiente ejemplo.

nano /etc/icinga2/conf.d/commands.conf

Ve al final de este archivo y agrega la definición del comando de la siguiente manera:

object CheckCommand "myudp" {  
  command = [ PluginDir + "/check_udpport" ]  
    
    arguments = {  
    "-H" = "$addr$"  
    "-p" = "$port$"  
}  
  vars.addr = "$address$"  
}

Agregar definición de comando Icinga

El nombre del comando que se utilizará en las configuraciones de Icinga 2 para llamar al comando ckeck_udpport sería “ myudp ”. No necesitamos especificar la dirección cuando llamamos al comando para una definición de servicio de host porque está codificada por la macro de Icinga 2 $address$.

Para verificar si el comando está funcionando como se esperaba, agrega una nueva definición de servicio para un host para verificar si un servicio UDP específico está abierto o no sobre ese host. Por ejemplo, para verificar si el puerto DHCP está abierto para el host 192.168.1.2, agrega la siguiente definición en el archivo hosts.conf de Icinga2.

object Service "dhcp" {  
  host_name = "Pi.hole"  
  check_command = "myudp"  
vars.port = "67"  
}

Agregar verificación de puerto UDP en Icinga 2

Después, reinicia Icinga 2 para reflejar los cambios y navega al panel web de Icinga 2, Resumen -> Hosts, haz clic en tu host específico y verifica el estado del servicio UDP, como se muestra en la siguiente captura de pantalla.

Estado del servicio UDP

¡Eso es todo! Has agregado con éxito un host y sus servicios serán verificados periódicamente por la aplicación de monitoreo de red Icinga 2. Para otras configuraciones personalizadas relacionadas con el motor de monitoreo de Icinga 2 y el script de comando personalizado, visita la página de documentación en la siguiente dirección: https://www.icinga.com/docs/icinga2/latest/doc/03-monitoring-basics/#check-commands

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

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