使用goaccess即時分析Caddy日誌
前幾天我用 nginxpulse 做日誌分析的時候,發現了一些問題,比如手機或者平板訪問 UI 會錯亂,"訪問明細"頁幾乎沒法看,於是想着部署個 goaccess 試試看。
要在 Caddy 下實現多域名即時訪問,網上還沒什麼比較好的示例,下面記錄我的踩坑過程。
1. 安裝 GoAccess
強烈建議源碼安裝,因爲各 Linux 發行版倉庫帶的版本低於 GoAccess 的當前版本,會導致部分功能受限。
比如我遇到的情況是:Debian 上的版本過低,導致 Geo Location 面板上就沒有 World Map、Azimuthal/Globe 選項,效果和官方 demo 比,可以說是天差地別,前者會顯示一幅標準 2D 世界地圖,
後者會顯示一個 3D 世界地圖。
此外,源碼安裝,也最好直接從官網下載源碼包:
1$ wget https://tar.goaccess.io/goaccess-1.9.4.tar.gz
2$ tar -xzvf goaccess-1.9.4.tar.gz
3$ cd goaccess-1.9.4/
4$ ./configure --enable-utf8 --enable-geoip=mmdb --with-openssl
5$ make
6# make install
從 github 下載包,會遇到沒有 configure 程序的問題,別問我怎麼知道,踩過坑。
如果編譯報錯,大概率是缺了 Ncursesw 相關依賴,按提示搜索,安裝發行版對應的包就好。官方 https://goaccess.io/download 頁有介紹。
2. 配置解析 Caddy 日誌文件
所謂日誌分析,就是解析日誌,然後重新聚合展示。
直接看我的配置(過濾了註釋行、空行和 static-file|no 開頭的行,方便查看關鍵信息):
1root@tokyo:~# egrep -v "^#|^$|^static|^no" /etc/goaccess/goaccess.conf
2date-format %s
3log-format {ts:"%x.%^",request:{remote_ip:"%h",proto:"%H",method:"%m",host:"%v",uri:"%U",headers:{"User-Agent":["%u","%^"]},tls:{cipher_suite:"%k",proto:"%K"}},duration:"%T",size:"%b",status:"%s",resp_headers:{"Content-Type":["%M;%^"]}}
4log-format CADDY
5config-dialog false
6hl-header true
7json-pretty-print false
8tz Asia/Shanghai
9with-mouse false
10addr 127.0.0.1
11daemonize true
12real-time-html true
13ws-url wss://goaccess.xxx.com:443/ws
14log-file /var/log/caddy/xxx.com.cc.log
15agent-list false
16with-output-resolver false
17http-method yes
18http-protocol yes
19output /data/goaccess/xxx.com.html
20444-as-404 false
214xx-to-unique-count false
22all-static-files false
23double-decode false
24ignore-crawlers false
25crawlers-only false
26unknowns-as-crawlers false
27real-os true
28geoip-database /usr/share/GeoIP/GeoLite2-City.mmdb
29geoip-database /usr/share/GeoIP/GeoLite2-ASN.mmdb
關鍵點配置:
- date-format %s Caddy 需要
- log-format 開頭的兩個配置,一個做
CADDY JSON Structured解析的;log-format CADDY告訴 GoAccess 當前的日誌類型爲 Caddy - tz Asia/Shanghai 時區設置,看個人喜好了
- addr 127.0.0.1 關鍵,安全相關配置,建議本地監聽,通過代理轉發出去
- real-time-html true 開啓網頁即時刷新,GoAccess 會通過 websocket 刷新數據
- ws-url wss://goaccess.xxx.com:443/ws 真實 websocket 響應接口,很關鍵。這個地方配置錯誤的話,可通過瀏覽器調試窗口排查
- log-file /var/log/caddy/xxx.com.cc.log 需要分析的目標日誌文件
- output /data/goaccess/xxx.com.html 生成的 html 文件,瀏覽器最終查看訪問的是這個
- geoip-database /usr/share/GeoIP/GeoLite2-City.mmdb IP 地址精確到城市,需要額外 IP 地址庫
- geoip-database /usr/share/GeoIP/GeoLite2-ASN.mmdb 好像是網絡運營商信息,比如
AT&T Services, Inc.、Chinanet等
監聽端口也可按需修改,默認是:port 7890
GeoLite2 相關數據庫文件去這裏下載:https://github.com/P3TERX/GeoLite.mmdb
systemd 文件配置:
1root@tokyo:~# systemctl cat goaccess.service
2# /etc/systemd/system/goaccess.service
3[Unit]
4Description=GoAccess Real-Time Log Analyzer
5After=network.target caddy.service
6
7[Service]
8User=root
9ExecStart=/usr/local/bin/goaccess -p /etc/goaccess/goaccess.conf
10Type=forking
11Restart=on-failure
12RestartSec=5
13StartLimitBurst=5
14StartLimitInterval=30s
15
16[Install]
17WantedBy=multi-user.target
注意其中的 Type=forking,不然沒法正常啓動。或者你不配置 daemonize true,那這一行也可以去掉,主進程會在啓動時 fork 出一個子進程,然後父進程退出,而子進程繼續在後臺運行時才需要 Type=forking。
3. 配置 Caddy 訪問輸出頁
請看配置
1logs.xxx.com {
2 encode zstd br gzip
3 root * /data/goaccess
4 file_server
5 basic_auth {
6 your_username your_hash_password # caddy hash-password
7 }
8 reverse_proxy /ws localhost:7890
9 reverse_proxy /ws_another localhost:7891 # 多個域名日誌分析,如果想分實例解析
10}
這樣瀏覽器就能通過 https://logs.xxx.com/xxx.com.html 訪問即時刷新的日誌。
如果遇到即時刷新錯誤,F12 打開瀏覽器調窗口,搜索 ws,看是否報錯,response 中數據是否正常刷新,按報錯提示處理。
截圖示例操作如下:
4. 多域名日誌配置
如果你有多個域名,分別寫日誌到不同路徑,比如 foo.xxx.com.log、bar.xxx.com.log,還想多頁面獨立查看。
可以考慮分 2 個 goaccess 實例處理的。監聽端口分開下,Caddy 代理像上面所示的那樣,分別代理到不同端口。
還可以讓 AI 幫你寫個 index.html, 實現路由到不同頁面的邏輯,再把 index.html 放到 root * /data/goaccess 指示的 root 目錄中,我就是這麼做的,很方便的。
5. 最終效果圖
截圖示例:
可以看出 ASN 和 Geo Location 都正確顯示了,老實說,首次配置的話,還是要花點時間摸索的。
用手機或者電腦訪問下被解析日誌站點,數據就能即時刷新。
不想部署,只想看看效果的,也可以直接去 goaccess 官網看其提供的 live demo 頁。
不管是 nginxpulse 還是 goaccess 目前都不能直接查看原始日誌,畢竟輕量工具,不能和企業級的大型日誌系統 OpenObserve、ELK 等相比,適用場景不一樣,成本也千差萬別。

版權申明:
- 未標註來源的內容皆為原創,未經授權請勿轉載(因轉載後排版往往錯亂、內容不可控、無法持續更新等);
- 非營利為目的,演繹本博客任何內容,請以'原文出處'或者'參考鏈接'等方式給出本站相關網頁地址(方便讀者)。
相關文章:
- 個人網站監控
- Hysteria科學上網簡要
- 簡單獲取celery任務即時結果
- Caddy日誌配置輪轉和格式化
- Caddy2 Vue history 模式配置
- Hugo全站AVIF記
- Linux下嘗試使用Godot開發小遊戲
- Arch linux dae 透明代理
- Airflow接管galler-dl下載任務
- 如何使用gallery-dl批量下載圖像