Obiz Solutions

GoAccess là gì?

GoAccess là một trình phân tích access log mã nguồn mở, đọc trực tiếp file log (Apache, Nginx, CloudFront, hay format tùy chỉnh) và xuất ra dashboard: top trang, unique visitor (ước lượng theo IP), referrer, trình duyệt/hệ điều hành, mã status, băng thông… Khác hẳn Google Analytics hay Plausible — GoAccess không chạy JS ở trình duyệt người dùng, hoàn toàn xử lý phía log có sẵn, nên không ảnh hưởng gì tới tốc độ tải trang hay cần cookie consent.

Vì sao hợp với site tĩnh kiểu này

Site build bằng Astro và deploy qua S3 + CloudFront vốn đã tối ưu “gần như 0 JS” — gắn thêm script tracking như GA sẽ đi ngược triết lý đó. GoAccess đọc thẳng CloudFront access logs (log của mọi request tới edge, xem bài setup AWS để biết cách bật), không cần thêm bất kỳ dòng code nào vào site.

Cài đặt

# macOS
brew install goaccess

# Ubuntu/Debian
sudo apt install goaccess

Windows: GoAccess không có bản build native cho Windows, cần chạy qua WSL hoặc Docker:

# Cách 1 — WSL (khuyến nghị, đủ tính năng, hiệu năng như Linux thật)
wsl --install                 # nếu máy chưa cài WSL
wsl -d Ubuntu                 # mở shell Ubuntu trong WSL
sudo apt update && sudo apt install goaccess   # chạy trong WSL

# Cách 2 — Docker, không cần cài WSL/goaccess trực tiếp
docker run --rm -v ${PWD}:/srv/data allinurl/goaccess `
  /srv/data/cf-logs/*.log -o /srv/data/report.html `
  --log-format=... --date-format=... --time-format=...

Với cách WSL, các lệnh ở phần dưới bài này chạy y hệt như trên Linux/macOS (chạy trong shell WSL). Với Docker, thay đường dẫn file log/report bằng đường dẫn tương ứng trong /srv/data (được mount từ thư mục hiện tại).

Dùng cơ bản

Với log dạng chuẩn phổ biến (Apache Combined, Nginx…), GoAccess có sẵn preset:

goaccess access.log --log-format=COMBINED -o report.html

Mở report.html là có ngay dashboard tương tác (filter theo ngày, click để xem chi tiết từng mục).

Đọc log CloudFront

CloudFront log không khớp preset dựng sẵn nếu bạn chọn đủ field (33 field mặc định — xem bài Setup và deploy), nên cần khai --log-format tùy chỉnh, mỗi %^ là một field bỏ qua:

# tải log về từ S3 trước
aws s3 sync s3://YOUR_BUCKET-logs/cf-logs/ ./cf-logs/

goaccess cf-logs/*.log \
  --log-format='%d\t%t\t%^\t%b\t%h\t%m\t%^\t%U\t%s\t%R\t%u\t%q\t%^\t%^\t%^\t%^\t%^\t%^\t%T\t%^\t%^\t%^\t%^\t%^\t%^\t%^\t%^\t%^\t%^\t%^\t%^\t%^\t%^' \
  --date-format='%Y-%m-%d' --time-format='%H:%M:%S' \
  -o report.html

Terminal mode vs báo cáo HTML

Ngoài xuất file HTML (-o report.html), GoAccess còn chạy trực tiếp trong terminal dạng dashboard real-time — hữu ích khi muốn xem nhanh mà không cần mở trình duyệt:

goaccess cf-logs/*.log --log-format=... # (không có -o)

Muốn cập nhật dashboard định kỳ (vd. hằng ngày) thì đặt cron chạy lại lệnh sync + goaccess phía trên, ghi đè report.html.

Khi nào nên dùng GoAccess

  • Site tĩnh, không muốn thêm JS tracking (giữ đúng triết lý “0 JS” của Astro/site tĩnh)
  • Đã có sẵn access log (CloudFront, Nginx, Apache…) — GoAccess tận dụng lại, không cần hạ tầng mới
  • Chấp nhận dashboard không real-time tuyệt đối (phụ thuộc tần suất CloudFront ghi log, thường vài chục phút một lần)

Không hợp nếu cần theo dõi hành vi chi tiết (funnel, event tracking, heatmap) — lúc đó công cụ client-side như Plausible/GA vẫn cần thiết.

Tài liệu tham khảo

Tài liệu chính thức: goaccess.io