Zum Inhalt springen →

Dem GoAccess Log Analyzer sinnvolle Daten entlocken

Mit dem GoAccess Analyse Tool kann man schnell und einfach Webserver-Logfiles z.B. vom Apache Webserver analysieren und ein übersichtliches Dashboard mit den wichtigsten Daten erzeugen, ohne ein Tracking Pixel oder Third-Party JavaScript Code auf der Webseite einzubinden.

Mit GoAccess kann man aus dem Apache-Webserver Logs eine statische HTML Datei erzeugen, die dann wie gewohnt im Browser aufgerufen werde kann um die KPI einer Webseite zu überprüfen. Dabei werden alle gängigen Log-Datei Formate wie z.B. Apache, Nginx und viele weitere unterstützt.

Die Installation von GoAccess auf einem Linux PC oder Server ist denkbar einfach und es werden alle gängigen Linux-Distributionen wie z.B. Debian/Ubuntu, Fedora, Arch Linux, Gentoo, FreeBSD, OpenBSD, OpenSUSE, Slackware und mehr unterstützt.

Details zur Installation findet man unter https://goaccess.io/download#distro

GoAccess aufrufen

Um ein GoAccess Dashboard für eine Webseite zu erstellen, ruft man einfach folgenden Befehl auf:

goaccess /var/log/apache2/access.log --log-format=COMBINED -o dashboard.html

Die erzeugte Datei dashboard.html kann im Browser aufgerufen werden und enthält die wichtigsten Daten.

Damit könnte der Beitrag hier schon enden. Leider ist es aber nicht ganz so einfach und das hier gezeigte Dashboard würde ganz anders aussehen, wenn ich einfach nur die oben angegebene Zeile aufrufe.

GoAccess geht hin und wertet alle Zeilen der apache.log Datei aus.

Das klingt erst mal richtig, aber in vielen Fällen sind die Rohdaten aus der Apache-Log-Datei eigentlich nicht nutzbar, da auch alle HTTP-Requests von Suchmaschinen (Bots), Hackern, RSS-Readern, XML-RPC (Extensible Markup Language Remote Procedure Call) Aufrufe, etc. im Logfile festgehalten werden.

In meinem konkreten Fall ist die Anzahl der Aufrufe von Hackern und Suchmaschinen in etwa um Faktor 10 größer als die Anzahl der „echten“ Aufrufe von echten Menschen die einen echten Blog-Post lesen wollen, daher habe ich mir ein kleines Shell Script geschrieben, mit dem ich die Apache-Logfiles vor der Auswertung durch GoAccess grob filtere. Dafür habe ich mir die Logfiles und die generierten Dashboards mal im Detail angesehen und einen Filter realisiert, der zwar nicht immer 100% funktioniert, aber ein sehr brauchbares Dashboard erzeugt so dass ich nun in der Lage bin mich darüber zu informieren, was meine Leser so interessiert und wo es sich lohnt in Zukunft mehr Content zu schreiben.

Das GoAccess Filter Script

Das folgende Filter Script wird auf meinem Server jede Nacht per Cronjob aufgerufen, so dass ich tagesaktuell frische Statistiken für die Domains androidx.de, jentsch.io und android-entwickler.com habe.

#!/bin/sh
set -x

cd /projects/stats/

TARGETDIR=/var/www/meinedomain.de/https/logs
WORKDIR=/projects/stats/work

for DOMAIN in androidx.de jentsch.io ux5.de android-entwickler.com
do
    echo Create Stats for $DOMAIN
    LOGS=/var/log/apache2/$DOMAIN.access.log
    rm $WORKDIR/*.*
    cp $LOGS* $WORKDIR
    gzip -d work/*.gz
    cat work/$DOMAIN.access.*  | \
        grep -v xmlrpc.php     | \
        grep -v wp-json        | \
#        grep -v "/category/"   | \
        grep -v "adminer.php"  | \
        grep -v "robots.txt"   | \
        grep -v "app-ads.txt"  | \
        grep -v "ads.txt"      | \
        grep -v wp-login.php   | \
#        grep -v "/feed"        | \
#        grep -v "?author="     | \
        grep -v "wp-includes"  | \
        grep -v "wp-content"   | \
        grep -v "wp-admin"     | \
        grep -v SemrushBot     | \
        grep -v DotBot         | \
        grep -v YandexBot      | \
        grep -v AhrefsBot      | \
        grep -v SeznamBot      | \
        grep -v Googlebot      | \
        grep -v msnbot         | \
        grep -v bingbot        | \
        grep -v Applebot       | \
        grep -v MJ12bot        | \
        grep -v YandexImages   | \
        grep -v DuckDuckGo-Favicons-Bot | \
        goaccess  -o /var/www/meinedomain.de/https/logs/$DOMAIN.html  --log-format=COMBINED
done

In der Schleife kopiere ich die komprimierten Logfiles für eine Domain in ein Arbeitsverzeichnis (work) und extrahiere die Logfiles. Die Inhalte der Datei(en) werden dann mit dem Befehl cat über den Filter (Jeder grep Aufruf ist ein Filter, der mit dem Kommentar-Zeichen # am Anfang der Zeile aktiviert oder deaktiviert werden kann) an goaccess übergeben. Aus den gefilterten Daten wird dann eine Datei erzeugt, die im Filesystem abgelegt wird. Dabei ist darauf zu achten, dass die erzeugte HTML Datei in einem Ordner abgelegt wird der über den Browser per HTTP aufgerufen werden kann. Zusätzlich empfehle ich, den Ordner mit Hilfe einer .htaccess Datei vor unberechtigtem Zugriff zu schützen, wenn man die Webserver-Statistiken nicht öffentlich machen möchte.

Das Skript kann frei kopiert, verändert und vertrieben werden. Wichtig ist nur, dass die Verzeichnisse und Domains angepasst werden.

Optional: IP Adressen in Apache Logfiles anonymisieren

Der folgende Abschnitt ist eine gekürzte Kopie der Anleitung zum anonymisieren der IP Adressen in Apache Logfiles unter https://www.techgrube.de/tutorials/ip-adressen-in-apache-logfiles-anonymisieren. Der Text wurde unter der Creative Commons Namensnennung 4.0 International Lizenz veröffentlicht und darf beliebig vervielfältigt und weiterverarbeitet werden unter der Bedingung der Namensnennung.

Bei Apache Server wird in der Standardeinstellung von jedem Besucher die vollständige IP Adresse in den Logfiles gespeichert. Damit befindet man sich nach wie vor in einer rechtlichen Grauzone (BGH bestätigt: Webserver-Logfiles nicht nach § 100 Abs. 1 TKG erlaubt). Man kann nun mit einem Skript die IP Adressen anonymisieren.

Diese Möglichkeit bietet ein Skript der Swiss Privacy Foundation, welches hier heruntergeladen werden kann: Anonip ist ein Tool zur Anonymisierung von IP-Adressen in Logdateien

Das Skript kann an beliebiger Stelle auf dem Webserver gespeichert werden. Anschließend muss nur in der Virtual Host Datei von Apache der Eintrag für die Logfiles angepasst werden, so dass alle Daten die in das Logfile geschriebene werden sollen vorher durch das Anonymisierungsskript gepiped werden.

Häufig findet sich in der Config des Virtual Hosts ein Eintrag wie:

CustomLog ${APACHE_LOG_DIR}/access.log combined

Eine Möglichkeit die IP Adressen in Apache Logfiles anonymisieren ist, diese Zeile durch folgende zu ersetzen:

CustomLog „|/pfad/zum/anon-skript.py –ipv4mask 8 –ipv6mask 64 –output /var/log/apache2/techgrube.log“ combined

Dadurch schreibt Apache nicht direkt in das Logfile, sondern die Daten werden zuerst an das Anonymisierungsskript weitergeleitet und erst nach der anonymisierung der IP-Adresse im Logfile gespeichert. Hierbei wird bei einer IP Adresse der letzte Block immer entfernt.

Wer der Ansicht ist auf das speichern der kompletten IP Adresse der Webseitenbesucher verzichten zu können findet mit diesem Skript eine bequeme Methode zum anonymisieren der Logfiles.

https://www.techgrube.de/tutorials/ip-adressen-in-apache-logfiles-anonymisieren

Fazit

Seit ich den Filter für die GoAccess Logfile Auswertung im nutze habe ich viel über meine Webseiten-Besucher gelernt und hoffe, in Zukunft noch bessere Inhalte liefern zu können. Dank GoAccess und ein wenig Shell Skript Programmierung muss ich keine zusätzlichen JavaScript Snippets in den HTML-Code meiner Webseiten einbauen und habe eine Alternative zu Google Analytics, die 100% DSGVO konform ist, da hier keine persönlichen Daten wie z.B. IP-Adressen an dritte weitergegeben und verarbeitet werden.

Alle weiteren Infos zu GoAccess findet man auf der Webseite der Entwickler unter https://goaccess.io/.

Veröffentlicht in Allgemein