# 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.

Source: https://www.jpkc.com/db/cheatsheets/web-servers/goaccess/

<!-- PROSE:intro -->
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.
<!-- PROSE:intro:end -->

## Grundlegende Verwendung

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

```bash
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).

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

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

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

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

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

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

```bash
goaccess --version
```

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

```bash
goaccess --help
```

## Log-Format konfigurieren

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

```bash
goaccess access.log --log-format=COMBINED
```

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

```bash
goaccess access.log --log-format=COMMON
```

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

```bash
goaccess access.log --log-format=VCOMBINED
```

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

```bash
goaccess access.log --log-format=VCOMMON
```

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

```bash
goaccess access.log --log-format=W3C
```

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

```bash
goaccess access.log --log-format=SQUID
```

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

```bash
goaccess access.log --log-format=CLOUDFRONT
```

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

```bash
goaccess access.log --log-format=CLOUDSTORAGE
```

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

```bash
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.

```bash
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.

```bash
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.

```bash
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.

```bash
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.

```bash
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).

```bash
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.

```bash
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.

```bash
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.

```bash
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.

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

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

```bash
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).

```bash
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.

```bash
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.

```bash
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.

```bash
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.

```bash
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.

```bash
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.

```bash
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.

```bash
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.

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

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

```bash
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).

```bash
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.

```bash
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.

```bash
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).

```bash
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.

```bash
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.

```bash
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.

```bash
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.

```bash
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.

```bash
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.

```bash
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).

```bash
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.

```bash
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).

```bash
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.

```bash
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.

```bash
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).

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

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

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

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

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

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

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

## Konfigurationsdatei

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

```bash
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.

```bash
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.

```bash
goaccess --config-dialog access.log
```

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

```bash
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.

```bash
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.

```bash
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.

```bash
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.

```bash
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.

```bash
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.

```bash
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.

```bash
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.

```bash
F1 or h
```

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

```bash
F5
```

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

```bash
j / k
```

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

```bash
TAB
```

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

```bash
ENTER
```

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

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

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

```bash
s
```

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

```bash
/
```

`n` — Springt zum nächsten Suchtreffer.

```bash
n
```

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

```bash
g / G
```

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

```bash
o
```

`c` — Setzt ein eigenes Farbschema im Terminal-Dashboard.

```bash
c
```

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

```bash
q
```

<!-- PROSE:outro -->
## 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](https://goaccess.io/) – Download, Features und Dokumentation (englisch)
- [GoAccess – Manpage](https://goaccess.io/man) – alle Optionen und Log-Format-Direktiven im Überblick (englisch)
<!-- PROSE:outro:end -->

## Verwandte Kommandos

- [apache](https://www.jpkc.com/db/cheatsheets/web-servers/apache/) – Webserver, dessen Access-Logs GoAccess auswertet
- [caddy](https://www.jpkc.com/db/cheatsheets/web-servers/caddy/) – moderner Webserver mit automatischem HTTPS
- [certbot](https://www.jpkc.com/db/cheatsheets/web-servers/certbot/) – Let's-Encrypt-Zertifikate für deinen Webserver

