Crear monitor de estado de NGINX en Icinga y Nagios
En el artículo de hoy vamos a ver cómo crear un nuevo monitor en nuestras plataformas favoritas de monitorización, ya sea en Nagios o Icinga. Concretamente queremos saber el estado de un servidor NGINX, utilizando un módulo de estado llamado http_stub_status_module
, que por defecto siempre viene habilitado cuando lo instalamos.
Instalar y NGINX y configuración de módulo de estado
El primer paso es instalar NGINX en el cliente. En mi caso el cliente es un servidor CentOS 7, para instalar el servicio sólo se ha de escribir:
yum update
yum install nginx
Una vez instalado, vamos a utilizar la configuración por defecto, que se puede modificar editando el fichero /etc/nginx/nginx.conf. Dentro del apartado “Server” debemos añadir:
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1; (o la IP desde que consultemos)
deny all
}
Guardamos y encendemos el servicio:
systemctl enable nginx.service
systemctl start nginx.service
Además habilitamos el puerto en el cortafuegos.
firewall-cmd –-permanent --add-port=80/tcp
systemctl restart firewalld
Si consultamos nuestra url más la ubicación /nginx_status, tendríamos que ver una cosa como la que sigue:
Active connections: 3
server accepts handled requests
10 10 9
Reading: 0 Writing: 1 Waiting: 2
Configuración de monitor de estado de Nginx en Icinga y Nagios
Ya sabéis que Icinga es un fork de Nagios, y al igual que éste utiliza el plugin NRPE. Vamos a plantear el script de la siguiente manera. Primero de todo verificaremos que la URL se puede consultar, para ello esperaremos, utilizando ‘curl’, un estado 200. Si no recibimos ese estado mostraremos un mensaje, que no se puede consultar el estado del servidor. Si en cambio el estado es 200, realizaremos la consulta.
Mi script sería:
#!/bin/bash
STATUS=$(curl -H $hostname http://127.0.0.1/nginx_status)
RESPUESTA=$(curl --write-out %{http_code} --silent --output /dev/null http://127.0.0.1:8002/nginx_status)
if [ $RESPUESTA -eq 200 ]; then
echo $STATUS
exit 0
else
echo "No podemos consultar el estado del servidor NGINX en $HOSTNAME"
exit 1
fi
Creo que el guion no necesita mucha explicación y se entiende perfectamente. Una vez hecho esto, añadimos el script al fichero de configuración de Nagios/Icinga:
command[check_status_nginx]=/usr/local/nagios/libexec/check_nginx_status.sh
Y ya podemos ver el monitor en funcionamiento:
En Icinga:
En Nagios:
Espero que os sea útil en alguna ocasión, nos vamos leyendo.
Os dejo aquí las diferentes fuentes consultadas:
StackOverFlow – How to evaluate http response codes from bash/shell script?