Apache Logs · 3 min read · Jan 28, 2026

Suddivisione dei log di Apache con vlogger

Suddivisione dei log di Apache con vlogger

Versione 1.0
Autore: Falko Timme

Vlogger è un piccolo strumento con cui puoi scrivere i log di Apache suddivisi per host virtuali e giorni. Con vlogger, dobbiamo inserire solo una direttiva CustomLog nella nostra configurazione globale di Apache, e scriverà i log di accesso per ogni host virtuale e giorno. Pertanto, non devi suddividere il log di accesso complessivo di Apache in log di accesso per ogni host virtuale ogni giorno, e non devi configurare Apache per scrivere un log di accesso per ogni host virtuale (cosa che potrebbe farti esaurire rapidamente i descrittori di file).

Alla fine di questo tutorial ti mostrerò come utilizzare webalizer per creare statistiche dai log di accesso di Apache.

Non rilascio alcuna garanzia che questo funzionerà per te!

1 Nota preliminare

Ho testato vlogger su un sistema Debian Etch dove Apache2 è già installato e funzionante.

2 Installazione e configurazione di vlogger

Per installare vlogger, eseguiamo semplicemente

apt-get install vlogger

Dopo, dobbiamo cambiare la riga LogFormat (ci sono più righe LogFormat - almeno cambia quella che è chiamata combined) in /etc/apache2/apache2.conf. Dobbiamo aggiungere la stringa %v all’inizio:

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

Poi aggiungi la seguente riga CustomLog allo stesso file (puoi metterla direttamente dopo la riga LogFormat):

vi /etc/apache2/apache2.conf

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

Questa è l’unica direttiva CustomLog di cui abbiamo bisogno nella nostra configurazione di Apache. Si prega di disabilitare tutte le altre direttive CustomLog, specialmente nelle configurazioni del tuo host virtuale!

Il vantaggio di scrivere solo un log di accesso è che questo riduce notevolmente il carico sul server, specialmente se hai alcuni siti ad alto traffico sul tuo server.

Ora riavvia Apache:

/etc/init.d/apache2 restart

Vlogger ora creerà sottodirectory nella directory /var/log/apache2, una per ogni host virtuale, e creerà log di accesso che contengono la data corrente nel nome del file. Creerà anche un symlink chiamato access.log che punta al file di log corrente.

Supponiamo di avere due host virtuali, www.example.com e www.test.tld. Allora la directory /var/log/apache2 apparirà così:

/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

Per scoprire quali altre direttive della riga di comando di vlogger puoi inserire nella riga CustomLog, dai un’occhiata a

man vlogger

3 Creazione di statistiche con webalizer

In questo capitolo ti mostrerò come puoi creare statistiche dai file di log suddivisi con webalizer. Ancora una volta, suppongo che tu abbia due host virtuali, www.example.com e www.test.tld, e che questi host virtuali abbiano le radici dei documenti /var/www/www.example.com/web e /var/www/www.test.tld/web (è importante che i nomi dei server siano nei percorsi delle radici dei documenti, altrimenti la procedura seguente non funzionerà). Vorrei mettere le statistiche nelle directory /var/www/www.example.com/web/stats e /var/www/www.test.tld/web/stats, quindi queste devono già esistere.

Prima di tutto, installiamo webalizer:

apt-get install webalizer

Dai un’occhiata a

man webalizer

per vedere come funziona webalizer. Fondamentalmente, per creare statistiche per www.example.com dal log di accesso di ieri, puoi usare questo 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 è la posizione del webalizer.conf predefinito di Debian. /bin/date -d “1 day ago” +%m%d%Y stampa la data di ieri esattamente nel modo di cui abbiamo bisogno in modo da poter passare il log di accesso di ieri a webalizer senza dover conoscere la data esatta.)

Certo, non vogliamo eseguire un comando del genere manualmente per ogni host virtuale, quindi scriviamo un piccolo script shell che legge la directory /var/log/apache2 e crea statistiche per ogni host virtuale che ha log in quella directory. Chiamo lo script webstats e lo posiziono nella directory /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 |

Dobbiamo rendere eseguibile quello script:

chmod 755 /usr/local/sbin/webstats

Infine, creiamo un cron job che chiama lo script /usr/local/sbin/webstats ogni notte alle 04.00h:

crontab -e

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

Dopo che il cron job è stato eseguito per la prima volta, puoi andare su www.example.com/stats e www.test.tld/stats per vedere le statistiche nel tuo browser. È una buona idea proteggere con password le directory delle statistiche con .htaccess/.htpasswd.

4 Link

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.