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

2 Respuestas

  1. Christian dice:

    Perfecto, como siempre

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies
A %d blogueros les gusta esto: