Registro di accesso "catch-all" con host virtuali Apache?


16

Ho molti host virtuali impostati su un server Web, ognuno con il proprio errore e il registro di accesso. Le linee rilevanti di httpd.confsono qualcosa del genere:

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

Attualmente, visualizzo alcuni errori casuali in /var/log/httpd-error.log, ma non visualizzo nulla in /var/log/httpd-access.log. È possibile duplicare TUTTI gli accessi e gli errori in un file di registro condiviso? È possibile farlo senza aggiungere nuove voci a ogni singolo VirtualHost?

Risposte:


17

Vedi http://httpd.apache.org/docs/2.2/logs.html#virtualhost

Se le direttive CustomLog o ErrorLog vengono inserite in una sezione, tutte le richieste o gli errori per quell'host virtuale verranno registrati solo nel file specificato. Qualsiasi host virtuale che non ha direttive di registrazione avrà comunque le sue richieste inviate ai registri del server principale.

In altre parole, se si inseriscono le direttive di registrazione all'interno di una sezione VirtualHost, queste sostituiranno le direttive di registrazione all'interno della configurazione del server principale. Se si desidera accedere a un singolo file di registro, rimuovere la configurazione del registro dalle sezioni VirtualHost.

Per semplicità, preferisco registrare tutti i dati di Access in un singolo file di registro. Successivamente, è possibile elaborare i registri e dividere i file di registro in file di registro per gli host virtuali. Inoltre, scrivere su un singolo file di registro è un uso più efficiente delle risorse del computer rispetto alla scrittura su 30 file di registro contemporaneamente. Assicurati solo che LogFormat includa '% v', che registrerà il nome dell'host virtuale.

È possibile duplicare TUTTI gli accessi e gli errori in un file di registro condiviso?

È possibile registrare tutti gli errori e accedere a un file di registro condiviso, ma il file di registro è brutto. Innanzitutto, inviare i dati del registro Apache a syslog, quindi utilizzare syslog per inviare a un file locale o un server di registro 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 poi in /etc/syslog.conf

# Send all HTTP log data to this file
local7.*        /var/log/http-all.log

2

Quello che ho fatto è stato aggiungere una seconda riga CustomLog nella sezione VirtualHost. Ma ho dovuto farlo per ogni singolo file conf vhost. Funziona ed è nel mio modello ora, quindi i nuovi host sono presi in considerazione.

Il mio apache2 ora registra i risultati in due punti:

  1. Le specifiche per un vhost nella directory di quel vhost e
  2. a /var/log/apache2in un file combinato per tutti vhosts.

Ovviamente, applico un LogFormat diverso a ciascuno di questi due registri per adattarsi rispettivamente. Il /var/log/apache2registro viene analizzato con Perl e risucchiato in una struttura MySQL altamente normalizzata per l'analisi e il reporting. Logrotate si alza una volta alla settimana.


1

bene se vuoi solo vedere i log live in un posto per tutti gli host virtuali puoi semplicemente digitare:

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

la stessa regola vale per cat con grep:

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

o se il registro ruota già i file compressi:

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

gli esempi sono testati su Debian / Ubuntu


0

Non penso sia possibile. Almeno la documentazione non menziona tale cosa.

Il modo migliore per simulare questo tipo di comportamento è definire il tag% v nel formato e alla rotazione del registro dividere una copia dei file di registro in file specifici dell'host virtuale.


0

Non so se le posizioni dei tuoi file di registro seguono qualsiasi tipo di modello attraverso i virtualhosts, ma se lo fanno dimenticherei che Apache crei un registro duplicato e semplicemente li cat quando ne ho bisogno.

cat /var/www/*/log/access.log > /var/www/logs/access.log

0

Sto cercando una risposta anche a questa domanda. Finora ho due soluzioni:

  1. il soluzione gatto citata da joebert
  2. la mia soluzione di coda: tail -f /var/log/httpd/*access_log

Voglio essere in grado di vedere una tail -fsorta di vista in tutte le attività del server web sull'host. Preferirei piuttosto riuscire a mettere in coda un solo file, tuttavia, poiché non mi piace molto il modo in cui tail gestisce più file.


Ottieni multitail. È abbastanza utile.
Fino al


0

Guardare tutti i registri di accesso è strettamente necessario? Se gli errori sono effettivamente causati da una richiesta per un vhost, dovrebbe esserci qualcosa registrato nel registro degli errori del vhost. In tal caso, ls -t /var/www/*/log/error.log per determinare quale vhost è il colpevole e quindi guardare solo quel file di registro di accesso sembrerebbe essere un buon primo passo per eliminare molte inutili letture dei registri .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.