GoAccess — Webserver-Logs in Echtzeit auswerten

Praxis-Guide zu GoAccess — Webserver-Logs (Apache/Nginx) im Terminal-Dashboard oder als HTML-Report auswerten, mit Log-Format-Tipps für jeden Anwendungsfall.

GoAccess ist ein schneller Open-Source-Logfile-Analyzer, der deine Webserver-Logs in Echtzeit auswertet. Du startest ihn direkt im Terminal und bekommst ein interaktives ncurses-Dashboard mit Besuchern, Top-URLs, Statuscodes und Bandbreite – oder du lässt dir einen eigenständigen HTML-Report erzeugen, der sich per WebSocket sogar live aktualisiert. Das Tool versteht Apache- und Nginx-Logs im Common und Combined Log Format ebenso wie Cloud- und CDN-Formate. Der häufigste Stolperstein ist das korrekte --log-format: Stimmt es nicht mit deinen Logzeilen überein, bleibt die Auswertung leer oder falsch. Dieser Guide zeigt dir die wichtigsten Optionen für den Alltag, vom Live-Monitoring bis zum geteilten Report.

Grundlegende Verwendung

goaccess <logfile> — Öffnet eine Logdatei im interaktiven Terminal-Dashboard. GoAccess erkennt gängige Log-Formate automatisch.

goaccess /var/log/nginx/access.log

goaccess <logfile> --log-format=COMBINED — Wertet eine Logdatei im Combined Log Format von Apache/Nginx aus (am häufigsten).

goaccess /var/log/apache2/access.log --log-format=COMBINED

goaccess <logfile> --log-format=COMMON — Wertet eine Logdatei im Common Log Format von Apache aus.

goaccess /var/log/apache2/access.log --log-format=COMMON

cat <logfile> | goaccess - — Liest Logdaten von stdin (Pipe). Nutze - als Dateiargument.

cat /var/log/nginx/access.log | goaccess -

goaccess --version — Zeigt die installierte GoAccess-Version an.

goaccess --version

goaccess --help — Zeigt eine Liste aller verfügbaren Optionen und Flags an.

goaccess --help

Log-Format konfigurieren

goaccess <logfile> --log-format=COMBINED — Combined Log Format (Standard bei Apache/Nginx). Enthält Referrer und User-Agent.

goaccess access.log --log-format=COMBINED

goaccess <logfile> --log-format=COMMON — Common Log Format (Apache). Ohne Referrer- und User-Agent-Felder.

goaccess access.log --log-format=COMMON

goaccess <logfile> --log-format=VCOMBINED — Combined Log Format mit vorangestelltem Virtual Host pro Zeile.

goaccess access.log --log-format=VCOMBINED

goaccess <logfile> --log-format=VCOMMON — Common Log Format mit vorangestelltem Virtual Host pro Zeile.

goaccess access.log --log-format=VCOMMON

goaccess <logfile> --log-format=W3C — W3C Extended Log Format (Standardformat von IIS).

goaccess access.log --log-format=W3C

goaccess <logfile> --log-format=SQUID — Natives Access-Log-Format von Squid.

goaccess access.log --log-format=SQUID

goaccess <logfile> --log-format=CLOUDFRONT — Access-Log-Format von Amazon CloudFront.

goaccess access.log --log-format=CLOUDFRONT

goaccess <logfile> --log-format=CLOUDSTORAGE — Access-Log-Format von Google Cloud Storage.

goaccess access.log --log-format=CLOUDSTORAGE

goaccess <logfile> --log-format=AWSELB — Access-Log-Format von Amazon Elastic Load Balancing.

goaccess access.log --log-format=AWSELB

goaccess <logfile> --log-format="%h %^[%d:%t %^] \"%r\" %s %b" — Nutzt einen eigenen Log-Format-String. %h=Host, %d=Datum, %t=Zeit, %r=Request, %s=Status, %b=Bytes.

goaccess access.log --log-format="%h %^[%d:%t %^] \"%r\" %s %b"

Ausgabe: HTML-Report

goaccess <logfile> -o report.html --log-format=COMBINED — Erzeugt aus einer Logdatei einen eigenständigen, statischen HTML-Report.

goaccess access.log -o report.html --log-format=COMBINED

goaccess <logfile> -o /var/www/html/report.html --log-format=COMBINED — Schreibt den HTML-Report direkt in ein per Webserver erreichbares Verzeichnis.

goaccess access.log -o /var/www/html/stats/report.html --log-format=COMBINED

goaccess <logfile> --log-format=COMBINED --real-time-html -o report.html — Erzeugt einen Echtzeit-HTML-Report, der sich per WebSocket automatisch aktualisiert.

goaccess access.log --log-format=COMBINED --real-time-html -o report.html

goaccess <logfile> --log-format=COMBINED --real-time-html --daemonize -o report.html — Lässt GoAccess als Hintergrund-Daemon laufen und einen Live-HTML-Report ausliefern.

goaccess access.log --log-format=COMBINED --real-time-html --daemonize -o report.html

goaccess <logfile> --log-format=COMBINED --real-time-html --port=7890 -o report.html — Setzt einen eigenen WebSocket-Port für den Echtzeit-HTML-Report (Standard: 7890).

goaccess access.log --log-format=COMBINED --real-time-html --port=7890 -o report.html

goaccess <logfile> --log-format=COMBINED --html-report-title="My Site Stats" -o report.html — Setzt einen eigenen Titel für den HTML-Report.

goaccess access.log --log-format=COMBINED --html-report-title="example.com Traffic" -o report.html

Ausgabe: JSON & CSV

goaccess <logfile> -o report.json --log-format=COMBINED — Erzeugt aus einer Logdatei einen JSON-Report.

goaccess access.log -o report.json --log-format=COMBINED

goaccess <logfile> --log-format=COMBINED --output-format=json — Gibt JSON-Daten auf stdout aus, zum Weiterleiten oder Skripten.

goaccess access.log --log-format=COMBINED --output-format=json | jq '.visitors'

goaccess <logfile> -o report.csv --log-format=COMBINED — Erzeugt aus einer Logdatei einen CSV-Report.

goaccess access.log -o report.csv --log-format=COMBINED

goaccess <logfile> --log-format=COMBINED --output-format=csv — Gibt CSV-Daten auf stdout aus.

goaccess access.log --log-format=COMBINED --output-format=csv

Mehrere Logdateien & Globbing

goaccess <logfile1> <logfile2> --log-format=COMBINED — Wertet mehrere Logdateien gemeinsam aus (kombinierte Analyse).

goaccess access.log access.log.1 --log-format=COMBINED

goaccess /var/log/nginx/access.log.* --log-format=COMBINED — Wertet alle rotierten Logdateien aus, die einem Glob-Muster entsprechen.

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

zcat /var/log/nginx/access.log.*.gz | goaccess - --log-format=COMBINED — Entpackt mehrere gzip-komprimierte Logdateien und leitet sie in GoAccess.

zcat /var/log/nginx/access.log.*.gz | goaccess - --log-format=COMBINED

cat /var/log/nginx/access.log <(zcat /var/log/nginx/access.log.*.gz) | goaccess - --log-format=COMBINED — Kombiniert das aktuelle Log mit allen rotierten/komprimierten Logs für eine Auswertung der gesamten Historie.

cat /var/log/nginx/access.log <(zcat /var/log/nginx/access.log.*.gz) | goaccess - --log-format=COMBINED

goaccess /var/log/nginx/access.log -p /etc/goaccess/goaccess.conf --log-format=COMBINED --log-file /var/log/nginx/access.log.1 — Gibt zusätzlich zur Hauptdatei eine weitere Logdatei per --log-file an.

goaccess access.log --log-file=access.log.1 --log-format=COMBINED

Filtern

goaccess <logfile> --log-format=COMBINED --exclude-ip=<ip> — Schließt eine bestimmte IP-Adresse von der Auswertung aus.

goaccess access.log --log-format=COMBINED --exclude-ip=192.168.1.1

goaccess <logfile> --log-format=COMBINED --exclude-ip=<cidr> — Schließt einen CIDR-Bereich von IPs von der Auswertung aus.

goaccess access.log --log-format=COMBINED --exclude-ip=10.0.0.0/8

grep 'GET /api' access.log | goaccess - --log-format=COMBINED — Filtert Logzeilen vorab mit grep, bevor sie an GoAccess gehen.

grep 'GET /api' access.log | goaccess - --log-format=COMBINED

goaccess <logfile> --log-format=COMBINED --ignore-crawlers — Schließt bekannte Web-Crawler und Bots von der Auswertung aus.

goaccess access.log --log-format=COMBINED --ignore-crawlers

goaccess <logfile> --log-format=COMBINED --crawlers-only — Zeigt nur Requests von bekannten Crawlern und Bots.

goaccess access.log --log-format=COMBINED --crawlers-only

goaccess <logfile> --log-format=COMBINED --ignore-status=<code> — Schließt einen bestimmten HTTP-Statuscode von der Auswertung aus (z. B. 304 ignorieren).

goaccess access.log --log-format=COMBINED --ignore-status=304

goaccess <logfile> --log-format=COMBINED --hide-referrer=<domain> — Blendet eine Referrer-Domain aus dem Referrer-Panel aus.

goaccess access.log --log-format=COMBINED --hide-referrer=example.com

goaccess <logfile> --log-format=COMBINED --4xx-to-unique-count — Zählt 4xx-Antworten als eindeutige Seitenaufrufe.

goaccess access.log --log-format=COMBINED --4xx-to-unique-count

Datum- & Zeit-Filter

goaccess <logfile> --log-format=COMBINED --date-format=%d/%b/%Y — Setzt das Datumsformat fürs Parsen (Combined-Standard ist %d/%b/%Y).

goaccess access.log --log-format=COMBINED --date-format=%d/%b/%Y

awk -v d=$(date +%d/%b/%Y) '$0 ~ d' access.log | goaccess - --log-format=COMBINED — Filtert das Log mit awk auf das heutige Datum, bevor es an GoAccess geht.

awk -v d=$(date +%d/%b/%Y) '$0 ~ d' access.log | goaccess - --log-format=COMBINED

awk '$4 >= "[01/Jan/2025" && $4 <= "[31/Jan/2025"' access.log | goaccess - --log-format=COMBINED — Filtert Logeinträge mit awk zwischen zwei Datumswerten.

awk '$4 >= "[01/Jan/2025" && $4 <= "[31/Jan/2025"' access.log | goaccess - --log-format=COMBINED

goaccess <logfile> --log-format=COMBINED --start-datetime="2025-01-01 00:00:00" — Verarbeitet nur Logeinträge ab diesem Start-Zeitpunkt.

goaccess access.log --log-format=COMBINED --start-datetime="2025-01-01 00:00:00"

goaccess <logfile> --log-format=COMBINED --end-datetime="2025-01-31 23:59:59" — Verarbeitet nur Logeinträge bis zu diesem End-Zeitpunkt.

goaccess access.log --log-format=COMBINED --end-datetime="2025-01-31 23:59:59"

goaccess <logfile> --log-format=COMBINED --keep-last=<days> — Wertet nur die letzten N Tage an Logdaten aus.

goaccess access.log --log-format=COMBINED --keep-last=7

GeoIP & Länder-Lookup

goaccess <logfile> --log-format=COMBINED --geoip-database=<path> — Aktiviert GeoIP-Lookups über eine MaxMind-GeoLite2-City.mmdb-Datenbankdatei.

goaccess access.log --log-format=COMBINED --geoip-database=/usr/share/GeoIP/GeoLite2-City.mmdb

goaccess <logfile> --log-format=COMBINED --geoip-database=<path> --anonymize-ip — Aktiviert GeoIP und anonymisiert IP-Adressen in der Ausgabe (DSGVO-Konformität).

goaccess access.log --log-format=COMBINED --geoip-database=/usr/share/GeoIP/GeoLite2-City.mmdb --anonymize-ip

goaccess <logfile> --log-format=COMBINED --anonymize-ip — Anonymisiert IP-Adressen, indem das letzte Oktett (IPv4) bzw. die letzten 80 Bit (IPv6) maskiert werden.

goaccess access.log --log-format=COMBINED --anonymize-ip

Panels & Anzeige

goaccess <logfile> --log-format=COMBINED --panel-sort-field=VISITORS — Sortiert ein Panel nach der Besucherzahl (VISITORS, HITS, DATA, BW, AVGTS, CUMTS, MAXTS, PCT).

goaccess access.log --log-format=COMBINED --panel-sort-field=VISITORS

goaccess <logfile> --log-format=COMBINED --max-items=<n> — Setzt die maximale Anzahl der pro Panel angezeigten Einträge.

goaccess access.log --log-format=COMBINED --max-items=20

goaccess <logfile> --log-format=COMBINED --no-query-string — Entfernt Query-Strings aus URLs. /page?id=1 und /page?id=2 werden als eine URL gezählt.

goaccess access.log --log-format=COMBINED --no-query-string

goaccess <logfile> --log-format=COMBINED --enable-panel=REMOTE_USER — Aktiviert ein zusätzliches Panel (z. B. REMOTE_USER für Benutzernamen aus HTTP Basic Auth).

goaccess access.log --log-format=COMBINED --enable-panel=REMOTE_USER

goaccess <logfile> --log-format=COMBINED --no-color — Deaktiviert die farbige Terminal-Ausgabe.

goaccess access.log --log-format=COMBINED --no-color

goaccess <logfile> --log-format=COMBINED --no-progress — Deaktiviert die Fortschrittsanzeige während des Parsens.

goaccess access.log --log-format=COMBINED --no-progress

goaccess <logfile> --log-format=COMBINED --444-as-404 — Behandelt den Nginx-spezifischen Statuscode 444 als 404.

goaccess access.log --log-format=COMBINED --444-as-404

Konfigurationsdatei

goaccess -p /etc/goaccess/goaccess.conf <logfile> — Nutzt eine bestimmte Konfigurationsdatei statt der Standarddatei.

goaccess -p /etc/goaccess/goaccess.conf /var/log/nginx/access.log

goaccess --config-file=~/.config/goaccess/goaccess.conf <logfile> — Gibt den Pfad zu einer benutzereigenen Konfigurationsdatei an.

goaccess --config-file=~/.config/goaccess/goaccess.conf access.log

goaccess --config-dialog <logfile> — Zeigt beim Start den Dialog zur Log-Format-Auswahl, auch wenn bereits eine Konfiguration existiert.

goaccess --config-dialog access.log

goaccess --no-global-config <logfile> — Ignoriert die globale Konfigurationsdatei (/etc/goaccess/goaccess.conf).

goaccess --no-global-config --log-format=COMBINED access.log

Typische Workflows

goaccess /var/log/nginx/access.log --log-format=COMBINED -o /var/www/html/stats.html && echo "Report generated" — Erzeugt einen HTML-Report und gibt eine Erfolgsmeldung aus.

goaccess /var/log/nginx/access.log --log-format=COMBINED -o /var/www/html/stats.html

tail -f /var/log/nginx/access.log | goaccess - --log-format=COMBINED --real-time-html -o report.html — Verfolgt ein laufendes Log und speist es in GoAccess für ein Echtzeit-HTML-Dashboard.

tail -f /var/log/nginx/access.log | goaccess - --log-format=COMBINED --real-time-html -o /var/www/html/live.html

goaccess /var/log/nginx/access.log --log-format=COMBINED --no-query-string --ignore-crawlers -o report.html — Erzeugt einen sauberen HTML-Report ohne Bots und ohne Query-String-Varianten.

goaccess /var/log/nginx/access.log --log-format=COMBINED --no-query-string --ignore-crawlers -o report.html

cat /var/log/nginx/access.log <(zcat /var/log/nginx/access.log.*.gz) | goaccess - --log-format=COMBINED -o full-report.html — Fasst aktuelle und alle archivierten Logs zu einem umfassenden HTML-Report zusammen.

cat /var/log/nginx/access.log <(zcat /var/log/nginx/access.log.*.gz) | goaccess - --log-format=COMBINED -o full-report.html

0 0 * * * root goaccess /var/log/nginx/access.log --log-format=COMBINED -o /var/www/html/stats/daily.html — Crontab-Eintrag, der den HTML-Report täglich um Mitternacht neu erzeugt.

0 0 * * * root goaccess /var/log/nginx/access.log --log-format=COMBINED -o /var/www/html/stats/daily.html

grep ' 404 ' access.log | goaccess - --log-format=COMBINED -o 404-report.html — Erzeugt einen Report, der nur 404-Not-Found-Requests enthält.

grep ' 404 ' access.log | goaccess - --log-format=COMBINED -o 404-report.html

grep 'Mozilla' access.log | grep -v 'bot\|crawler\|spider' | goaccess - --log-format=COMBINED — Filtert Bots heraus, indem vor der Analyse auf Browser-User-Agents gegrept wird.

grep 'Mozilla' access.log | grep -v 'bot\|crawler\|spider' | goaccess - --log-format=COMBINED

Tastenkürzel im Terminal-Dashboard

F1 or h — Zeigt den Hilfebildschirm mit allen Tastenkürzeln.

F1 or h

F5 — Zeichnet den Terminal-Bildschirm neu / aktualisiert ihn.

F5

j / k or Arrow keys — Scrollt innerhalb des aktiven Panels nach oben und unten.

j / k

TAB / Shift+TAB — Wechselt zum nächsten / vorherigen Panel.

TAB

ENTER — Klappt das ausgewählte Panel auf Vollbild auf.

ENTER

0-9 — Springt direkt per Nummer zu einem Panel.

1 (Visitors), 2 (Requests), 3 (Static), 4 (404s)

s — Öffnet den Sortier-Dialog für das aktive Panel.

s

/ — Öffnet den Suchdialog, um Einträge im aktiven Panel zu filtern.

/

n — Springt zum nächsten Suchtreffer.

n

g / G — Springt zum ersten / letzten Eintrag im aktiven Panel.

g / G

o or ENTER — Klappt den hervorgehobenen Eintrag auf bzw. öffnet ihn.

o

c — Setzt ein eigenes Farbschema im Terminal-Dashboard.

c

q — Beendet GoAccess (oder schließt die aufgeklappte Panel-Ansicht).

q

Fazit

GoAccess ist die schnellste Antwort auf die Frage „Was passiert gerade auf meinem Server?" – ganz ohne Tracking-Skript oder externes Analytics. Achte vor allem auf das passende --log-format: Stimmt es, läuft der Rest fast von allein. Für Live-Monitoring greifst du zum Terminal-Dashboard oder zum --real-time-html-Report, für geteilte Auswertungen genügt ein statischer HTML-Report, den du regelmäßig per Cronjob neu erzeugst.

Verwandte Kommandos

  • apache – Webserver, dessen Access-Logs GoAccess auswertet
  • caddy – moderner Webserver mit automatischem HTTPS
  • certbot – Let's-Encrypt-Zertifikate für deinen Webserver