Estadísticas detalladas del tráfico de Apache
Por Luis Peralta
Nota: Este artículo fue originalmente publicado en el blog técnico
de 11870.com, 2e5e, que ha desaparecido de internet.
apache_blackbox
todavía está disponible en el repositorio de munin.
En una web como la que nos llevamos entre manos, con una cantidad de páginas tan grande (+3M), se hace necesario tener controlado cuántas peticiones fallan, cuantas páginas no son encontradas, el número de peticiones por segundo, etc…
De hecho, el tener controlada esta información nos ha servido para identificar anomalías en el código: un enlace mal construido de repente provoca un número de páginas no encontradas fuera de lo normal. Si nos apoyamos además en gráficas podemos advertir el problema mucho más fácilmente.
El resultado
En vez de empezar de abajo a arriba, empezando por lo que hemos ido haciendo y acabando con el resultado, lo haremos al revés: eye candy ya.
Como se ve, estamos diferenciando las peticiones por códigos HTTP:
- 301 y 302, redirecciones temporales y permanentes
- 404, página no encontrada
- 500, errores de la aplicación (el temido algo no ha ido bien)
Preparando la instalación
Para poder pintar estas gráficas nos apoyamos en distinto software:
- Apache blackbox, un script que procesa los logs de apache en tiempo real y genera un archivo de informe
- Munin, que utilizamos para la monitorización de las máquinas desde hace tiempo (pero no para generar alertas)
- http_status, un plugin de munin desarrollado en la casa para explotar los datos obtenidos con Apache blackbox
Para que apache blackbox funcione, hace falta que tengamos disponible el módulo mod_logio
. Si no vemos el módulo dentro de los posibles a cargar (en /etc/apache2/modules-available/
en Ubuntu), puede que esté compilado dentro del propio apache:
# apache2 -l
Compiled in modules:
core.c
mod_log_config.c
mod_logio.c
worker.c
http_core.c
mod_so.c
La instalación de apache blackbox es bastante de cajón: copiamos el script en /usr/local/bin
, nos aseguramos de que tenemos el resto de dependencias que necesita (libfile-tail-perl
, libproc-daemon-perl
y perl-doc
en Ubuntu) y configuramos el sistema de logging del apache:
<IfModule mod_logio.c>
CustomLog "| /usr/local/bin/apacheblackbox.pl --output /var/log/blackbox.log" "%a %X %t \"%r\" %s/%>s %{pid}P/%{tid}P %T/%D %I/%O/%B"
</IfModule>
Y reiniciamos el servidor web. A partir de ahora nos encontraremos con un fichero en /var/log/blackbox.log
con el informe. Debería contener algo así (después de 1 minuto corriendo, seamos pacientes):
...
apache.stats.totalbytesout=1163469945
apache.stats.totalcontentsize=1074413820
apache.stats.averagebytesin=819.479935110837
apache.stats.averagebytesout=5272.10828605608
apache.stats.averagetime=0.165660128600167
apache.stats.totaltime=36558.5398199992
apache.connections.closed=16454
apache.connections.keepalive=203940
apache.connections.aborted=290
apache.requests.get=204763
apache.requests.post=15887
apache.status.1xx=0
apache.status.2xx=210402
apache.status.3xx=9081
apache.status.4xx=1193
...
Ahora ya solo queda instalar el plugin de munin http_status (descargar). La instalación de plugins de munin es muy sencilla: copiamos el plugin a /usr/share/munin/plugins/
, creamos el enlace simbólico en /etc/munin/plugins/
y a funcionar.
Mejorando lo mejorable
Si tenemos una web medio decente, es probable que tengamos muchas más peticiones con código de respuesta 200
que de cualquier otro tipo. Y el efecto que produce eso es que los códigos anómalos se diluirán en la gráfica y no podremos apreciar nada. Para solucionarlo no hace falta cambiar el plugin, sino tocar un poco la configuración de munin en el nodo maestro, editando /etc/munin/munin.conf
:
..
[PRODUCCION;HTTPSERVER1]
address XXXXX
local_address XXXXXX
use_node_name yes
http_status.200.graph no
http_status_200.graph_title HTTP 200 status requests
http_status_200.graph_vlabel requests / second
http_status_200.update no
http_status_200.graph_category network
http_status_200.graph_order http_status=PRODUCCION;HTTPSERVER1:http_status.200
...
Con esto se nos pintarán dos gráficas: una en la que veremos los códigos de respuesta 200 y otra en la que veremos los anómalos.