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:
1 2 | 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:
1 2 3 4 5 6 | 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:
1 2 | systemctl enable nginx.service
systemctl start nginx.service |
Además habilitamos el puerto en el cortafuegos.
1 2 | 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:
1 2 3 4 | 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:
1 2 3 4 5 6 7 8 9 10 11 | #!/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:
1 | 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?
SuperUser – Getting curl to output HTTP status code?
EasyEngine – Enable Nginx Status Page
Perfecto, como siempre
Gracias.