相信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所示(其中#為註解符號)
其中的LogFormat組態為設定網站記錄的記錄樣式,設定格式如下:
LogFormat <格式符號> 樣式名稱
「格式符號」為表示網站記錄要儲存的資訊,常用的格式符號如表1所示。
Apache預設使用CLF格式來記錄網站Log(其樣式名稱為common),因此啟用其預設common樣式的設定即可,在設定記錄樣式後,接著設定CustomLog組態設定,以設定網站記錄檔案的儲存位置(在此檔名為access_log)。
在完成設定後,即可產生符合CLF格式的網站記錄,如圖2所示。相闗欄位簡述如下:
| 格式符號 | 說明 |
|---|---|
| %A | 記錄網站伺服器主機所在的IP位址 |
| %p | 記錄網站伺服器主機所使用的通訊埠資訊 |
| %b | 記錄網站伺服器在處理來源端要求後,回覆至來源端的內容資料量(單位為位元組) |
| %f | 記錄來源端所要求的檔案名稱 |
| %h | 記錄發出HTTP請求的遠端主機IP位址,即來源端主機IP資訊 |
| %{Referer}i | 記錄被存取網頁的前一個網頁資訊,表示是從那個網頁連線過來 |
| %{User-Agent}i | 記錄來源端主機所使用的瀏覽器資訊,例如瀏覽器的種類版本等資訊 |
| %H | 記錄來源端主機所使用HTTP要求(Request)的通訊協定版本,例如1.1 |
| %m | 記錄來源端主機HTTP要求(Request)所使用的方法(Method),常用的方法如下所述: OPTIONS:通常都是用來取得網站伺服器所支援的HTTP方法及檢查網站伺服器之用。 GET:來源端利用將資料以參數形式附在URL上傳遞給網站伺服器。 POST:來源端將資料附在表單(Form)中再傳遞給網站伺服器。 HEAD:來源端僅要取得網站伺服器所回覆(Response)訊息中的表頭(Header)資訊(通常包 含網站伺服器的名稱及版本等資訊)。 PUT:提供上傳檔案的功能,來源端可利用此方法將檔案上傳至網站伺服器。除非有特殊的考 量,不然一般上線的網站通常不會提供此類的方法。 DELETE:提供刪除檔案的功能,來源端可利用此方法刪除網站伺服器上的檔案。一般上線的網站 通常不會提供此類的方法。 TRACE:此存取方法是用來偵錯之用。網站伺服器會將來源端所發出的HTTP要求再完整地回應至 用戶端,藉此測試網站伺服器是否正常的在運作。 |
| %l | 如果來源端主機執行identd(Identifci ation Protocol Daemon)的情況下,便記錄來源端所提供的 身分資訊 |
| %u | 如果有網站伺服器開啟HTTP認證功能,即會記錄使用者認證的使用者名稱 |
| %r | 記錄來源端主機HTTP要求中的第一列資訊(又稱為Request _line)其格式如下: <http方法> <存取的網頁名稱> <通訊協定版本> 如下例即表示使用HTTP通訊協定1.1版本,以get存取方法取得網站上index.html網頁: GET /index.html HTTP/1.1 |
| GET /index.html HTTP/1.1 | |
| %>s | 記錄網站伺服器回覆至來源端的HTTP狀態碼(為3個數字,用來表示處理結果),相關意義如下: 1xx:表示網站伺服器已接收到訊息並將繼續進行處理。例如來源端要傳遞一個龐大檔案至網站 伺服器上,網站伺服器接受到此要求後,即會回覆狀態碼100,表示來源端可繼續傳遞。 2xx:表示已成功地處理來源端的要求,最常見的是狀態碼200(Ok),表示已處理成功。 3xx:表示將來源端的要求重新導引到其他位置,通常發生在網頁程式內有重新導向的指令。 4xx:表示來源端的要求所發生的錯誤。最常見的即是狀態碼404(NOT FOUND)表示無此網 頁或403(forbidden)權限不足。 5xx:表示為網站伺服器端的錯誤,最常見的是狀態碼500,表示網站伺服器在處理來源端的要 求發生錯誤。 |
圖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秒重新更新為例,執行如下的指令:
<網站LOG檔案的
apachetop -T 30 -f
位置> -d 5
在執行後,就會產生如圖3所示的輸出結果。相關輸出結果資訊,說明如下:A:此欄位顯示從啟動ApacheTop到目
前為止,網站伺服器所處理的所有
HTTP請求數量。
B:網站伺服器處理來自使用者請求
的速率,其單位為(Reqs/sec),
表示每秒處理的請求數,若此數字
有明顯地增高,就表示網站伺服器
有大量的連線要求,甚至不排除被
攻擊的可能性。
C:網站伺服器回覆來源端要求的資
料量,其單位為(Bytes/sec),即
每秒傳輸的資料量。
D:網站伺服器回覆的HTTP狀態碼統
計,可利用此資訊來確認網站服務的
狀態,例如大量發生5XX的錯誤,網
站伺服器就可能存在潛在問題。
E:顯示網站伺服器被存取的網頁相
關資訊。
至此,網站管理者即可利用apachetop程式來即時監控Apache網站伺服器的服務情況。