Apache Logs · 4 min read · Jan 28, 2026
Dividiendo los registros de Apache con vlogger
Dividiendo los registros de Apache con vlogger
Versión 1.0
Autor: Falko Timme
Vlogger es una pequeña herramienta con la que puedes escribir registros de Apache desglosados por hosts virtuales y días. Con vlogger, solo necesitamos poner una directiva CustomLog en nuestra configuración global de Apache, y escribirá registros de acceso para cada host virtual y día. Por lo tanto, no tienes que dividir el registro de acceso general de Apache en registros de acceso para cada host virtual cada día, y no tienes que configurar Apache para escribir un registro de acceso por host virtual (lo que podría hacer que te quedes sin descriptores de archivo muy rápido).
Al final de este tutorial, te mostraré cómo usar webalizer para crear estadísticas a partir de los registros de acceso de Apache.
¡No emito ninguna garantía de que esto funcione para ti!
1 Nota Preliminar
He probado vlogger en un sistema Debian Etch donde Apache2 ya está instalado y funcionando.
2 Instalando y Configurando vlogger
Para instalar vlogger, simplemente ejecutamos
apt-get install vloggerDespués, tenemos que cambiar la línea LogFormat (hay múltiples líneas LogFormat - al menos cambia la que se llama combined) en /etc/apache2/apache2.conf. Debemos agregar la cadena %v al principio:
vi /etc/apache2/apache2.conf| [...] #LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined [...] |
Luego agrega la siguiente línea CustomLog al mismo archivo (puedes ponerla directamente después de la línea LogFormat):
vi /etc/apache2/apache2.conf| [...] CustomLog "| /usr/sbin/vlogger -s access.log /var/log/apache2" combined [...] |
Esa es la única directiva CustomLog que necesitamos en toda nuestra configuración de Apache. ¡Por favor, desactiva todas las demás directivas CustomLog, especialmente en tus configuraciones de host virtual!
La ventaja de escribir solo un registro de acceso es que esto reduce mucho la carga en el servidor, especialmente si tienes algunos sitios de alto tráfico en tu servidor.
Ahora reinicia Apache:
/etc/init.d/apache2 restartVlogger ahora creará subdirectorios en el directorio /var/log/apache2, uno por host virtual, y creará registros de acceso que contienen la fecha actual en el nombre del archivo. También creará un enlace simbólico llamado access.log que apunta al archivo de registro actual.
Supongamos que tenemos dos hosts virtuales, www.example.com y www.test.tld. Entonces así es como se verá el directorio /var/log/apache2:
/var/log/apache2/
www.example.com/
06042007-access.log
06052007-access.log
06062007-access.log
access.log -> 06062007-access.log
www.test.tld/
06042007-access.log
06052007-access.log
06062007-access.log
access.log -> 06062007-access.log
Para aprender qué otras directivas de línea de comandos de vlogger puedes poner en la línea CustomLog, echa un vistazo a
man vlogger3 Creando Estadísticas con webalizer
En este capítulo te mostraré cómo puedes crear estadísticas a partir de los archivos de registro divididos con webalizer. Nuevamente, asumo que tienes dos hosts virtuales, www.example.com y www.test.tld, y que estos hosts virtuales tienen las raíces de documentos /var/www/www.example.com/web y /var/www/www.test.tld/web (es importante que los nombres de los servidores estén en las rutas de las raíces de documentos, de lo contrario, el siguiente procedimiento no funcionará). Me gustaría poner las estadísticas en los directorios /var/www/www.example.com/web/stats y /var/www/www.test.tld/web/stats, por lo que estos deben existir ya.
Primero, instalemos webalizer:
apt-get install webalizerEcha un vistazo a
man webalizerpara ver cómo funciona webalizer. Básicamente, para crear estadísticas para www.example.com a partir del registro de acceso de ayer, puedes usar este comando:
/usr/bin/webalizer -c /etc/webalizer/webalizer.conf -n www.example.com \
-s www.example.com -r www.example.com -q -T -o /var/www/www.example.com/web/stats \
/var/log/apache2/www.example.com//bin/date -d "1 day ago" +%m%d%Y-access.log
( /etc/webalizer/webalizer.conf es la ubicación del webalizer.conf predeterminado de Debian. /bin/date -d “1 day ago” +%m%d%Y imprime la fecha de ayer exactamente de la manera que la necesitamos para que podamos pasar el access.log de ayer a webalizer sin necesidad de conocer la fecha exacta.)
Por supuesto, no queremos ejecutar tal comando manualmente para cada host virtual, por lo tanto, escribimos un pequeño script de shell que lee el directorio /var/log/apache2 y crea estadísticas para cada host virtual que tenga registros en ese directorio. Nombré el script webstats y lo coloqué en el directorio /usr/local/sbin:
vi /usr/local/sbin/webstats| #!/bin/sh logdir=/var/log/apache2 webalizerconf=/etc/webalizer/webalizer.conf yesterdaysdate=`/bin/date -d "1 day ago" +%m%d%Y` cd ${logdir} for directory in * do if [ -d ${directory} ]; then /usr/bin/webalizer -c ${webalizerconf} -n ${directory} \ -s ${directory} -r ${directory} -q -T -o /var/www/${directory}/web/stats \ ${logdir}/${directory}/${yesterdaysdate}-access.log fi done exit 0 |
Debemos hacer que ese script sea ejecutable:
chmod 755 /usr/local/sbin/webstatsFinalmente, creamos un trabajo cron que llama al script /usr/local/sbin/webstats cada noche a las 04:00h:
crontab -e| 0 4 * * * /usr/local/sbin/webstats &> /dev/null |
Después de que el trabajo cron se ejecute por primera vez, puedes ir a www.example.com/stats y www.test.tld/stats para ver las estadísticas en tu navegador. Es una buena idea proteger con contraseña los directorios de estadísticas con .htaccess/.htpasswd.
4 Enlaces
- vlogger: http://n0rp.chemlab.org/vlogger
- webalizer: http://www.mrunix.net/webalizer
- Debian: http://www.debian.org
Recibe nuevas publicaciones en tu bandeja de entrada.
No spam. Cancela la suscripción en cualquier momento.