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. yum update
  2. 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. location /nginx_status {
    
  2.           stub_status on;
    
  3.           access_log   off;
    
  4. 	  allow 127.0.0.1; (o la IP desde que consultemos)
    
  5. 	  deny all
    
  6. }

Guardamos y encendemos el servicio:

  1. systemctl enable nginx.service
  2. systemctl start nginx.service

Además habilitamos el puerto en el cortafuegos.

  1. firewall-cmd –-permanent --add-port=80/tcp
  2. 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. Active connections: 3 
    
  2. server accepts handled requests
    
  3.  10 10 9 
    
  4. 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. #!/bin/bash 
  2. STATUS=$(curl -H $hostname http://127.0.0.1/nginx_status)
  3. RESPUESTA=$(curl --write-out %{http_code} --silent --output /dev/null http://127.0.0.1:8002/nginx_status) 
  4.  
  5. if [ $RESPUESTA -eq 200 ]; then
  6.           echo $STATUS
  7.           exit 0 
  8. else
  9.           echo "No podemos consultar el estado del servidor NGINX en $HOSTNAME"
  10.           exit 1 
  11. 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