Lighttpd Log-Dateien mit vlogger aufteilen und Statistiken mit Webalizer erstellen

Version 1.0
Author: Falko Timme


Vlogger ist ein kleines Tool, mit dem man lighttpd Log-Dateien schreiben kann, getrennt nach virtuellen Hosts und Tagen. Mit vlogger brauchen wir nur eine accesslog.filename Anweisung in unsere globale lighttpd Konfiguration setzen und es werden access logs für jeden virtuellen Host und Tag geschrieben. Daher ist es nicht notwendig, dass Du lighttpds zentralen access log in access logs für jeden virtuellen Host und Tag aufteilst. Außerdem musst Du lighttpd nicht konfigurieren, dass es einen access log pro virtuellen Host schreibt (was dazu führen kann, dass die maximale Anzahl an gleichzeitig geöffneten Dateien überschritten wird).

Am Ende dieser Anleitung werde ich zeigen, wie man webalizer verwendet um Statistiken aus den lighttpd access logs zu erstellen.

Ich übernehme keine Garantie, dass dies auch bei Dir funktioniert!

1 Vorbemerkung

Ich habe vlogger auf einem Debian Etch System ausprobiert, auf dem lighttpd bereits installiert war und funktionierte.

2 Installation und Konfiguration von vlogger

Um vlogger zu installieren, führen wir einfach Folgendes aus

apt-get install vlogger

Danach müssen wir die accesslog.filename Zeile in /etc/lighttpd/lighttpd.conf bearbeiten und eine accesslog.format Zeile anfügen, die mit vlogger funktioniert:

vi /etc/lighttpd/lighttpd.conf


[...]
#### accesslog module accesslog.filename = "| /usr/sbin/vlogger -s access.log /var/log/lighttpd" accesslog.format = "%v %h %V %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" [...]
Bitte deaktiviere alle anderen accesslog.filename und accesslog.format Anweisungen in Deiner lighttpd Konfiguration, insbesondere in den vhost Konfigurationen!

Der Vorteil wenn nur ein access log geschrieben wird, besteht darin, dass dies die Belastung auf dem Server enorm verringert, besonders wenn Du einige viel besuchte Seiten auf Deinem Server hast.

Starte lighttpd nun neu:

/etc/init.d/lighttpd restart

Vlogger erstellt nun Unterverzeichnisse im /var/log/lighttpd Verzeichnis, eins pro virtuellen Host. Vlogger erstellt außerdem access logs, die das derzeitige Datum im Dateinamen enthalten. Es erstellt weiterhin einen symlink mit der Bezeichnung access.log, der auf die derzeitige Log-Datei hinweist.

Lass uns davon ausgehen, dass wir zwei virtuelle Hosts haben, www.example.com und www.test.tld. Dann sieht das /var/log/lighttpd Verzeichnis wie folgt aus:

/var/log/lighttpd/
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

Um zu erfahren, welche anderen vlogger Kommandozeilen Anweisungen Du in die accesslog.filename Zeile setzen kannst, sieh Dir Folgendes an

man vlogger


3 Statistiken mit Webalizer erstellen

In diesem Kapitel werde ich demonstrieren, wie man mit Webalizer Statistiken von den aufgeteilten Log-Dateien erstellen kann. Nochmal, ich gehe davon aus, dass Du zwei virtuelle Hosts www.example.com und www.test.tld hast und dass diese virtuellen Hosts die Dokumenten-Roots /var/www/www.example.com/web und /var/www/www.test.tld/web haben (es ist wichtig, dass die Servernamen in den Dokumenten-Root-Verzeichnissen stehen, sonst funktioniert die folgende Prozedur nicht). Ich möchte die Statistik in dem Verzeichnis /var/www/www.example.com/web/stats und /var/www/www.test.tld/web/stats, speichern, also müssen beide bereits vorhanden sein.

Lass uns zuerst webalizer installieren:

apt-get install webalizer

Sieh Dir Folgendes an

man webalizer

um zu sehen, wie webalizer funktioniert. Grundsätzlich kannst Du diesen Befehl verwenden, um Statistiken für www.example.com vom gestrigen access log zu erstellen:

/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/lighttpd/www.example.com/`/bin/date -d "1 day ago" +%m%d%Y`-access.log

(/etc/webalizer/webalizer.conf ist der Ort von Debians Standard webalizer.conf. /bin/date -d "1 day ago" +%m%d%Y druckt das gestrige Datum genauso wie wir es brauchen, damit wir das gestrige access.log an webalizer weitergeben können ohne das genaue Datum wissen zu müssen.)

Natürlich möchten wir einen solchen Befehl nicht manuell für jeden Host ausführen, daher schreiben wir ein kleines Shell Skript, das das /var/log/lighttpd Verzeichnis liest und Statistiken für jeden virtuellen Host erstellt, der logs in diesem Verzeichnis hat. Ich benenne das Skript webstats und lege es im /usr/local/sbin Verzeichnis ab:

vi /usr/local/sbin/webstats


#!/bin/sh
logdir=/var/log/lighttpd 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
Wir müssen das Skript ausführbar machen:

chmod 755 /usr/local/sbin/webstats

Letztlich erstellen wir einen Cron Job, der das /usr/local/sbin/webstats Skript jede Nacht um 04.00 Uhr abruft:

crontab -e


0 4 * * * /usr/local/sbin/webstats &> /dev/null
Nachdem der Cron Job zum ersten Mal ausgeführt worden ist, kannst Du zu http://www.example.com/stats und http://www.test.tld/stats gehen, um die Statistiken in Deinem Browser sehen zu können.

4 Links

0 Kommentar(e)

Zum Posten von Kommentaren bitte