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 vlogger

Despué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 restart

Vlogger 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 vlogger

3 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 webalizer

Echa un vistazo a

man webalizer

para 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/webstats

Finalmente, 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

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.