Introduction
GoAccess is an open-source real-time web log analyzer. It works directly in the terminal as an interactive ncurses dashboard, and can also generate self-contained HTML reports with charts. It supports Apache, Nginx, Caddy, Amazon S3, Elastic Load Balancing, and any server that writes standard access logs.
It is actively maintained and available in the official repositories of most Linux distributions.
Installation
On Debian and Ubuntu:
sudo apt-get install goaccess
For the latest version, the official GoAccess repository provides more recent packages:
echo "deb https://deb.goaccess.io/ $(lsb_release -cs) main" | \
sudo tee /etc/apt/sources.list.d/goaccess.list
wget -O - https://deb.goaccess.io/gnugpg.key | sudo apt-key add -
sudo apt-get update && sudo apt-get install goaccess
Basic terminal usage
goaccess /var/log/nginx/access.log --log-format=COMBINED
This opens an interactive terminal dashboard. Use the arrow keys and TAB to navigate between panels; press q to quit.
Log formats
GoAccess needs to know the format of your log file. Common presets:
| Flag | Use with |
|---|---|
| --log-format=COMBINED | Apache / Nginx combined (most common) |
| --log-format=COMMON | Apache common log |
| --log-format=CADDY | Caddy JSON log |
| --log-format=W3C | W3C / IIS |
| --log-format=VCOMBINED | Nginx with virtual host |
You can also define a fully custom format with --log-format, --date-format, and --time-format flags.
Generate a static HTML report
goaccess /var/log/nginx/access.log --log-format=COMBINED \
-o /var/www/html/report.html
This produces a single self-contained HTML file with interactive charts — no JavaScript CDN, no external dependencies. Open it in any browser or serve it from your web server.
Real-time HTML report
GoAccess can keep the HTML report updated in real time via WebSocket:
goaccess /var/log/nginx/access.log --log-format=COMBINED \
--real-time-html \
-o /var/www/html/report.html \
--ws-url=ws://yourserver.com:7890
Analyzing compressed and rotated logs
You can pipe multiple files, including gzip-compressed rotated logs:
zcat /var/log/nginx/access.log.*.gz | \
goaccess - --log-format=COMBINED
To include both current and rotated logs in one report:
cat /var/log/nginx/access.log \
<(zcat /var/log/nginx/access.log.*.gz) | \
goaccess - --log-format=COMBINED -o report.html
What the dashboard shows
- Total requests, unique visitors, bandwidth consumed
- Top requested URLs and static files
- HTTP status codes (200, 301, 404, 500, etc.)
- Traffic by hour and day
- Top referring sites and search terms
- Operating systems and browsers
- Geolocation (requires MaxMind GeoIP database)
- Top 404 pages
Conclusion
GoAccess combines the real-time view you need during an incident with the detailed HTML reports useful for sharing with a team. It handles any server that writes standard access logs, making it the practical modern replacement for older tools like ApacheTop and Webalizer.