Nagios: Cómo monitorizar su correcto funcionamiento

December 12th, 2023

¿Qué es Nagios?

Nagios es una herramienta para automatizar los chequeos de los diferentes elementos de un entorno tecnológico y así comprobar su estado de salud en términos de rendimiento y capacidades.

Esta herramienta se encarga de ejecutar las consultas que creamos necesarias previa definición por nuestra parte, según los intervalos de tiempo que establezcamos, y de enviar una notificación cuando la respuesta a las consultas indique que se incumple un criterio que hayamos definido, o cuando no haya respuesta.

Después de una primera experiencia de uso interno, la fuimos desplegando en otros entornos y clientes. Un día en particular, sucedió que era Nagios el que había dejado de funcionar, situación crítica y único punto de fallo cuando se cuenta con un solo sistema de monitorización.

En este artículo analizaremos esta situación y el procedimiento para su mitigación.

Cómo conseguir que Nagios informe de que ha dejado de funcionar: notificación por omisión

Una de las primeras opciones que nos planteamos fue que las distintas instalaciones de Nagios se monitorizasen entre sí. No parecía mala idea, pero había que ver cómo configurar los cortafuegos implicados para que no filtrasen este tipo de código, y quizá eso ya no resultase tan sencillo.

Otra opción era utilizar las características que tienen algunos dispositivos de red para monitorizar el entorno. Lo descartamos porque estas características son muy elementales, pueden informar cuando un servidor no responde, pero ¿qué ocurre cuando el servidor donde se ejecuta Nagios está respondiendo y es Nagios lo que no se está ejecutando?, es decir, el propio servicio.

Finalmente nos decantamos por una solución, simple pero efectiva.

Como es evidente que Nagios no puede enviar notificaciones si no está funcionando, vamos a hacer que Nagios envíe una notificación periódica e independiente de cualquier servicio, de forma que cuando dicha notificación no llegue a la hora esperada nos haga sospechar que Nagios no se está ejecutando, o que al menos es incapaz de enviar notificaciones. Porque este caso no lo hemos comentado pero también es posible, que Nagios no sea capaz de enviar notificaciones o que nosotros no las estemos recibiendo. En este caso, el problema lo tendremos cuando no recibamos la notificación, al contrario de lo que ocurre con los recursos monitorizados por Nagios.

El script

Para empezar necesitamos es un script, un pequeño programa, el del ejemplo es perfectamente válido:

#!/bin/bash date=$(date +%H%M) echo "Nagios daily mail" echo $date if [[ "$date" -ge "1450" && "$date" -le "1505" ]]; then exit 1 else exit 0 fi

Es este un script de bash que se limita a hacer 2 cosas. La primera, almacenar en la variable date la hora actual en formato de hora y minuto, sin ninguna separación entre ambos. La segunda, evaluar el valor almacenado y finalizar la ejecución del script con un código de salida, 0 o 1, dependiendo del resultado de la evaluación. En Linux, la ejecución de cualquier comando finaliza con un código de salida que es 0, si la ejecución es correcta, o 1, si ha habido algún error. Este código lo podemos modificar con el comando exit, y lo podemos comprobar con un echo de la variable “$?”, como vemos en el siguiente ejemplo. Es este código de salida es el que utiliza Nagios cuando ejecuta los programas de chequeo para evaluar si hay un problema y decidir si tiene que enviar una notificación. Podemos ver el código de salida del script si lo ejecutamos manualmente:

autoalarmado1

En el segundo ejemplo hemos modificado el script para no tener que esperar al momento preciso del día en el que se ejecuta con código de salida uno. Como se puede leer en el código, sólo ocurre durante 15 minutos de las 24 horas del día.

autoalarmado2

La configuración de Nagios

El script lo almacenamos junto al resto de plugins que se instalan con Nagios. No es un requisito, sólo lo hacemos así por razones de claridad. Si nos lanzamos a la aventura de crear scripts para otros fines, podríamos tener una carpeta para separarlos del resto. Al script procuramos darle los mismos permisos para evitar problemas. Estos permisos y el propietario de los archivos pueden variar dependiendo de cómo se haga la instalación de Nagios.

autoalarmado3

El siguiente paso es hacer referencia al script en el archivo de comandos de Nagios, commands.cfg. La definición del comando se limita a darle un nombre y la ruta:

autoalarmado4

Por último, en nuestro caso, hacemos referencia a este comando en el archivo de configuración del equipo local, pero lo podríamos incluir en el archivo de configuración de otro equipo, o incluso podríamos hacer un archivo para este check y otros que tampoco estén ligados a equipos concretos. La referencia se hace utilizando el nombre que le hemos dado en el archivo de comandos:

autoalarmado5

Si la configuración es correcta, Nagios ejecutará el script repetidamente según el intervalo que tenga definido. Al fin y al cabo, entre otras cosas, Nagios es un ejecutor de tareas programadas. Pero sólo enviará una notificación, como la de la imagen, cuando se ejecute durante los 15 minutos en los que el código de salida es 1. Si durante esos 15 minutos se ejecuta 2 veces, porque el intervalo de ejecución sea de, por ejemplo, 5 minutos, recibiremos 2 notificaciones. Pero si durante esos 15 minutos no se llega a ejecutar porque el intervalo de ejecución fuese de 1/2 hora o 1 hora, entonces no se enviará ninguna notificación y podríamos pensar erróneamente que el script está fallando, o que Nagios no se está ejecutando. Podemos solucionarlo ajustando el intervalo de ejecución, que puede ser diferente para distintos servicios, o el intervalo que hayamos definido en el script.

autoalarmado6

Observaciones finales

El script que hemos incluido es muy básico en cuanto alcance por lo que tiene ciertas limitaciones, sin ir más lejos, no funciona a cualquier hora del día. Para perfeccionarlo habría que jugar con el formato de fecha, el tipo de dato, las reglas de evaluación, etc. Es posible hacerlo, los lenguajes de scripting de las shell de Linux lo permiten, pero no son lenguajes que destaquen por lo fácil que resultan de manejar. Podemos utilizar otros lenguajes más evolucionados y hacer las adaptaciones pertinentes en el archivo de comandos.

No creemos que sea necesario señalarlo, pero con lo que hemos visto es fácil deducir que tenemos un medio para crear nuestros propios scripts de chequeo para fines que Nagios no contempla, o para sustituir los que sí tiene definidos y ajustarlos a nuestras necesidades. Podemos comprobar el uso de memoria con comandos con los que estamos más familiarizados, como free o top, o el tamaño de una carpeta con un ls o un dh.

Sabemos que no es igual de eficaz una notificación que se recibe que una notificación que no llega o no capta nuestra atención de la misma forma, es muy fácil no caer en la cuenta de que no hemos recibido un correo. Por eso, cabría mejorar esta solución con la implementación de un mecanismo que compruebe la recepción diaria y notifique cuando no la haya, siendo este tipo de mecanismo de supervisión complementario y en cierto sentido crítico, una necesidad que podremos explorar en próximos artículos.