Logfile-Auswertung mit AWStats
Webstatistik “macht” man heutzutage, so mein Eindruck, primär live und dann entweder mit Google Analytics, oder man legt - auch unter Datenschutzgesichtspunkten - lieber selbst Hand an und greift dann normalerweise zu Piwik. So war auch der Tenor der Antworten auf meine zwei Jahre zurückliegende Frage nach dem “Stand der Technik”.
Dieser Tage habe ich mich gefragt, ob sich nicht viele Fragen auch durch eine bloße Auswertung der Webserver-Logs beantworten lassen, und einmal geschaut, was mir das aus der Vergangenheit noch bekannte AWStats so macht. Und siehe da, die Software gibt es noch, und sie bekommt auch noch einmal jährlich ein Update, zumeist mit Daten zu neuen Browserversionen und Webcawlern.
Es ist auch gar nicht so viel Arbeit, damit einen ganzen Haufen Websites statistisch zu erfassen - wobei ich das folgende als konzeptionelles Beispiel verstanden sehen möchte, nicht als copy&paste-fähige Anleitung. Man sollte sich bspw. gut überlegen, ob man die Webserver-Logs wirklich weltweit lesbar haben möchte oder nicht lieber anderweitig dafür sorgt, dass AWStats auf sie zugreifen kann.
Ein Logfile pro virtual host
Man definiert im jeweiligen virtual host ein weiteres CustomLog, bspw. /var/log/awstats/$domain.log
, wobei $domain
natürlich durch einen passenden Bezeichner zu ersetzen ist. Dabei sollte man daran denken, dort auch das Standard-Logfile, zumeist also wohl /var/log/apache2/access.log
, erneut anzugeben, weil der Apache sonst nicht zusätzlich in das weitere Logfile schreibt, sondern nur noch nach dort.
Alternativ lässt man die Webserver-Logs nicht in eine Datei schreiben, sondern in ein Script pipen, das dann die eingehenden Logzeilen je nach Domain bzw. Hostnamen in der jeweils passenden Datei speichert - wie auch immer.
Die zusätzlichen Logfiles müssen für AWStats lesbar sein!
Eine AWStats-Konfigurationsdatei pro virtual host
Dann legt man sich für jede Domain (respektive jeden Hostname, respektive jeden virtual host) eine passende Konfigurationsdatei awstats.$domain.conf
an (wobei man $domain jeweils durch eine passende Bezeichnug ersetzt) - die Konfigurationsdatei kann im selben Verzeichnis wie das Script liegen, in /etc/awstats
, in /usr/local/etc/awstats
, direkt in /etc
oder auch in /etc/opt/awstats
. Legt man die Konfiguration im selben Verzeichnis wie das Script an und will man ebendieses auch über den Webserver aufrufen, empfiehlt es sich, den Zugriff auf die Konfiguration in einer .htaccess
-Datei zu sperren:
<FilesMatch "\.(conf|txt)$">
order allow,deny
deny from all
</FilesMatch>
Für Apache 2.4 ist diese Syntax bekanntermaßen anzupassen.
Statistik erstellen und im Web mit AWStats anschauen
Danach muss man das Sript nur noch aufrufen: perl /path/to/awstats.pl -config=$domain -update
, wobei freilich statt /path/to/
der richtige Pfad und statt $domain
die zuvor für den Namen der Konfigurationsdatei vergebene Kennung stehen muss. Voilà.
Die fertige Statistik lässt sich dann durch Aufruf von http://domain.example/cgi-bin/awstats.pl?config=$domain
anzeigen, wenn denn der Webserver von domain.example
entsprechend konfiguriert ist. “Oberhalb” von cgi-bin
kann man sich dann noch eine Startseite mit Links zu den einzelnen Statistiken basteln.
Regelmäßige Aktualisierung der Statistik per Cronjob
Per Cronjob (bspw. in /usr/local/bin/do-webstats.sh
) lassen sich dann täglich (stündlich, …) alle Statistiken aktualisieren:
#!/bin/dash
for i in $domain1 $domain2 $domainX; do
echo "--- $i"
perl /path/to/awstats.pl -config=$i -update
done
Rotation der zusätzlich für AWStats angelagen Logfiles
Und wenn man die - in unserem Beispiel in /var/log/awstats/
zusätzlich angelegten Logfiles nicht ins unendliche wachsen lassen möchte, sollte man auch logrotate
noch mit einer passenden Konfiguration versehen, bspw. in /etc/logrotate.d/awstats
:
/var/log/awstats/*.log {
weekly
missingok
rotate 4
compress
delaycompress
notifempty
# die Logs muessen so erzeugt werden, dass AWStats sie lesen kann!
create 644 root adm
sharedscripts
postrotate
/etc/init.d/apache2 reload > /dev/null
endscript
prerotate
/usr/local/bin/do-webstats.sh
endscript
}
Für meine Zwecke scheint mir das doch weitgehend auszureichen - vielleicht auch deshalb, weil ich die sonstigen vielfältigen Möglichen, die bspw. Piwik bietet, nicht recht verstanden habe und/oder nicht nutze.
Kommentare
Ansicht der Kommentare: Linear | Verschachtelt
Elmar Stellnberger am :
Es gibt etwas, das viel mehr kann als AWStats und trotzdem nur die Apache Logfiles braucht: https://www.elstel.org/software/webstat-bash/ Kann alles was man so braucht: Besucher pro Land, welche Seiten am meisten gesurft werden, alle Seitenaufrufe chronologisch zu einem Besuch, Referer-Tag Auswertung, welche Seiten über Suchmaschinen und Links von anderen Seiten angesteuert werden, wann die Seite zum letzten mal vom Googlebot gecrawlt worden ist, etc.
Thomas Hochstein am :
Danke für den Hinweis - liest sich interessant, aber nicht so, als würden daraus im Web abrufbare Statistiken (also Webseiten) erzeugt? Bislang habe ich davon abgesehen bei AWStats noch nicht wirklich etwas vermisst …
Thomas Hühn am :
GoAccess wäre auch interessant.