Linux作業系統中的top指令可以即時監控系統內資源的使用情況,而在開源碼社群中也有一個類似的ApacheTop工具,但它是用來即時監控網站伺服器的運作情形。本文將以監控Apache伺服器為例,實作一個可即時監控Apache運作情況的解決方案。
相信Linux系統使用者對於top指令並不陌生,此指令會即時地監控目前系統上資源使用情況(例如CPU及記憶體的使用率)。而在開源碼社群中也有類似的工具ApacheTop,就如同top指令一樣,但此程式主要是用來即時監控網站伺服器(例如Apache)的運作情形,其主要的功能如下所述:
‧利用解析網站記錄檔(Web Log)的方式,目前支援共同記錄格式標準(Common Log Format,CLE)及combined格式的網站記錄,利用即時解析網站記錄的方式來顯示目前網站的運作狀態(例如連線數、伺服器處理使用者要求的數量等資訊),也因此只要所使用的網站伺服器能產生相關格式的網站記錄檔,即可進行監控,而不僅限於監控Apache。
‧可即時顯示每秒的要求數(Reqs/sec)和流量資訊(Bytes/sec)來掌握網站服務的狀態。
‧可依網站回覆的狀態碼(Status)進行統計,使用者可藉此來判別網站伺服器的運作是否正常或有不尋常的連線狀況。
‧極簡化的組態設定,在一般的情況下,僅須設定要解析的網站記錄格式即可。
在本文中,將以監控Apache伺服器為例,實作一個可即時監控Apache運作情況的解決方案,所使用的作業系統為CentOS。
安裝ApacheTop
先連結至ApacheTop官方網站(https://github.com/tessus/apachetop/)下載最新版本(本文所使用的版本為0.23.2)。解壓縮後,以下列指令進行編譯安裝:
configure && make && make install
在編譯完成後,就會產生名稱為「apachetop」的主要執行檔。其執行時常用的組態如下所述:
-f:指定網站伺服器的網站記錄檔案位置,ApacheTop即是透過解析此檔案的相關資訊,來取得網站伺服器的運作情況。
-r:設定是否要解析網域名稱資訊,由於解析名稱較為費時,因此預設為no。
-q:設定是否顯示使用者要求中URL上的參數資訊(QueryString),預設為no。
-T:設定統計數據的時間區間(單位為秒),預設為30秒,表示統計30秒內的相關運作資訊(例如30秒內的連線速率)。
-d:設定重新更新(Refresh)資訊的時間間隔(單位為秒),預設為5秒,表示每5秒會重新更新一次資訊。
確定Apache記錄設定
由於ApacheTop僅能分析CLF和combined格式的網站記錄,因此必須先確認Apache伺服器的記錄設定,在此將以CLF格式為例來做說明。
Apache是利用mod_log_config模組(此模組為預設模組,因此在安裝Apache後,就會提供此項功能,而不必再另行安裝)來提供網站記錄的功能。相關設定如圖1所示(其中#為註解符號)
圖1 mod_log_config模組設定。
其中的LogFormat組態為設定網站記錄的記錄樣式,設定格式如下:
LogFormat <格式符號> 樣式名稱
「格式符號」為表示網站記錄要儲存的資訊,常用的格式符號如表1所示。
Apache預設使用CLF格式來記錄網站Log(其樣式名稱為common),因此啟用其預設common樣式的設定即可,在設定記錄樣式後,接著設定CustomLog組態設定,以設定網站記錄檔案的儲存位置(在此檔名為access_log)。
在完成設定後,即可產生符合CLF格式的網站記錄,如圖2所示。相闗欄位簡述如下:
圖2 產生符合CLF格式的網站記錄。
1. 來源端:記錄來源端的IP或主機名稱。
2. Ident:來源端有運行identd的服務,即會記錄來源端提供的身分資訊。若沒有資訊,則以「-」代替。
3. HTTP認證資訊:如果網站伺服器有啟動基礎的HTTP認證,會經由帳號∕密碼的驗證,方可使用。此欄位即會記錄相關的帳號資訊。如果沒有資訊,則以「-」符號代替。
4. Date:此欄位會記錄來源端發出HTTP要求的日期與時間。
5. HTTP要求資訊:此欄位儲存Request_line的資訊,表示來源端所存取的網頁資訊及所使用的HTTP通訊協定版本和HTTP方法。
6. HTTP狀態碼:此欄位儲存網站伺服器在處理使用者的要求後所回覆的HTTP狀態碼資訊。
7. 回覆的資料量:此欄位表示網站伺服器在處理來源端的要求後所回覆的資料量(單位為位元組)。
在確認網站輸出CLF格式的網站記錄後,接下來即可使用ApacheTop。
執行ApacheTop
在此以統計30秒內的連線狀況並每5秒重新更新為例,執行如下的指令:
apachetop -T 30 -f <網站LOG檔案的位置> -d 5
在執行後,就會產生如圖3所示的輸出結果。相關輸出結果資訊,說明如下:
圖3 輸出結果。
A:此欄位顯示從啟動ApacheTop到目前為止,網站伺服器所處理的所有HTTP請求數量。
B:網站伺服器處理來自使用者請求的速率,其單位為(Reqs/sec),表示每秒處理的請求數,若此數字有明顯地增高,就表示網站伺服器有大量的連線要求,甚至不排除被攻擊的可能性。
C:網站伺服器回覆來源端要求的資料量,其單位為(Bytes/sec),即每秒傳輸的資料量。
D:網站伺服器回覆的HTTP狀態碼統計,可利用此資訊來確認網站服務的狀態,例如大量發生5XX的錯誤,網站伺服器就可能存在潛在問題。
E:顯示網站伺服器被存取的網頁相關資訊。
至此,網站管理者即可利用apachetop程式來即時監控Apache網站伺服器的服務情況。
<本文作者:吳惠麟,多年資安經驗,喜好利用開源碼建構相關解決方案,著有「資訊安全原理與實驗」等書。>