Customizar arquivos de log do APACHE SERVER

Formato de log padrão

Por padrão, o Apache registra cada requisição em seu log de acesso, normalmente localizados dentro de seu diretório '/logs'. E se o arquivo de log for aberto em um editor de texto seu conteúdo deverá exibir algo como o trecho abaixo:

194.116.215.20 - - [14/Nov/2005:22:28:57 +0000] "GET / HTTP/1.0" 200 16440
87.113.68.91 - - [15/Nov/2005:22:45:56 +0000] "GET / HTTP/1.1" 200 36821
87.113.68.91 - - [15/Nov/2005:22:45:56 +0000] "GET /index.php?=PHPE9568F35-D428-11d2-A769-00AA001ACF42 HTTP/1.1" 200 2146
87.113.68.91 - - [15/Nov/2005:22:45:56 +0000] "GET /index.php?=PHPE9568F34-D428-11d2-A769-00AA001ACF42 HTTP/1.1" 200 4644

Cada linha neste arquivo representa uma solicitação de HTTP de entrada, e o Apache registra estas informações usando um formato conhecido como Common Log Format (CLF).

E da esquerda para a direita, este formato contém as seguintes informações sobre a requisição:

  1. Ip de origem;
  2. identificação do cliente;
  3. Usuário remoto, se autenticado;
  4. timestamp (data, hora, fuso) da requisição;
  5. Método HTTP + URI da requisição;
  6. Resposta do servidor com Código do protocolo HTTP;
  7. Tamanho do bloco de dados de resposta em bytes;

Estes vários campos são separados por espaços, com o campo de data/hora entre colchetes.

Este estilo CLF é bastante normal entre servidores Web, e a maioria das ferramentas de análise de log são capazes de analisá-lo, sem qualquer personalização especial.

Você pode alterar o formato de log padrão para armazenar mais informações sobre cada pedido, alterando a directiva LogFormat no arquivo de configuração do Apache.

Esta diretiva aceita dois valores: uma seqüência que consiste em modificadores de formato, cada um representando uma determinada peça de dados sobre a solicitação de entrada, e um rótulo legível para a cadeia. Assim, por exemplo, uma directiva LogFormat para o CLF poderia ficar assim:

LogFormat "%h %l %u %t \"%r\" %>s %b" common

A lista completa dos modificadores suportados pela directiva LogFormat podem ser consultadas no Manual Oficial Apache.

Criando um formato customizado

Se o formato de log padrão, como descrito acima, não é adequado para as suas necessidades, há um processo simples de três etapas para modificá-lo.

Passo #1: Defina um novo formato de registo e atribua-lhe um rótulo através da diretiva LogFormat

Para exemplo suponha que você quer apenas a data, hora, protocolo e URL solicitada.

Olhando para a lista de modificadores de formato, é claro que esta informação é incorporado em símbolos %H,%m, %t, e %U, respectivamente.

Use essas informações para criar uma seqüência de registro personalizado e atribuir-lhe o rótulo simples, como abaixo:

LogFormat "%H %m %t %U" simple

Passo #2: Defina uma diretiva CustomLog com o novo formato

Em seguida, modifique a directiva CustomLog existente para fazer referência a sua nova cadeia de formato, através de seu rótulo, como segue:

CustomLog logs/access.log simple

Passo #3: Reinicie o Apache

Uma vez que as alterações de configuração foram salvas, reinicie o servidor Web para que as alterações tenham efeito.

shell> /usr/local/apache/bin/apachectl restart

E agora, se você inspecionar seus registros após deixar Apache servir algumas solicitações de entrada, e verá um registro com as informações configuradas:

HTTP/1.1 GET [12/Oct/2006:16:49:06 +0530] /index.php
HTTP/1.1 GET [12/Oct/2006:16:49:07 +0530] /index.php
HTTP/1.1 GET [12/Oct/2006:16:49:07 +0530] /favicon.ico
HTTP/1.1 GET [12/Oct/2006:16:49:15 +0530] /dev/csstext3.html

Mais alguns exemplos

  • Se você gostaria de registrar o referenciador e navegador que fez a solicitação, você pode usar um formato como este:
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" detailed
    
    CustomLog logs/access.log detailed
    
  • se você gostaria de comparar o tempo gasto para atender a solicitação vis-à-vis o tamanho do pedido, considere o seguinte:
    LogFormat "%U %b %T" timediff
    
    CustomLog logs/access.log timediff
    
  • Como cerca de gravação os endereços IP local e remota, o tamanho da resposta, a primeira linha do pedido, o protocolo, e o carimbo de hora, todos separados por pipes?
    LogFormat "%a | %h | %P | %r | %t | %U | %q | %H" complex
    
    CustomLog logs/access.log complex
    

Multiplos arquivos de Log

Há ainda a possibilidade de multiplos arquivos de Log em vez de todas as informações amontoadas em um único arquivo.

Os registros podem ser separados com envio de alguns dados para um arquivo e os restantes para outro. É bastante fácil de fazer: Definir os multiplos LogFormat e, em seguida, digite uma directiva CustomLog separado (com um local de arquivo diferente) para cada um.

O trecho abaixo é um exemplo; ele envia informações detalhadas solicitação para o arquivo de log principal, referenciador informações para um segundo arquivo de log e endereços IP do cliente a um terceiro:

LogFormat "%h %l %u %t \"%r\" %>s %b" detailed
LogFormat "%h" ip
LogFormat "%U \"%{Referer}i\"" referer
CustomLog logs/access.log detailed
CustomLog logs/ip.log ip
CustomLog logs/referer.log referer
Lembre-se de dar a permissão de gravação para o servidor Web logs / diretório ou então nenhum de seus logs serão criados.

Ferramentas para análise de Log

Uma vez que você tem seus arquivos de log configurado do jeito que você quiser, você provavelmente vai querer analisar os dados que está coletando gradualmente dentro deles. Para concluir, aqui está uma lista de algumas das mais populares ferramentas de análise de log disponíveis on-line, com URLs:
  • http://www.awstats.org/
  • http://piwik.org/
  • http://www.http-analyze.org/
  • http://www.analog.cx/
  • http://www.boutell.com/wusage/

Referências

  • http://httpd.apache.org/docs/1.3/mod/mod_log_config.html#formats
  • http://www.techrepublic.com/blog/linux-and-open-source/how-do-i-customize-apache-server-log-files-to-track-my-web-site/
  • http://www.sitepoint.com/configuring-web-logs-apache/

Comentários