Monitorear la actividad de Nginx con Grafana+InfluxDB+collectd

El objetivo final de compilar e instalar collectd con InfluxDB y graficar las métricas de collectd con Grafana era lograr monitorear la actividad en un servidor Web Nginx a través de gráficas y alertas en Grafana. Este artículo explica la configuración de Nginx y collectd para recopilar datos de uso del servidor Web, y la configuración de Grafana para visualizar estos datos.







Configuración de Nginx

Para que collectd pueda recopilar datos relacionados a la actividad del servidor Nginx, es necesario utilizar el módulo stub_status. Se trata de un pequeño módulo que provee información básica sobre el estado de un servidor Nginx. Este módulo no está habilitado por defecto, sino que el paquete nginx debe haber sido compilado con la opción --with-http_stub_status_module . Es posible verificar si un servidor Nginx ha sido compilado con soporte para el módulo stub_status ejecutando el siguiente comando:

root@debian:~# /usr/local/nginx/sbin/nginx -V 2>&1 | sed -e 's/--/

--/g' | grep stub --with-http_stub_status_module

Si el módulo está soportado, sólo es necesario habilitarlo en la configuración de Nginx:

root@debian:~# nano /usr/local/etc/nginx/nginx.conf

Agregar la siguiente configuración dentro de la sección server { correspondiente:

location /nginx_status { stub_status on; access_log off; allow 127.0.0.1; allow 192.168.79.132; deny all; }

En este ejemplo se ha habilitado el acceso a la información provista por el módulo stub_status (en la locación "/nginx_status") sólo a localhost y al servidor de monitoreo corriendo collectd (dirección IP 192.168.79.132 ). Ajustar esta configuración adecuadamente.

root@debian:/usr/local/etc/nginx/sites-enabled# service nginx reload nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful Reloading nginx configuration: OK

Luego, desde nuestro servidor de monitoreo corriendo collectd, verificar el acceso a la página de estado del servidor Nginx:

root@devuan:~# curl https://www.linuxito.com/nginx_status Active connections: 1 server accepts handled requests 25 25 1008 Reading: 0 Writing: 1 Waiting: 0

Configuración de collectd

collectd soporta la recolección de estadísticas de Nginx stubs a través del plugin "nginx".

Editar la configuración de collectd:

root@devuan:~# nano /opt/collectd/etc/collectd.conf

Habilitar el plugin "nginx" cambiando:

#LoadPlugin nginx

Por:

LoadPlugin nginx

Luego configurar el acceso al servidor Nginx:

#<Plugin nginx> # URL "http://localhost/status?auto" # User "www-user" # Password "secret" # CACert "/etc/ssl/ca.crt" #</Plugin>

Ajustar la URL adecuadamente:

<Plugin nginx> URL "https://www.linuxito.com/nginx_status" # URL "http://localhost/status?auto" # User "www-user" # Password "secret" # CACert "/etc/ssl/ca.crt" </Plugin>

Finalmente reiniciar collectd:

root@devuan:~# service collectd stop Stopping Statistics collection daemon: collectd. root@devuan:~# service collectd start Starting Statistics collection daemon: collectd (collectd).

InfluxDB

Desde el cliente influx es posible verificar que collectd esté recuperando información correctamente:

root@devuan:~# influx Visit https://enterprise.influxdata.com to register for updates, InfluxDB server management, and monitoring. Connected to http://localhost:8086 version 1.0.2 InfluxDB shell version: 1.0.2 > use collectd Using database collectd > show measurements with measurement =~ /nginx/ name: measurements ------------------ name nginx_value > show series from nginx_value key nginx_value,host=devuan,type=connections,type_instance=accepted nginx_value,host=devuan,type=connections,type_instance=failed nginx_value,host=devuan,type=connections,type_instance=handled nginx_value,host=devuan,type=nginx_connections,type_instance=active nginx_value,host=devuan,type=nginx_connections,type_instance=reading nginx_value,host=devuan,type=nginx_connections,type_instance=waiting nginx_value,host=devuan,type=nginx_connections,type_instance=writing nginx_value,host=devuan,type=nginx_requests > select value from nginx_value where type='nginx_requests' order by time desc limit 5 name: nginx_value ----------------- time value 1539274406025952000 1084 1539274396025965000 1083 1539274386026076000 1082 1539274376025745000 1081 1539274366025907000 1080 > exit root@devuan:~#

Visualizar los datos desde Grafana

Habiendo creado un dashboard, es posible utilizar la siguiente consulta a la base InfluxDB para graficar las conexiones al servidor Nginx:

Luego de unas horas de monitoreo acumuladas, obtengo la siguiente gráfica:

Referencias



Tal vez pueda interesarte

