用 GoAccess 視覺化 Nginx Access Log

用 Docker 架設 Mastodon 之後,本來想說一樣來把 Nginx 的 access log 丟到 EFK 裡觀察一下狀況,沒想到在我把之前 EFK docker compose 裡的 image 版本升一升之後……就跑不起來了……看起來是遇到各種 ssl / service account token 問題 QQ

結果在處理問題的時候剛好有查到 GoAccess 這個工具,可以把 web log 視覺化,預設也支援了滿多種 log 格式,試完之後就放棄把 EFK 跑起來了 XD

裝好 GoAccess 之後只要 goaccess access.log -o report.html 就可以生出靜態的網頁,十分簡單粗暴!如果想要即時更新的話可以參考 Manual 裡的 --real-time-html ,如果想要保存歷史資料的話可以參考 --persist / --restore 的用法。

最後用 docker 跑起來的指令大概長這樣:

docker run -d \
  --name goaccess \
  --restart always \
  -u 33 \
  -v /var/log/nginx:/log:ro \
  -v $PWD/data:/data \
  -p 127.0.0.1:7890:7890 \
  -e TZ=Asia/Taipei \
  allinurl/goaccess /log/mastodon-access.log \
    -a -o /data/html/index.html \
    --real-time-html \
    --ws-url <HOSTNAME>:80/ws \
    --log-format COMBINED \
    --db-path /data/db \
    --restore \
    --persist

跑起來的樣子:

其中特別處理的地方有:

map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}

server {
    listen 80;
    server_name <HOSTNAME>;
    root <PATH_TO_GOACCESS_HTML>;
    index index.html;
    location /ws {
        proxy_pass http://localhost:7890/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_set_header Host $host;
    }
}

GoAccess 還有支援 --geoip-database 選項,看起來能在 html 裡面顯示 IP 的地理位置,之後有空再來試試。

UPDATE 試了 --geoip-database ,真的就是載下來給檔案路徑就好,也發現 wp-statistics/GeoLite2-City 有下載連結。

Support Me