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.loggoaccess <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=COMBINEDgoaccess <logfile> --log-format=COMMON — Wertet eine Logdatei im Common Log Format von Apache aus.
goaccess /var/log/apache2/access.log --log-format=COMMONcat <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 --versiongoaccess --help — Zeigt eine Liste aller verfügbaren Optionen und Flags an.
goaccess --helpLog-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=COMBINEDgoaccess <logfile> --log-format=COMMON — Common Log Format (Apache). Ohne Referrer- und User-Agent-Felder.
goaccess access.log --log-format=COMMONgoaccess <logfile> --log-format=VCOMBINED — Combined Log Format mit vorangestelltem Virtual Host pro Zeile.
goaccess access.log --log-format=VCOMBINEDgoaccess <logfile> --log-format=VCOMMON — Common Log Format mit vorangestelltem Virtual Host pro Zeile.
goaccess access.log --log-format=VCOMMONgoaccess <logfile> --log-format=W3C — W3C Extended Log Format (Standardformat von IIS).
goaccess access.log --log-format=W3Cgoaccess <logfile> --log-format=SQUID — Natives Access-Log-Format von Squid.
goaccess access.log --log-format=SQUIDgoaccess <logfile> --log-format=CLOUDFRONT — Access-Log-Format von Amazon CloudFront.
goaccess access.log --log-format=CLOUDFRONTgoaccess <logfile> --log-format=CLOUDSTORAGE — Access-Log-Format von Google Cloud Storage.
goaccess access.log --log-format=CLOUDSTORAGEgoaccess <logfile> --log-format=AWSELB — Access-Log-Format von Amazon Elastic Load Balancing.
goaccess access.log --log-format=AWSELBgoaccess <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=COMBINEDgoaccess <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=COMBINEDgoaccess <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.htmlgoaccess <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.htmlgoaccess <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.htmlgoaccess <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.htmlAusgabe: 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=COMBINEDgoaccess <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=COMBINEDgoaccess <logfile> --log-format=COMBINED --output-format=csv — Gibt CSV-Daten auf stdout aus.
goaccess access.log --log-format=COMBINED --output-format=csvMehrere Logdateien & Globbing
goaccess <logfile1> <logfile2> --log-format=COMBINED — Wertet mehrere Logdateien gemeinsam aus (kombinierte Analyse).
goaccess access.log access.log.1 --log-format=COMBINEDgoaccess /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=COMBINEDzcat /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=COMBINEDcat /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=COMBINEDgoaccess /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=COMBINEDFiltern
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.1goaccess <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/8grep '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=COMBINEDgoaccess <logfile> --log-format=COMBINED --ignore-crawlers — Schließt bekannte Web-Crawler und Bots von der Auswertung aus.
goaccess access.log --log-format=COMBINED --ignore-crawlersgoaccess <logfile> --log-format=COMBINED --crawlers-only — Zeigt nur Requests von bekannten Crawlern und Bots.
goaccess access.log --log-format=COMBINED --crawlers-onlygoaccess <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=304goaccess <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.comgoaccess <logfile> --log-format=COMBINED --4xx-to-unique-count — Zählt 4xx-Antworten als eindeutige Seitenaufrufe.
goaccess access.log --log-format=COMBINED --4xx-to-unique-countDatum- & 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/%Yawk -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=COMBINEDawk '$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=COMBINEDgoaccess <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=7GeoIP & 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.mmdbgoaccess <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-ipgoaccess <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-ipPanels & 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=VISITORSgoaccess <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=20goaccess <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-stringgoaccess <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_USERgoaccess <logfile> --log-format=COMBINED --no-color — Deaktiviert die farbige Terminal-Ausgabe.
goaccess access.log --log-format=COMBINED --no-colorgoaccess <logfile> --log-format=COMBINED --no-progress — Deaktiviert die Fortschrittsanzeige während des Parsens.
goaccess access.log --log-format=COMBINED --no-progressgoaccess <logfile> --log-format=COMBINED --444-as-404 — Behandelt den Nginx-spezifischen Statuscode 444 als 404.
goaccess access.log --log-format=COMBINED --444-as-404Konfigurationsdatei
goaccess -p /etc/goaccess/goaccess.conf <logfile> — Nutzt eine bestimmte Konfigurationsdatei statt der Standarddatei.
goaccess -p /etc/goaccess/goaccess.conf /var/log/nginx/access.loggoaccess --config-file=~/.config/goaccess/goaccess.conf <logfile> — Gibt den Pfad zu einer benutzereigenen Konfigurationsdatei an.
goaccess --config-file=~/.config/goaccess/goaccess.conf access.loggoaccess --config-dialog <logfile> — Zeigt beim Start den Dialog zur Log-Format-Auswahl, auch wenn bereits eine Konfiguration existiert.
goaccess --config-dialog access.loggoaccess --no-global-config <logfile> — Ignoriert die globale Konfigurationsdatei (/etc/goaccess/goaccess.conf).
goaccess --no-global-config --log-format=COMBINED access.logTypische 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.htmltail -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.htmlgoaccess /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.htmlcat /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.html0 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.htmlgrep ' 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.htmlgrep '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=COMBINEDTastenkürzel im Terminal-Dashboard
F1 or h — Zeigt den Hilfebildschirm mit allen Tastenkürzeln.
F1 or hF5 — Zeichnet den Terminal-Bildschirm neu / aktualisiert ihn.
F5j / k or Arrow keys — Scrollt innerhalb des aktiven Panels nach oben und unten.
j / kTAB / Shift+TAB — Wechselt zum nächsten / vorherigen Panel.
TABENTER — Klappt das ausgewählte Panel auf Vollbild auf.
ENTER0-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.
ng / G — Springt zum ersten / letzten Eintrag im aktiven Panel.
g / Go or ENTER — Klappt den hervorgehobenen Eintrag auf bzw. öffnet ihn.
oc — Setzt ein eigenes Farbschema im Terminal-Dashboard.
cq — 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.
Weiterführende Links
- GoAccess – offizielle Website – Download, Features und Dokumentation (englisch)
- GoAccess – Manpage – alle Optionen und Log-Format-Direktiven im Überblick (englisch)