GoAccess — analiza logów Nginx i Apache w czasie rzeczywistym
Opublikowano: 10 kwietnia 2026 · Kategoria: Hosting
Każde żądanie do Twojego serwera jest zapisywane w logach — ale kto je czyta? Ręczne przeglądanie plików access.log przez grep jest nużące i pomija kontekst. GoAccess to narzędzie które w kilka sekund przekształca surowe logi Nginx lub Apache w czytelny dashboard z wykresami, tabelami i filtrami. Działa w terminalu bez instalacji GUI, generuje statyczne raporty HTML lub interaktywny dashboard aktualizowany przez WebSocket. Najważniejsze: jest bezpłatny, open-source i nie wysyła żadnych danych poza serwer.
Instalacja GoAccess
# Ubuntu / Debian (oficjalne repo GoAccess — nowsza wersja niz w apt) 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 gpg --dearmor -o /usr/share/keyrings/goaccess-keyring.gpg sudo apt update && sudo apt install goaccess -y # Sprawdz wersje goaccess --version # Alternatywnie z domyslnego apt (starsza wersja, ale wystarczajaca) sudo apt install goaccess # CentOS / RHEL / Fedora sudo dnf install goaccess
Pierwsze uruchomienie — analiza logów Nginx
Nginx używa domyślnie formatu "Combined Log Format" — GoAccess ma dla niego gotową predefinkowaną opcję. Możesz analizować logi interaktywnie w terminalu lub przekierować output do pliku.
# Analiza interaktywna w terminalu (TUI) sudo goaccess /var/log/nginx/access.log --log-format=COMBINED # Analiza z wlaczonym geolokalizacja IP (wymaga GeoIP2 database) sudo goaccess /var/log/nginx/access.log \ --log-format=COMBINED \ --geoip-database=/usr/share/GeoIP/GeoLite2-City.mmdb # Wiele plikow logow jednoczesnie (np. po logrotate) sudo goaccess /var/log/nginx/access.log /var/log/nginx/access.log.1 \ --log-format=COMBINED # Skompresowane logi .gz bezposrednio sudo zcat /var/log/nginx/access.log.*.gz | \ goaccess - --log-format=COMBINED # Apache (ten sam format Combined) sudo goaccess /var/log/apache2/access.log --log-format=COMBINED
W trybie interaktywnym GoAccess wyświetla dashboard z panelami: statystyki globalne, żądania HTTP, adresy IP, kody odpowiedzi (200/404/500), przeglądarki, systemy operacyjne, referrery i wiele innych. Nawigacja za pomocą strzałek i klawiszy Page Up/Down.
Generowanie raportów HTML
Raport HTML to samodzielny plik z interaktywnym dashboardem — wykresy, tabele, filtry datowe. Możesz go otworzyć w przeglądarce, wysłać jako załącznik emaila lub udostępnić przez serwer WWW.
# Generuj raport HTML
sudo goaccess /var/log/nginx/access.log \
--log-format=COMBINED \
-o /var/www/html/stats/report.html
# Raport z ostatnich 7 dni (przez filtr dat)
sudo goaccess /var/log/nginx/access.log \
--log-format=COMBINED \
--date-format=%d/%b/%Y \
--since-date=2026-04-03 \
-o /var/www/html/stats/report-7days.html
# Raport z pelnego history (rotowane logi + aktualny)
sudo zcat /var/log/nginx/access.log.*.gz | \
cat - /var/log/nginx/access.log | \
goaccess - --log-format=COMBINED \
-o /var/www/html/stats/full-report.html
# Zabezpiecz dostep do raportu przez Basic Auth w Nginx
# W /etc/nginx/sites-available/stats.conf:
# location /stats/ {
# auth_basic "Analytics";
# auth_basic_user_file /etc/nginx/.htpasswd;
# } Dashboard real-time z WebSocket
GoAccess obsługuje tryb real-time: generuje plik HTML który automatycznie aktualizuje się przez WebSocket. Gdy ktoś odwiedza Twoją stronę, widzisz to na żywo w raporcie — bez przeładowania strony. GoAccess musi działać jako długotrwały proces (daemon).
# Real-time dashboard na porcie WebSocket 7890
sudo goaccess /var/log/nginx/access.log \
--log-format=COMBINED \
--real-time-html \
--ws-url=wss://stats.twoja-domena.pl:443/ws \
--port=7890 \
-o /var/www/html/stats/realtime.html \
--daemonize
# Nginx - proxy WebSocket dla GoAccess
# Dodaj do server block dla stats.twoja-domena.pl:
# location /ws {
# proxy_pass http://localhost:7890;
# proxy_http_version 1.1;
# proxy_set_header Upgrade $http_upgrade;
# proxy_set_header Connection "upgrade";
# }
# Zatrzymaj daemon GoAccess
kill $(cat /tmp/goaccess.pid) Automatyczne raporty przez cron
# /etc/cron.d/goaccess-report # Generuj raport co noc o 23:55 (przed logrotate o polnocy) 55 23 * * * root /usr/bin/goaccess /var/log/nginx/access.log \ --log-format=COMBINED \ -o /var/www/html/stats/daily-$(date +\%Y-\%m-\%d).html \ --no-global-config 2>> /var/log/goaccess-cron.log # Czyszczenie starych raportow (starsze niz 30 dni) 0 0 * * * root find /var/www/html/stats/ -name "daily-*.html" \ -mtime +30 -delete
Przydatne panele GoAccess — co warto śledzić
| Panel | Co pokazuje | Zastosowanie |
|---|---|---|
| Visitors | Unikalnych odwiedzających per dzień/godzinę | Trendy ruchu, peak hours |
| Requests | Najczęściej żądane URL-e | Najpopularniejsze strony, zasoby statyczne |
| Static Requests | Pliki JS/CSS/obrazy/fonty | Optymalizacja cache statycznych zasobów |
| Not Found (404) | Brakujące strony i zasoby | Wykrywanie broken links, błędnych URL-i |
| Hosts | Adresy IP klientów z liczbą żądań | Wykrywanie botów, scraper'ów, atakujących |
| HTTP Codes | Rozkład kodów odpowiedzi (200/301/404/500) | Monitoring błędów serwerowych |
| Operating Systems | Systemy operacyjne klientów | Optymalizacja dla mobile vs desktop |
| Referrers | Skąd przychodzi ruch | Analiza źródeł ruchu |