This is organized for 2026-04-29.
At this point, the latest stable version listed in the official README is 1.10.2.
1. Install build dependencies first
1
2
3
|
sudo apt-get update
sudo apt-get install -y build-essential wget tar \
libncurses-dev libmaxminddb-dev libssl-dev zlib1g-dev
|
2. Download the latest source package
1
2
3
4
|
cd /usr/local/src
sudo wget https://tar.goaccess.io/goaccess-1.10.2.tar.gz
sudo tar -xzvf goaccess-1.10.2.tar.gz
cd goaccess-1.10.2
|
1
|
sudo ./configure --enable-utf8 --enable-geoip=mmdb --with-zlib
|
If you also want TLS support for real-time HTML reports:
1
|
sudo ./configure --enable-utf8 --enable-geoip=mmdb --with-zlib --with-openssl
|
4. Build and install
1
2
|
sudo make
sudo make install
|
5. Verify the version
1
2
|
goaccess --version
which goaccess
|
6. View reports directly in the terminal
For common Nginx or Apache combined logs:
1
|
goaccess /var/log/nginx/access.log --log-format=COMBINED
|
If the log path is Apache:
1
|
goaccess /var/log/apache2/access.log --log-format=COMBINED
|
7. Generate a static HTML report
1
2
3
4
|
goaccess /var/log/nginx/access.log \
--log-format=COMBINED \
-a \
-o /usr/share/nginx/html/goaccess-report.html
|
You can also write it to the current directory:
1
2
3
4
|
goaccess /var/log/nginx/access.log \
--log-format=COMBINED \
-a \
-o report.html
|
8. Generate a real-time HTML report
1
2
3
4
5
|
goaccess /var/log/nginx/access.log \
--log-format=COMBINED \
-a \
-o /usr/share/nginx/html/goaccess-report.html \
--real-time-html
|
To change the port:
1
2
3
4
5
6
|
goaccess /var/log/nginx/access.log \
--log-format=COMBINED \
-a \
-o /usr/share/nginx/html/goaccess-report.html \
--real-time-html \
--port=7891
|
To bind only to localhost:
1
2
3
4
5
6
|
goaccess /var/log/nginx/access.log \
--log-format=COMBINED \
-a \
-o /usr/share/nginx/html/goaccess-report.html \
--real-time-html \
--addr=127.0.0.1
|
9. Follow logs continuously
1
|
tail -f /var/log/nginx/access.log | goaccess --log-format=COMBINED -
|
From the beginning of the file and keep it live:
1
2
3
4
|
tail -f -n +0 /var/log/nginx/access.log | goaccess \
--log-format=COMBINED \
-o report.html \
--real-time-html -
|
10. Look at only certain requests
For example, only requests containing firefox:
1
2
|
tail -f /var/log/nginx/access.log | grep -i --line-buffered 'firefox' | goaccess \
--log-format=COMBINED -
|
For example, only 5xx and 3xx:
1
2
3
|
tail -f -n +0 /var/log/nginx/access.log | awk '$9~/3[0-9]{2}|5[0-9]{2}/' | goaccess \
--log-format=COMBINED \
-o out.html -
|
11. Analyze multiple logs together
1
|
goaccess /var/log/nginx/access.log /var/log/nginx/access.log.1 --log-format=COMBINED
|
Read compressed and uncompressed logs together:
1
|
zcat --force /var/log/nginx/access.log* | goaccess --log-format=COMBINED -
|
12. Enable multithreading
1
2
3
4
|
goaccess /var/log/nginx/access.log \
--log-format=COMBINED \
-o report.html \
-j 4
|
Increase chunk size:
1
2
3
4
5
|
goaccess /var/log/nginx/access.log \
--log-format=COMBINED \
-o report.html \
-j 4 \
--chunk-size=8192
|
13. Incremental processing
Persist an older log first:
1
|
goaccess /var/log/nginx/access.log.1 --log-format=COMBINED --persist
|
Then append the current log:
1
|
goaccess /var/log/nginx/access.log --log-format=COMBINED --restore --persist
|
Read only persisted data:
14. The set of commands I would run first
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
sudo apt-get update
sudo apt-get install -y build-essential wget tar \
libncurses-dev libmaxminddb-dev libssl-dev zlib1g-dev
cd /usr/local/src
sudo wget https://tar.goaccess.io/goaccess-1.10.2.tar.gz
sudo tar -xzvf goaccess-1.10.2.tar.gz
cd goaccess-1.10.2
sudo ./configure --enable-utf8 --enable-geoip=mmdb --with-zlib --with-openssl
sudo make
sudo make install
goaccess --version
goaccess /var/log/nginx/access.log \
--log-format=COMBINED \
-a \
-o /usr/share/nginx/html/goaccess-report.html \
--real-time-html
|
That is basically it.
If your goal is clear, getting the latest source build installed and making --log-format=COMBINED plus --real-time-html work first is usually enough. After that, most changes are just about log paths, output files, and ports.