Recolectar estadísticas de Apache con collectd en Debian y derivados

Este artículo explica cómo configurar Apache y collectd en un servidor Debian/Devuan o derivado para recolectar estadísticas y monitorear el servidor Web mediante el uso del módulo mod_status.

En la serie de artículos anteriores he explicado cómo compilar y configurar collectd en Debian para almacenar métricas en una base de datos InfluxDB y cómo graficar métricas desde una base InfluxDB en Grafana. Este esquema me permite generar gráficas de monitoreo de actividad de servidores Nginx. Veamos ahora cómo configurar collectd para generar estas mismas gráficas pero a fin de monitorear la actividad sobre un servidor Web Apache.







Si la instalación de collectd no posee soporte para Apache, será necesario compilar collectd con soporte para Apache agregando la opción --enable-apache . Sin embargo el soporte para servidores Apache y Nginx es trivial, ya que sólo requiere de libcurl para acceder a las respectivas páginas de estado mediante HTTP.

Por cierto, en mi perfil de GitHub dejé un script de configuración, compilación e instalación automática de collectd: linuxitux/scripts/Devuan/install-collectd.bash.

Configurar collectd

Editar la configuración de collectd:

# cd /usr/local/collectd/etc/ # nano collectd.conf

Habilitar el plugin "apache":

LoadPlugin apache

Debajo, configurar el plugin "apache" para que recolecte estadísticas del servidor Apache local:

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

El plugin "apache" requiere que se especifique una URL que produzca un archivo de estado machine readable. Si no se agrega "?auto" al final de la URL, la página de estado será retornada como tipo MIME "text/html" en lugar de "text/plain", lo cual es incompatible con el plugin.

Configuración de Apache

Se requiere del módulo mod_status para recolectar estadísticas de Apache. Verificar que el módulo se encuentre disponible:

root@debian:/etc/apache2# ll mods-available/status.conf -rw-r--r-- 1 root root 753 ene 26 2014 mods-available/status.conf

Habilitar el módulo mod_status:

root@debian:/etc/apache2# a2enmod status

Configurar el módulo para que sólo se permita el acceso desde localhost:

root@debian:/etc/apache2# nano mods-enabled/status.conf

<Location /apache_status> SetHandler server-status Order deny,allow Deny from all Allow from 127.0.0.1 </Location>

Recargar el servidor Apache y verificar el acceso con curl :

root@debian:/etc/apache2# service apache2 reload [....] Reloading web server config: apache2[Mon Oct 22 11:31:03 2018] [notice] Digest: generating secret for digest authentication . ok root@debian:/etc/apache2# curl http://localhost/apache_status?auto Total Accesses: 2 Total kBytes: 1 Uptime: 774094 ReqPerSec: 2.58367e-6 BytesPerSec: .00132284 BytesPerReq: 512 BusyWorkers: 1 IdleWorkers: 49 Scoreboard: __W______________________......................................................................................................._________________________.......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................

Finalmente, iniciar (o reiniciar) collectd:

# service collectd stop # service collectd start

Graficar los datos en Grafana

A modo de ejemplo, la siguiente consulta permite graficar las conexiones sobre el servidor Apache:

SELECT mean("value") FROM "apache_value" WHERE ("host" = 'www.linuxito.com' AND "instance" = 'apache' AND "type" = 'apache_connections') AND $timeFilter GROUP BY time($__interval) fill(null)

Referencias



Tal vez pueda interesarte

