Logs Apache · 4 min read · Jan 28, 2026

Dividindo Logs do Apache Com vlogger

Dividindo Logs do Apache Com vlogger

Versão 1.0
Autor: Falko Timme

Vlogger é uma pequena ferramenta com a qual você pode escrever logs do Apache divididos por hosts virtuais e dias. Com o vlogger, precisamos colocar apenas uma diretiva CustomLog em nossa configuração global do Apache, e ele escreverá logs de acesso para cada host virtual e dia. Portanto, você não precisa dividir o log de acesso geral do Apache em logs de acesso para cada host virtual a cada dia, e não precisa configurar o Apache para escrever um log de acesso por host virtual (o que poderia fazer você ficar sem descritores de arquivo muito rapidamente).

No final deste tutorial, eu vou mostrar como usar o webalizer para criar estatísticas a partir dos logs de acesso do Apache.

Eu não dou nenhuma garantia de que isso funcionará para você!

1 Nota Preliminar

Eu testei o vlogger em um sistema Debian Etch onde o Apache2 já está instalado e funcionando.

2 Instalando E Configurando vlogger

Para instalar o vlogger, simplesmente executamos

apt-get install vlogger

Depois, precisamos mudar a linha LogFormat (existem várias linhas LogFormat - pelo menos mude a que é chamada de combined) em /etc/apache2/apache2.conf. Devemos adicionar a string %v no início dela:

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 [...] |

Então adicione a seguinte linha CustomLog ao mesmo arquivo (você pode colocá-la diretamente após a linha LogFormat):

vi /etc/apache2/apache2.conf

| [...] CustomLog "| /usr/sbin/vlogger -s access.log /var/log/apache2" combined [...] |

Essa é a única diretiva CustomLog que precisamos em toda a nossa configuração do Apache. Por favor, desative todas as outras diretivas CustomLog, especialmente nas suas configurações de host virtual!

A vantagem de escrever apenas um log de acesso é que isso reduz muito a carga no servidor, especialmente se você tiver alguns sites de alto tráfego em seu servidor.

Agora reinicie o Apache:

/etc/init.d/apache2 restart

O vlogger agora criará subdiretórios no diretório /var/log/apache2, um para cada host virtual, e criará logs de acesso que contêm a data atual no nome do arquivo. Ele também criará um symlink chamado access.log que aponta para o arquivo de log atual.

Vamos supor que temos dois hosts virtuais, www.example.com e www.test.tld. Então, assim é como o diretório /var/log/apache2 ficará:

/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 quais outras diretivas de linha de comando do vlogger você pode colocar na linha CustomLog, dê uma olhada em

man vlogger

3 Criando Estatísticas Com webalizer

Neste capítulo, eu vou mostrar como você pode criar estatísticas a partir dos arquivos de log divididos com o webalizer. Novamente, estou assumindo que você tem dois hosts virtuais, www.example.com e www.test.tld, e esses hosts virtuais têm as raízes de documentos /var/www/www.example.com/web e /var/www/www.test.tld/web (é importante que os nomes dos servidores estejam nos caminhos das raízes de documentos, caso contrário, o procedimento a seguir não funcionará). Eu gostaria de colocar as estatísticas nos diretórios /var/www/www.example.com/web/stats e /var/www/www.test.tld/web/stats, então esses diretórios devem já existir.

Primeiro, vamos instalar o webalizer:

apt-get install webalizer

Dê uma olhada em

man webalizer

para ver como o webalizer funciona. Basicamente, para criar estatísticas para www.example.com a partir do log de acesso de ontem, você pode 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 é a localização do webalizer.conf padrão do Debian. /bin/date -d “1 day ago” +%m%d%Y imprime a data de ontem exatamente da maneira que precisamos para que possamos passar o log de acesso de ontem para o webalizer sem precisar saber a data exata.)

Claro, não queremos executar tal comando manualmente para cada host virtual, portanto, escrevemos um pequeno script shell que lê o diretório /var/log/apache2 e cria estatísticas para cada host virtual que tem logs nesse diretório. Eu nomeio o script de webstats e coloco-o no diretório /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 |

Devemos tornar esse script executável:

chmod 755 /usr/local/sbin/webstats

Finalmente, criamos um trabalho cron que chama o script /usr/local/sbin/webstats todas as noites às 04:00h:

crontab -e

| 0 4 * * * /usr/local/sbin/webstats &> /dev/null |

Após o trabalho cron ter sido executado pela primeira vez, você pode ir a www.example.com/stats e www.test.tld/stats para ver as estatísticas em seu navegador. É uma boa ideia proteger por senha os diretórios de estatísticas com .htaccess/.htpasswd.

4 Links

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.