“Catch-All” log de acesso com Apache Virtual Hosts?

16

Eu tenho muitos hosts virtuais configurados em um servidor da web, cada um com seu próprio log de erro e acesso. As linhas relevantes de httpd.conf são algo assim:

ErrorLog /var/log/httpd-error.log
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
CustomLog /var/log/httpd-access.log combined

NameVirtualHost *:80

<VirtualHost *:80>
    ServerName myhost.com
    ServerAlias www.myhost.com
    DocumentRoot /var/www/myhost.com/htdocs
    ErrorLog /var/www/myhost.com/log/error.log
    CustomLog /var/www/myhost.com/log/access.log combined
</VirtualHost>

# ... many more VirtualHosts

Atualmente, estou recebendo alguns erros aleatórios em /var/log/httpd-error.log, mas não estou recebendo nada em /var/log/httpd-access.log. É possível ter todos os acessos e erros duplicados em um arquivo de log compartilhado? É possível fazer isso sem adicionar novas entradas a cada VirtualHost?

    
por pix0r 13.10.2009 / 03:01

8 respostas

17

Veja o link

If CustomLog or ErrorLog directives are placed inside a section, all requests or errors for that virtual host will be logged only to the specified file. Any virtual host which does not have logging directives will still have its requests sent to the main server logs.

Em outras palavras, se você colocar diretivas de registro em uma seção do VirtualHost, ele substituirá as diretivas de registro na configuração principal do servidor. Se você deseja logar em um único arquivo de log, remova a configuração de log das seções do VirtualHost.

Por simplicidade, prefiro registrar todos os dados do Access em um único arquivo de log. Posteriormente, você pode processar os logs e dividir os arquivos de log em arquivos de log dos Hosts Virtuais. Além disso, gravar em um único arquivo de log é um uso mais eficiente dos recursos do computador e, em seguida, gravar em 30 arquivos de log de uma só vez. Apenas certifique-se de que seu LogFormat inclui o '% v', que registrará o nome do host virtual.

Is it possible to have ALL accesses and errors duplicated to a shared logfile?

Você pode registrar todos os erros e acesso a um arquivo de log compartilhado, mas o arquivo de log é feio. Primeiro, envie os dados de log do Apache para o syslog e, em seguida, use o syslog para enviar para um arquivo local ou um servidor de log remoto.

# Send access logs to syslog
LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
CustomLog "|/usr/bin/logger -t httpd -i -p local7.notice" combined
# Send error logs to syslog
ErrorLog syslog:local7

E depois em /etc/syslog.conf

# Send all HTTP log data to this file
local7.*        /var/log/http-all.log
    
por 02.04.2010 / 22:17
2

O que fiz foi adicionar uma segunda linha CustomLog na seção VirtualHost. Mas eu tive que fazer isso para cada arquivo conf vhost único. Ele funciona e está no meu modelo agora, para que novos vhosts sejam usados.

Meu apache2 agora registra ocorrências em dois lugares:

  1. Os detalhes de um vhost no diretório desse vhost e
  2. para /var/log/apache2 em um arquivo combinado para todos os vhosts.

Eu aplico um LogFormat diferente a cada um desses dois logs para acomodar respectivamente, é claro. O /var/log/apache2 log é analisado com Perl e sugado para uma estrutura MySQL altamente normalizada para análise e relatório. Logrotate varre uma vez por semana.

    
por 11.06.2011 / 07:48
1

bem, se você quiser ver os registros ao vivo em um só lugar para todos os hosts virtuais, basta digitar:

tail -f /var/www/*/access.log

a mesma regra se aplica para cat com grep:

 cat /var/www/*/access.log | grep "something"

ou se a rotação de log já compactou os arquivos:

gzip -d /var/www/*/access.log.2.gz

exemplos são testados no Debian / Ubuntu

    
por 19.02.2018 / 23:23
0

Eu não acho que isso seja possível. Pelo menos a documentação não menciona tal coisa.

A melhor maneira de simular esse tipo de comportamento é definir a tag% v no formato e na rotação do log dividir uma cópia dos arquivos de log para arquivos específicos do host virtual.

    
por 13.10.2009 / 09:39
0

Não sei se as localizações dos seus arquivos de log seguem qualquer tipo de padrão nos virtuais, mas, se o fizerem, esquecerei que o Apache cria um log duplicado e apenas ativa os logs quando eu precisar deles.

cat /var/www/*/log/access.log > /var/www/logs/access.log
    
por 30.10.2009 / 17:25
0

Estou procurando uma resposta para essa pergunta também. Até agora, tenho duas soluções:

  1. a solução cat mencionada por joebert
  2. minha própria solução final: tail -f /var/log/httpd/*access_log

Eu quero ver um tipo de exibição tail -f em todas as atividades do servidor da web no host. Eu prefiro ser capaz de seguir apenas um arquivo, no entanto, como eu realmente não gosto da forma como a cauda lida com vários arquivos.

    
por 18.12.2009 / 17:51
0

Você tem duas possibilidades usando a diretiva ErrorLog link

1) Use o syslog e manipule a duplicação em [r] syslog.conf

2) Use pipe, envie a entrada de log para um aplicativo / script e manipule a duplicação nesse aplicativo / script

    
por 28.06.2010 / 06:47
0

Está vendo todos os registros de acesso estritamente necessários? Se os erros forem realmente causados por uma solicitação de um vhost, deverá haver algo registrado no log de erros do vhost. Nesse caso, ls -t /var/www/*/log/error.log para determinar qual vhost é o culpado e, em seguida, observar apenas esse arquivo de log de acesso parece ser um bom primeiro passo para eliminar muita leitura de log desnecessária .

    
por 14.07.2010 / 07:37