開源碼 網站伺服器 GoAccess

視覺化Log便利維運分析 開源工具支援各大Web伺服器

網站日誌解讀難度高 GoAccess無痛轉圖表

2021-05-18
網站紀錄大多是以文字型式儲存在檔案中,在解析時非常不便,為了讓管理者能夠更容易地掌握網站紀錄,本文將介紹一套開放原始碼網站紀錄解析軟體GoAccess,GoAccess可以將文字型式的網站紀錄轉換成易讀的圖表格式,以利於快速判別。

 

對於伺服器而言,凡走過必定留下痕跡,相對於網站伺服器,即是利用網站紀錄(Web Log)來儲存用戶端曾存取過的歷史資訊,例如存取時間、所存取的網頁資訊以及網站伺服器所回覆的狀態碼(HTTP Status)等資訊,以提供給網站管理者事後查詢,甚至於稽核之用。一般來說,網站紀錄大多是以文字型式儲存在檔案中,在解析上較為不便,因此本文將介紹一套開源碼網站紀錄解析軟體GoAccess,可用來將文字型式的網站紀錄轉換成易讀的圖表格式(提供html、json等格式),讓管理者能更容易地掌握網站紀錄。

什麼是網站紀錄

一般而言,網站伺服器大多使用共同記錄格式標準(Common Log Format,CLF),又稱為NCSA Common Log Format,來儲存網站紀錄,其標準格式如下:

Host Ident Authuser Date Request Status Bytes

CLF相關欄位說明

CLF相關的欄位說明,如下所示:

Host

此欄位會記錄用戶端的來源IP或主機名稱資訊。

Ident

如果用戶端有運行identd(Identification Protocol)的服務,在連線時,此欄位即會記錄用戶端所報告的身分資訊,如果沒有資訊,則以「-」符號代替。

Authuser

如果網站伺服器有啟動基礎的HTTP認證(Basic Access Authentication),當用戶端存取網頁時,會要求用戶端輸入帳號與密碼,方可登入使用,此欄位就會記錄用戶端所輸入的帳號資訊。同樣地,如果沒有資訊,則以「-」符號代替。

Date

此欄位會記錄用戶端發出要求(Request)時的日期與時間。

Request

此欄位會記錄客戶端所發出的HTTP請求中的Request Line(發出要求訊息的第一列資料)資訊,其中Request Line格式如下所述:

method  Request-URI  HTTP-Version

method:為用戶端用來存取網站伺服器的方法(Method)。

基本上,HTTP通訊協定提供了下列的存取方法,讓使用者用來存取網站伺服器的服務,相關說明如表1所示。

Request-URI:表示所要存取的網頁名稱,例如index.php。

HTTP-Version:表示所使用的HTTP通訊協定版本,目前普遍使用1.1版本。

Status

表示網站伺服器在處理用戶端的要求後,回覆給用戶端的HTTP狀態碼(以3碼數字來表示處理的結果),常見的狀態別,如表2所示。

Bytes

此欄位表示網站在處理用戶端的要求後,所回覆的資料量(單位為位元組)。

如圖1所示,為符合CLF格式之網站紀錄。

圖1  符合CLF格式之網站紀錄。

在簡單說明CLF標準後,接下來以Apache網站伺服器為例,說明如何設定CLF格式的網站紀錄。

設定CLF格式的網站紀錄

Apache是利用mod_log_config模組(此模組為預設安裝,不必再另外建立)來產生相關網站紀錄。基本上,只要設定下列組態即可:

LogFormat

此組態是利用格式符號來設定網站紀錄的格式,以下說明常用的格式符號:

%a:記錄用戶端主機的IP位址。

%A:記錄網站伺服器主機的IP位址。

%b:記錄網站伺服器回覆內容的資料量,單位為位元組。

%f:記錄用戶端主機所請求的網站資源檔案名稱。

%h:記錄發出HTTP請求的遠端主機IP位址。

%H:記錄HTTP請求的通訊協定版本,例如HTTP:1.1。

%m:記錄HTTP請求所使用的方法,如GET、POST、PUT。

%l:在用戶端執行identd的情況下,即記錄用戶端所報告的身分資訊。

%r:記錄HTTP請求的第一列資訊,亦即Request_line資訊。

%t:記錄HTTP請求的時間。

%u:如果網站伺服器已經啟動了基礎的HTTP認證(Basic Access Authentication),就會記錄用戶端存取網頁時輸入的帳號資訊。

%U:HTT請求的URL路徑。

%s:記錄網站伺服器回覆的狀態碼。

以下例子,就是一個預設的CLF網站紀錄格式,並以common代號來表示此格式:

LogFormat "%h %l %u %t \"%r\" %>s  %b" common

CustomLog

設定網站紀錄的儲存位置,以下例子表示將網站紀錄設定為common格式,並儲存在檔名為access_log的檔案中:

CustomLog "logs/access_log" common

在簡單說明網站紀錄後,接下來安裝GoAccess分析軟體來分析網站紀錄。

什麼是GoAccess

GoAccess是一套以C語言實作的網站紀錄分析軟體,其主要的特點,如下所述:

‧可即時解析網站紀錄,並以圖表形式來統計目前網站的存取狀態,例如點擊率(Hit)、來源IP資訊等資訊。

‧可解析目前絕大多數網站伺服器所使用的網站紀錄格式。

‧可追蹤網站伺服器上頁面所回覆(Response)的時間,此功能可利用來找出效能不佳的頁面。

‧安裝相對簡單,由於此程式為C語言所實作,基本上只要編譯成執行檔,即可使用,不太需要相依其他的套件,但因為提供命令介面(Console)的顯示功能,因此必須先安裝ncurses套件。

‧極簡化的組態檔設定,僅須設定所要解析的網站紀錄格式即可使用。

‧可依日期或小時的時間區間來顯示個別來源IP的存取紀錄及使用頻寬等資訊。

‧如果有使用虛擬主機(Virtual Host),可用來測量各個虛擬主機的存取狀態,並可藉此了解虛擬主機所消耗的資源。

安裝及使用GoAccess

在簡單說明GoAccess的功能後,就來安裝該款軟體。首先至「https://tar.goaccess.io/」網站取得最新版的軟體,本文使用的版本為1.4.6。

解壓縮後,即可使用下列指令進行安裝:

./configure make make install

成功編譯後,將產生goaccess(主程式檔)和goaccess.conf(組態檔)。接著,僅須簡單設定goaccess.conf,設定欲解析的記錄格式,即可利用goaccess來解析網站紀錄,在此以解析CLF格式為例。

一開始,在goaccess.conf設定如下組態:

# Common Log Format (CLF) log-format %h %^[%d:%t %^] "%r" %s %b

設定完成後,即可使用goaccess來產生分析報表。

在此僅介紹幾個基本常用的功能,其餘更進階的用法,就請自行測試使用。

以文字圖形式即時解析網站紀錄

在命令列上,以文字圖形式即時解析網站紀錄:

goaccess -c [網站紀錄檔名]

在執行之後,首先會要求使用者選擇想要解析的格式,在此選擇CLF,如圖2所示。在選取欲解析的格式後,便會在命令列上即時顯示網站紀錄的分析。

圖2  選擇想要解析的CLF格式。

產生HTML格式報表檔

若想要產生HTML格式的報表檔案,可執行以下的指令:

goaccess  [網站紀錄檔名]  -a  -o  report.html

執行之後,將會產生檔名為「report.html」(格式為html)的分析報表,其內容如圖3所示。

圖3  產生檔名為report.html的HTML格式分析報表。

即時產生HTML格式報表檔

若想要即時產生HTML格式的報表檔案,可利用以下的指令格式:

goaccess  [網站紀錄檔名]  -o report.html --real-time-html

即時並持續地分析網站紀錄檔中的紀錄,並且產生檔名為「report.html」的分析報表檔。

產出JSON格式報表檔

如果要產生JSON格式的報表檔,請利用以下指令:

goaccess  [網站紀錄檔名]  -a -d -o report.json

執行該指令之後,即可產生檔名為report.json的分析報表。

<本文作者:吳惠麟,多年資安經驗,喜好利用開源碼建構相關解決方案,著有「資訊安全原理與實驗」等書。>

 


追蹤我們Featrue us

本站使用cookie及相關技術分析來改善使用者體驗。瞭解更多

我知道了!