awstats ist eine Software, die aus den Logfiles des Apache-Servers nette HTML-Seiten mit Statistiken über den Zugriff auf die Websites generiert.
Die Installation lief problemlos mittels apt-get awstats
und die Konfiguration erfolgt in /etc/awstats/ über einzelne Dateien für jede auszuwertende Domain. Dazu ist es zunächst notwendig (nicht direkt notwendig, aber übersichtlicher), im Apache für jede Domain ein separates Logfile einzurichten. Dies habe ich unter /etc/apache2/sites-available/ in den jeweiligen Konfigurationsdateien unter der Direktive VirtualHost für jede Domain so eingestellt: ErrorLog /var/log/apache2/<em>domainname</em>/error.log
CustomLog /var/log/apache2/<em>domainname</em>/access.log combined
Hier kann dann auch gleich der folgende Code eingetragen werden, der den von awstats generierten Seiten erlaubt unter domain.tld/awstats-icon auf nette Icons zuzugreifen: Alias /awstats-icon /usr/share/awstats/icon
Nach einem Neustart des Apache-Servers dürfte die neue Konfiguration greifen und die eigentliche Einrichtung von awstats kann beginnen. Hier nun die wichtigsten Zeilen aus /etc/awstats/awstats.domainname.conf:
LogFile="/var/log/apache2/<em>domainname</em>/access.log"
LogFormat=1
SiteDomain="<em>domainname</em>"
HostAliases="<em>Aliases der Domain</em>"
DirIcons="/awstats-icon"
- Position des Logfiles wie in der Apache-Konfiguration angegeben.
- Format des Logfiles (hier: “combined”)
- Domainname der auszuwertenden Website. Bei einem Logfile, dass mehrere Websites umfasst, werden nur die Einträge ausgewertet, die der angegebenen Domain entsprechen.
- Hier sollten sämtliche Aliases (bspw. “www.domainname“) der Domain eingetragen werden, um alle Einträge zu erfassen (sonst werden wie gesagt nur die Einträge für die unter 3) angegebene Domain ausgewertet).
- Hier wird das Icon-Verzeichnis angegeben, das wir weiter oben in der Apache-Konfigurationsdatei als Alias konfiguriert haben.
Das war’s auch schon mit der Konfiguration… jetzt muss nur noch ein Cronjob eingerichtet werden, der zur gewünschten Zeit die HTML-Seiten aktualisiert. Dies habe ich folgendermaßen gelöst: In die /etc/cron.d/awstats habe ich diesen Code eingefügt, der mein Updatescript dreimal täglich ausführt (um 0, 8 und 16 Uhr): 0 0 * * * root /home/www/awstats/updatenow
0 8 * * * root /home/www/awstats/updatenow
0 16 * * * root /home/www/awstats/updatenow
Das Updatescript sieht so aus:
#!/bin/bash
/usr/share/doc/awstats/examples/awstats_updateall.pl -awstatsprog=/usr/lib/cgi-bin/awstats.pl now
/usr/share/doc/awstats/examples/awstats_buildstaticpages.pl -config=<em>domainname</em> -lang=de -awstatsprog=/usr/lib/cgi-bin/awstats.pl -dir=/home/www/awstats/<em>domainname</em>
Die erste Zeile (nach der Shebang) führt ein komplettes Update der awstats-Datenbank durch, die zweite Zeile generiert die HTML-Seiten unter /home/www/awstats/ im Unterordner mit Namen der Domain. Diese Zeile habe ich für jede Domain erneut mit passenden Ordnernamen angefügt. Das Verzeichnis /home/www/awstats/domainname/ habe ich dann noch im Apache als Alias domain.tld/stats eingetragen mittels Alias /stats /home/www/awstats/<em>domainname</em>
<Directory /home/www/awstats/<em>domainname</em>>
DirectoryIndex awstats.<em>domainname</em>.html
AllowOverride AuthConfig
Order allow,deny
allow from all
</Directory>
Dies sorgt dafür, dass der Index direkt auf die standardmäßig als Hauptseite generierte Datei awstats.domainname.hmtl zeigt. Dann noch schnell mit .htaccess das Verzeichnis gegen unerlaubten Zugriff sichern und fertig ist die Website-Statistik 😀
Es ist zwar selbstverständlich, aber ich habe lange rumprobiert, bis ich (mit Forumhilfe) feststellen musste, dass in den jeweiligen Apachekonfigurationen der verschiedenen Webseiten die Logdatei-Direktive (CustomLog und ErrorLog) auf eine jeweils eigene Logdatei deuten muss.
Also dass awstats nicht aus einem Logfile für alle Webseiten liest, sonder pro Seite ein eigenes Logfile braucht.
Ich dachte, awstats kann das dann jeweils rausfiltern, aber das geht ja nicht, weil es im Logfile gar nicht aufgeschlüsselt ist, welche Seite aufgerufen wurde.
Gruß franc