Analytics trotz AdBlocker

Als Betreiber*in einer Website interessiert man sich dafür woher die Leser und Leserinnen kommen, wie viele es sind und welche Artikel am beliebtesten sind. Dafür gibt es seit vielen Jahren Analytics Software die bei diesem Vorhaben unterstützen. Aufgrund von AdBlockern funktioniert Analytics aber kaum noch.

With great analytics comes great responsibility

Auf der Suche nach einem geeignetem Tool stößt man früher oder später auf den Platzhirsch: Google Analytics. Google bietet eine einfache Möglichkeit der Integrierung in die eigene Website und man kann die Daten auch in anderen Tools von Google verwenden.

Leider hat damit Google auch Zugriff auf die Daten der Website und man möchte denen ja nicht noch mehr Daten geben als sie eh schon sammeln. Also sucht man weiter und findet Matomo (ehemals Piwik).

Matomo ist OpenSource und wird auf dem eigenen Server installiert. Die Funktionalität ist ähnlich wie die von Google aber mit dem Vorteil, dass man die Daten bei sich behält. Alles in allem also eine schöne Lösung.

Hier kommt µBlock ins Spiel. µBlock blockiert das Nachladen sämtlicher Trackingcodes, womit weder Google noch Matomo funktionieren. Ich weiß ehrlich gesagt nicht wie das bei AdBlock Plus aussieht aber das sollte man sowieso nicht verwenden.

µBlock vs Matomo

Welche Möglichkeit bleibt also noch? Man kann die Serverlogs auswerten. Der Webserver hat schon alle relevanten Daten, diese müssen nur noch ansehnlich aufbereitet werden.

Wie mache ich das jetzt?

Ich betreibe einen Nginx Webserver aber das geht natürlich (mit kleinen Anpassungen) genauso gut für Apache oder ähnliche.

Als erstes lässt man den Webserver für die Seite von Interesse eine dedizierte Access-Log Datei erstellen. Bei Nginx dazu einfach in den entsprechenden Server-Block folgendes Snippet einfügen.

server {

	# Logs
	# Muss natürlich entsprechend angepasst werden
	access_log /var/log/nginx/hackherz-access.log combined;

}

Um die Daten visuell aufzubereiten (die Logfile an sich ist sehr müßig zu lesen) verwenden wir GoAccess (auch auf GitHub zu finden).

Unter Debian installiert man dazu das Paket goaccess-tcb (das tcb am ende ist wichtig). Für andere Distributionen wird man hier fündig.

goaccess -f /var/log/nginx/hackherz-access.log -o hackherz.html

Dashboard mit GoAccess

Nginx rotiert die Logfiles, damit diese nicht zu groß werden. Leider limitiert das die Verlaufslänge von GoAccess (wenn die Daten nicht mehr im Log stehen kann man sie auch nicht mehr auswerten). Das lässt sich umgehen indem man eine Datenbank anlegen lässt.

goaccess -f /var/log/nginx/hackherz-access.log --load-from-disk --keep-db-files -o hackherz.html --log-format=COMBINED

Leider verdoppeln sich die Einträge wenn man die selbe Logfile mehrfach einliest. Abhilfe schafft ein einfaches Skript welches (hier) von dem Autor vorgeschlagen wurde.

#!/bin/bash

# change the following two...
LOG=/var/log/nginx/hackherz-access.log
LASTREAD=/var/log/nginx/.goaccess.last

OFFSET=$(sed -n '$=' $LOG)
START=1
if [[ -s $LASTREAD ]]; then
	LASTLINENO=$(head -1 $LASTREAD | sed '/^\s*$/d')
	LASTLINE=$(tail -1 $LASTREAD)

	if sed "${LASTLINENO}q;d" $LOG | grep -q "$LASTLINE"; then
		START=$LASTLINENO
		START="$(($START + 1))"
	fi
fi

sed -n $START','$OFFSET'p' < $LOG
echo -e "$OFFSET\n$(/bin/sed "${OFFSET}q;d" $LOG)" > "$LASTREAD"

Das Skript merkt sich welche Zeile zuletzt gelesen worden ist und gibt beim nächsten mal nur die folgenden Zeilen aus. Ich habe das Skript goaccess-rot.sh genannt, aber der Name spielt eigentlich keine Rolle.

goaccess-rot.sh | /usr/bin/goaccess --load-from-disk --keep-db-files -o /srv/piwik/hackherz.html --log-format=COMBINED

Die HTML wird bei mir jede Stunde (zur 17. Minute) mittels Cronjob neu generiert (crontab -e).

17 * * * * /srv/goaccess-rot.sh | /usr/bin/goaccess --load-from-disk --keep-db-files -o /srv/piwik/hackherz.html --log-format=COMBINED

Die ausgegebene HTML kann ich über Nginx aufrufen und liegt bei mir in einem Passwortgeschützten bereich.

Installation von GoAccess

GoAccess ist in den meisten Paketquellen bereits enthalten aber meistens in einer veralteten Version. Wie man eine neuere Version installiert erfährt man wieder hier und für Debian habe ich das nochmal hier zusammengefasst.

$ echo "deb http://deb.goaccess.io/ $(lsb_release -cs) main" | tee -a /etc/apt/sources.list.d/goaccess.list
$ wget -O - https://deb.goaccess.io/gnugpg.key | apt-key add -
$ apt-get update
$ apt-get install goaccess-tcb
Categories: server, linux
Tags: monitoring, german