Überarbeitet am 9. September 2026.

GoAccess nutze ich gern, wenn ich wissen möchte, was auf meinem Webserver tatsächlich ankommt. Anders als klassische Webanalyse braucht es dafür kein zusätzliches JavaScript im Browser: GoAccess wertet einfach die vorhandenen Nginx- oder Apache-Logs aus.

Das macht die Lösung angenehm schlank. Man sollte aber einen Punkt sauber auseinanderhalten: GoAccess ist nicht automatisch „DSGVO-konform“, nur weil kein Tracking-Skript läuft. Webserver-Logs können personenbezogene Daten wie IP-Adressen enthalten. Aufbewahrung und Konfiguration gehören deshalb genauso zum Datenschutzkonzept.

Was kann GoAccess?

GoAccess ist ein Open-Source-Loganalysator für Webserver. Die Auswertung kann direkt im Terminal oder als HTML-Report erfolgen. Interessant sind unter anderem:

  • aufgerufene Seiten,
  • Hits und geschätzte eindeutige Besucher,
  • 404-Fehler,
  • Referrer,
  • Browser und Betriebssysteme,
  • Bandbreite,
  • auffällige Hosts und Crawler.

Aktuell ist GoAccess 1.11. Die Version vom Juli 2026 hat unter anderem Speicherverbrauch und Parsing-Geschwindigkeit verbessert.

Installation unter Debian oder Ubuntu

Die einfachste Variante ist zunächst das Paket der Distribution:

sudo apt update
sudo apt install goaccess apache2-utils

Version prüfen:

goaccess --version

Wenn die Distribution deutlich hinterherhinkt, stellt GoAccess ein eigenes Debian-/Ubuntu-Repository bereit:

wget -O - https://deb.goaccess.io/gnugpg.key | gpg --dearmor | sudo tee /usr/share/keyrings/goaccess.gpg >/dev/null
echo "deb [signed-by=/usr/share/keyrings/goaccess.gpg arch=$(dpkg --print-architecture)] https://deb.goaccess.io/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/goaccess.list
sudo apt update
sudo apt install goaccess

Erster Test direkt im Terminal

Für ein klassisches Nginx-Combined-Log:

sudo goaccess /var/log/nginx/access.log --log-format=COMBINED

Damit sieht man sofort, ob das Logformat erkannt wird.

HTML-Report für einen einzelnen Blog erzeugen

Ich verwende für einzelne Webseiten gern separate Access-Logs. Angenommen, mein WordPress-Blog schreibt nach:

/var/log/nginx/access-blog.log

Dann lege ich ein geschütztes Ausgabeverzeichnis an:

sudo mkdir -p /var/www/serverstats
sudo chown www-data:www-data /var/www/serverstats

Ein statischer Report lässt sich so erzeugen:

sudo goaccess /var/log/nginx/access-blog.log \
  --log-format=COMBINED \
  --ignore-crawlers \
  --anonymize-ip \
  --anonymize-level=2 \
  --no-query-string \
  --output=/var/www/serverstats/index.html

Was macht die IP-Anonymisierung?

GoAccess kann IP-Adressen für die Auswertung anonymisieren. Mit --anonymize-level=2 werden laut aktueller Dokumentation bei IPv4 16 Bit und bei IPv6 80 Bit verborgen.

Wichtig: Das verändert nicht rückwirkend die ursprüngliche Nginx-Logdatei. Wenn dort vollständige IP-Adressen stehen, bleiben sie dort stehen. Wer datensparsamer loggen möchte, sollte zusätzlich die Nginx-Logkonfiguration und die Aufbewahrungsdauer prüfen.

Rotierte Logs mit einbeziehen

Wenn Logrotate ältere Dateien komprimiert, kann man sie mit zcat -f gemeinsam an GoAccess übergeben:

zcat -f /var/log/nginx/access-blog.log* | goaccess - \
  --log-format=COMBINED \
  --ignore-crawlers \
  --anonymize-ip \
  --anonymize-level=2 \
  --no-query-string \
  --output=/var/www/serverstats/index.html

Damit brauche ich nicht mehr wie früher alle Logs erst in ein temporäres Arbeitsverzeichnis zu kopieren und zu entpacken.

Report automatisch aktualisieren

Dafür lege ich ein kleines Script an:

sudo nano /usr/local/bin/goaccess-report.sh
#!/bin/sh
set -eu

zcat -f /var/log/nginx/access-blog.log* | goaccess - \
  --log-format=COMBINED \
  --ignore-crawlers \
  --anonymize-ip \
  --anonymize-level=2 \
  --no-query-string \
  --output=/var/www/serverstats/index.html

chown www-data:www-data /var/www/serverstats/index.html

Ausführbar machen:

sudo chmod 750 /usr/local/bin/goaccess-report.sh

Zum Beispiel alle 15 Minuten per Cron:

*/15 * * * * /usr/local/bin/goaccess-report.sh >/dev/null 2>&1

Statistik nicht offen ins Internet stellen

Der HTML-Report enthält Informationen darüber, welche Seiten aufgerufen werden, welche Referrer auftauchen und welche Fehler entstehen. Den möchte ich nicht öffentlich anbieten.

Mit Basic Auth ist die einfache Variante:

sudo htpasswd -c /etc/nginx/.htpasswd-goaccess stats

In Nginx:

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name stats.example.de;

    root /var/www/serverstats;
    index index.html;

    ssl_certificate /etc/letsencrypt/live/stats.example.de/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/stats.example.de/privkey.pem;

    location / {
        auth_basic "Serverstatistik";
        auth_basic_user_file /etc/nginx/.htpasswd-goaccess;
        try_files $uri $uri/ =404;
    }
}

Danach:

sudo nginx -t
sudo systemctl reload nginx

Bots nicht mit echten Lesern verwechseln

--ignore-crawlers filtert bekannte Crawler aus der Besucherstatistik. Trotzdem sollte man Logstatistiken nie mit einer exakten Zahl realer Menschen verwechseln. Bots ändern User-Agents, Nutzer teilen IP-Adressen und Datenschutzfunktionen verändern Erkennungsmerkmale.

Genau deshalb vergleiche ich GoAccess eher als technische Serverstatistik mit Matomo als als identische Messmethode. Meine aktuelle Matomo-Docker-Anleitung findest du hier: Matomo mit Docker Compose installieren.

GoAccess oder Matomo?

Für mich erfüllen beide unterschiedliche Aufgaben. GoAccess zeigt sehr direkt, was der Webserver gesehen hat – inklusive Bots, Fehlern und ungewöhnlichen Requests. Matomo kann dagegen viel stärker das Verhalten echter Webseitenbesucher analysieren.

Gerade beim Debuggen von 404-Fehlern oder beim Vergleich von Bot-Traffic ist GoAccess für mich extrem praktisch.

Fazit

GoAccess ist 2026 immer noch eine meiner liebsten schlanken Möglichkeiten, Nginx-Logs lesbar zu machen. Die aktuelle Version ist schnell, kann IP-Adressen für die Ausgabe anonymisieren und erzeugt ohne zusätzliche Datenbank einen brauchbaren HTML-Report. Wichtig ist nur, die zugrunde liegenden Serverlogs und deren Aufbewahrung beim Datenschutz nicht zu vergessen.

Quellen: GoAccess Manual und GoAccess Release Notes.