Português do Brasil English
Devin no Facebook  Devin no Twitter  RSS do Site 
Servidores    

Apache: Eu tenho muitos domínios virtuais, como posso fazer para gerar logs separados de cada um?


Comentários  0
Visualizações  
8,592

Se você usa o Apache para apenas alguns sites, você nunca passará por este problema. Mas em servidores em que a quantidade de domínios virtuais é muito grande, surge a necessidade de você separar os logs de acesso para cada um dos dominios virtuais, com o fim de fazer a análise destes logs e apresentar estatísticas para os usuários de cada domínio (O Webalizer faz isso). Mas para cada arquivo de log, o Apache abre um processo de escrita, e o sistema tem um certo limite de processos, ou seja, o Apache só poderá abrir alguns poucos processos para escrever nos logs.

Para resolver isso, existe um utilitário chamado split-logfile (que vem junto com o Apache) que separa os logs de acordo com o domínio virtual. Para fazer funcionar, primeiro retire todos os logs dos seus domínios virtuais e adicione apenas as seguintes linhas de log na configuração principal do seu servidor (e não do domínio virtual):

LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%v %h %l %u %t \"%r\" %>s %b" common<

CustomLog "/var/www/logs/access_log" combined
ErrorLog "/var/www/logs/error_log"

As primeiras duas linhas vão criar o formato da linha de log que o Apache irá escrever. A única diferença para o formato padrão é o acréscimo do %v no início, que indica o domínio virtual usado. As duas ultimas linhas indicam onde o log vai ser gravado (o de acesso e o de erros do servidor).

Agora reinicie ou recarrege o seu Apache, e o seu arquivo de log estará sendo escrito de uma forma diferente. Agora vamos separar os logs por domínio virtual, e para isso é muito simples, é só criar um pequeno script que fará todo o processo:

/usr/local/bin/separa-logs-apache

#!/bin/bash
#
# Separa os logs
cd /var/www/logs/splitted
/usr/bin/split-logfile < /var/www/logs/access_log

# Zera o log principal
echo -n > /var/www/logs/access_log

Não esqueça de criar antes também o diretório /var/www/logs/splitted. Onde estarão armazenados os logs separados.

Agora é só rodar este script e verificar o conteúdo do /var/www/logs/splitted. Existirá um arquivo .log para cada domínio virtual, sem o nome do domínio virtual (string %v do LogFormat), permitindo que você use normalmente o arquivo de log (para fazer análises com o Webalizer por exemplo).


Comentários  0
Visualizações  
8,592


TagsLeia também

Apaixonado por Linux e administração de sistemas. Viciado em Internet, servidores, e em passar conhecimento. Idealizador do Devin, tem como meta aprender e ensinar muito Linux, o que ele vem fazendo desde 1997 :-)


Leia também



Comentários

Deixe uma resposta