GoAccess請求監控

2023-02-23 18:00:35

簡介

GoAccess是一款開源的實時web紀錄檔分析器和互動式檢視器,用於視覺化檢視HTTP統計資訊,可以系統的終端上執行,也可以通過瀏覽器執行;

本文通過使用GoAccess分析Nginx的紀錄檔檔案,從而統計HTTP的請求情況;

準備

當前伺服器:Ubuntu 22.04.1 LTS

本文是基於Docker容器,所以先在Docker安裝Nginx(Nginx安裝

思路

首先Nginx會產生紀錄檔檔案,GoAccess就是利用這個紀錄檔檔案的資訊來分析、統計HTTP資訊,然後會生成一個視覺化報表,我們會將這個報表替換掉Nginx的index.html歡迎頁面,從而直接展示視覺化報表,所以這裡的Nginx要對映html檔案到宿主機,同時Goaccess的輸出報表的檔案也對映到此目錄下,且名稱為index.html;

啟動Nginx

docker run -d --name nginx -p 8801:80 -v /opt/nginx/html:/usr/share/nginx/html -v /opt/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /opt/nginx/logs:/var/log/nginx -v /opt/nginx/conf/conf.d:/etc/nginx/conf.d nginx

首先我們會啟動Nginx,同時做好卷對映,Nginx相關檔案都放在/opt/nginx/目錄下;

/opt/nginx/html 對應容器中路徑 /usr/share/nginx/html,目前是Nginx歡迎頁,後面會用來存放紀錄檔分析後的視覺化報表頁面

/opt/nginx/conf/nginx.conf對應容器中路徑 /etc/nginx/nginx.conf,是Nginx的組態檔

/opt/nginx/logs對應容器中路徑/var/log/nginx,Nginx的紀錄檔檔案,後面要傳遞給GoAccess做為分析紀錄檔源

到這Nginx就啟動起來了,記住這個index.html頁面與access.log檔案,後面會將index.html替換,而access.log會被用來做分析,下面安裝設定GoAccess。

啟動GoAccess

搜尋

docker search GoAccess

拉取

docker pull allinurl/goaccess

設定

之前說過要對映組態檔,所以我們設定下GoAccess的紀錄檔格式,這個很重要,必須對應Nginx的紀錄檔的格式來匹配,可以看看官方檔案。預設的Nginx紀錄檔格式如下:

知道了Nginx的紀錄檔格式,那麼我們需要將GoAccess的匹配引數與之對應,參考

  • %t 匹配time-format格式的時間欄位
  • %d 匹配date-format格式的日期欄位
  • %h host(使用者端ip地址,包括ipv4和ipv6)
  • %r 來自使用者端的請求行
  • %m 請求的方法
  • %U URL路徑
  • %H 請求協定
  • %s 伺服器響應的狀態碼
  • %b 伺服器返回的內容大小
  • %R HTTP請求頭的referer欄位
  • %u 使用者代理的HTTP請求報頭
  • %D 請求所花費的時間,單位微秒
  • %T 請求所花費的時間,單位秒
  • %^ 忽略這一欄位

所以得出的組態檔為:

log-format %h %^[%d:%t %^] "%r" %s %b "%R" "%u"
date-format %d/%b/%Y
time-format %H:%M:%S

啟動

docker run --restart=always -d -p 7890:7890 -v /opt/goaccess/data:/srv/data -v /opt/nginx/html:/srv/report -v /opt/nginx/logs:/srv/logs --name goaccess allinurl/goaccess --no-global-config --config-file=/srv/data/goaccess.conf --output=/srv/report/index.html --log-file=/srv/logs/access.log --real-time-html

然後啟動GoAccess,也做好卷對映,相關檔案在/opt/goaccess/下,

/opt/goaccess/data對應容器中路徑/srv/data,是GoAccess的設定路徑

/opt/nginx/html對應容器中路徑/srv/report,用來存放視覺化報表,由--output引數決定

/opt/nginx/logs對應容器中路徑/srv/logs,這裡是將Nginx的產生的紀錄檔檔案路徑對映到goaccess容器,對紀錄檔做分析

GoAccess引數--config-file設定為/srv/data/goaccess.conf,這裡的/srv/data對映了宿主機/opt/goaccess/data;引數--output設定為/srv/report/index.html,這裡的/opt/nginx/html又對映到nginx容易,所以nginx可以直接存取這個html頁;

注意組態檔一定不能弄錯,不然就會是這樣,一直重啟,這是因為還沒有將組態檔設定好,組態檔我們對映了opt/goaccess/data,只需要在此目錄下建立好goaccess.conf並設定格式即可;

由於這裡已經啟動了,目錄已經自動建立好了,沒啟動前還是乖乖建立目錄、建立檔案;這裡只需要建立檔案了;

開啟對映的ip地址檢視是否設定成功,如果沒啟動的話大概率是組態檔弄錯了,多試著改幾次組態檔即可;