AWStats: die eigenen Besuche ausschließen
AWStats analysiert Logfiles und erstellt nette Statistiken. So auch hier für diesen Blog. Um die schier unfassbare Menge an Visits auch nur im Ansatz zu begreifen, rödelt also jede Nacht AWStats durch die Apache-Logfiles. Das hat im Gegensatz zu Google-Analythics den Vorteil, dass die Daten schön hier lokal gespeichert werden. Außerdem erfolgt die Erfassung der Daten Serverseitig und nicht per Javascript. Das wird nämlich von vielen Usern einfach geblockt (Hallo <noscript>!).
Statistiken sind nie zu 100% genau. Dennoch stört mich, dass die eigenen Hits in den Statistiken auftauchen. Das lässt sich aber verhindern..
Methode 1: eigener vHost
Einfach einen zweiten VHost, z.b. dev.domain.com anlegen. Der VHost zeigt ins selbe Verzeichnis wie die Hauptdomain, hat aber eine extra Logdatei. AWStats wertet nur die Logs der Hauptdomain aus. Die Links auf der Webseite müssen dazu aber zwingend relativ sein - sonst landet man früher oder später wieder auf der Hauptdomain und wird "erfasst".Bei Wordpress stellte sich das schon mal als sehr schwierig heraus. Viele Links enthalten hier direkt den Domainnamen.
Methode 2: Apache conditional logging
Per conditional logging werden bestimmte Logeinträge erst gar nicht geschrieben. Als Kriterium kann z.B. die IP-Adresse verwendet werden. Mit DSL und daher dynamischer IP aber eher schwierig. Bleibt also nur noch der Cookie zur Identifikation. Wir setzen auf der eigenen Seite einen bestimmten Cookie, z.B. "DONTSTATME=true". Dazu einfach in die Adressleiste des Browsers folgendes tippen:javascript:document.cookie="DONTSTATME=true; expires=Sat, 17 Dec 2021 22:59:00 GMT"
Nach reload der Seite ist der Cookie gesetzt. Jetzt können wir das conditional logging konfigurieren:
SetEnvIf HTTP_COOKIE "(^| )DONTSTATSME=true($|;)" dontlog CustomLog logs/access_log common env=!dontlog
Nachteil hier: Requests mit diesem Cookie werden jetzt gar nicht mehr geloggt. Nirgends. Generell eine schlechte Idee. Irgendwie. Außerdem legt Syscp pro VHost automatisch einen CustomLog-Eintrag an, der sich leider nicht so leicht um "env=!dontlog" erweitern lässt. Zumindest nicht ohne an der Source rumzufummeln.
Methode 3: Logfile greppen
AWStats akzeptiert auch Logfiles von einer Pipe: mit grep -v DONTSTATME=true /path/to/log würden bei AWStats nur "richtige" Hits ankommen. Dazu muss man den LogFile-Parameter der AWStats-Config folgendermaßen anpassen (/etc/awstats/awstats.domain.com.conf):LogFile="grep -v DONTSTATME=true /path/to/access.log |"
Problem: Das Apache "combined"-Logformat loggt gar keine Cookies. Lässt sich aber leicht ändern. Wir öffnen die Datei /etc/apache2/apache2.conf und suchen die Zeilen mit "LogFormat".
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{Cookie}i\"" combined
Entweder die Zeile mit "combined" direkt abändern oder ein neues Logformat erstellen, z.B. combined-cookies.
Dann muss AWStats das neue Logformat noch mitgeteilt werden (/etc/awstats/awstats.domain.com.conf):
LogFormat = "%host %other %logname %time1 %methodurl %code %bytesd %refererquot %uaquot %otherquot"
Apache restart/force-reload und alles ist gut. Vorausgesetzt man vergisst nicht den Cookie zu setzten, wenn man Methode 2 oder 3 verwendet.