Advanced Logging: 伺服器記錄管理的好幫手
http://www.microsoft.com/taiwan/technet/iis/expand/AdvancedLogging.aspx
本文將介紹 IIS 7 上一個整合記錄檔並可以允許管理人員自訂記錄內容的擴充模組:Advanced Logging,它可以整合現有在 IIS 上的 W3C 記錄檔的內容,同時也可以允許管理人員由不同的來源的資料寫入記錄檔中,以備日後可能的問題追踪之用。
Advanced Logging 介紹
只要是管理IIS伺服器的網管或應用程式開發人員,應該對 W3C 的記錄檔很熟悉,W3C 記錄檔記錄了所有來自用戶端要求的相關資訊,包含要求字串、URL、回應狀態、Win32 狀態以及許多參數,並且可以由管理人員自行選定要記錄哪些欄位:
W3C的記錄檔對大多數的管理而言已經是足夠,但對於一些大型應用程式,或是利用 IIS 做 Hosting 的廠商而言,快速解決問題是他們的工作重點,因此他們會想要在記錄檔中放更多的資訊,以利問題的診斷,像是:
- 要求當下的 CPU 使用率與記憶體使用量。
- 應用程式自訂的 HTTP 標頭值。
- 來自自訂模組的某個記錄值。
- 應用程式輸出時的 HTTP 回應標頭。
- 某個未包含在 W3C 記錄檔中的伺服器變數。
使用 W3C 記錄檔還有另外一種問題,就是因為它把所有的用戶端要求都記錄下來,因此只要是流量稍大或是使用者較多的網站,其 W3C 記錄檔肯定非常龐大,要在數以萬計的記錄中找出有問題的要求與回應記錄,基本上是在考驗管理人員的耐心,雖然目前已經有像 Log Parser 這樣的工具,但是對管理人員來說還是不夠方便,最好是可以直接將多餘的記錄過濾掉,不但可以減少記錄檔的儲存空間,在處理以查詢時速度與便利性都會比較高。
Advanced Logging 模組即為 IIS 團隊給廣大的 IIS 7.0 管理員在記錄問題上的解決方案,Advanced Logging 是一個掛在 IIS 核心功能中的模組,它可以接收來自於伺服器(server)以及網站(site)中各式各樣的記錄,並且再經過由管理人員定義的過濾器(filter)篩選之後寫入到磁碟機中成為記錄檔,目前 Advanced Logging 可以支援下列三種記錄方式:
- Client Logging:支援用戶端使用經驗的記錄,包含使用 Smooth Streaming 的串流影音觀賞,以及 Silverlight 3.0(含)以後的使用者操作經驗。
- Realtime Logging:支援來自 IIS 模組的即時訊息記錄,這個必須要由 IIS 模組在開發時期時就設定輸出Trace訊息時才會生效。
- Custom Logging:支援由管理者自行設定條件以及記錄資料類型的記錄,這會是 Advanced Logging 使用最多的功能。
定義自己的記錄檔
Advanced Logging 模組可以利用 Web Platform Installer 2.0 在 IIS 7.x 上安裝,安裝後即可在 IIS 7.x 的管理介面中看到 Advanced Logging 的圖示,但預設它並不會啟動,因此需要管理人員先到伺服器的管理區,開啟 Advanced Logging 功能,再於右邊點按『Enable Advanced Logging』的指令啟動它。
當啟用以後,Advanced Logging 模組會在 Log Directory 所指定的地方建立資料夾以及記錄檔,並且利用與 W3C 相同的方式開啟記錄。在 Advanced Logging 模組安裝完成時即預先定義了一個 %COMPUTERNAME%-Server 的記錄檔,當然我們也可以自己建立記錄檔,例如我們可以在預設網站中建立一個新的記錄檔(在 Advanced Logging 管理功能區中按右方的『Add Log Definition』):
Advanced Logging 模組的記錄檔分為伺服器(server)以及網站(site)兩種記錄檔,並且放在同一個資料夾(預設是%SYSTEMDRIVE%\Inetpub\logs\AdvancedLogs),Advanced Logging 會自動為每一個不同的網站建立子目錄,並且以檔名加上時間戳記的方式產生記錄檔,因此管理人員無須擔心檔案可能的衝突問題。
在編輯的介面中,Base file name 代表要取的檔案字首,Advanced Logging 會將檔案名稱設定為 %BASE_FILE_NAME%_D%DATE_STR%.log 的方式儲存,其中 %BASE_FILE_NAME% 即為在 Base file name 設定的名稱,而 %DATE_STR% 會被設為年月日加上毫秒(UTC 時間)的檔案名稱。而 Publish Real-time Event 則是設定要啟用由 IIS 模組所回報的即時事件記錄;Log Rollover 則是設定產生新記錄檔的週期; Selected Fields 為要在記錄檔中儲存的欄位,在 Advanced Logging 中包含了數十種欄位,也可以由管理人員自訂欄位。
例如我們利用下面的設定,建立一個新的記錄檔:
接著隨意瀏覽任何一個網頁,此時 Advanced Logging 會依照管理人員所設定的欄位值,將記錄寫入記錄檔中(若無法取得記錄的會用”-“來代替):
若管理人員認為目前 Advanced Logging 記錄的欄位不夠時,還可以在 Advanced Logging 中加入自己的欄位,只要按下右邊的『Edit Logging Fields』,即會出現編輯的對話盒:
接著按下『Add Field』,會出現新增欄位的對話盒:
管理人員可以依照自己的需要,在基礎資料來源上新增自己的記錄資料來源。
過濾記錄
Advanced Logging 的另一個特別的功能,就是它可以在寫入記錄檔前先將記錄檔做過濾,依照管理人員所設的條件過濾後,將符合的寫入到記錄檔中。我們直接以上面所建立的記錄檔,加入過濾的功能:
按下『Edit Filter』,系統會出現條件設定的對話盒,管理人員可以在這裡加入設定,例如我們設定只要是Status Code>=400的都記錄下來(400以上的是錯誤記錄),加入以後套用即可生效:
接著,在預設的網站中只要製造出HTTP status >= 400的情況,Advanced Logging就會將資料記錄下來,但如果是HTTP 200或是300系列的就不會被記錄:
在本文的介紹中只有使用一個條件,但是 Advanced Logging 的條件過濾是使用運算樹(Expression Tree)的概念開發的,因此可以有多個條件,以及多個運算式等,例如管理人員可以定義只要記錄 HTTP 500,副檔名為 .aspx 的記錄,以管理 ASP.NET 應用程式錯誤發生的狀態。
結語
Advanced Logging 提供了讓管理人員很容易設定的記錄檔管理功能,可以有效的降低記錄檔的資料量,也可以降低在記錄檔中搜尋特定問題的負擔,更可以透過指定的記錄過濾,讓問題的發掘能更加的快速。
若對 Advanced Logging的Client Logging 以及 Real-time Logging 有興趣,可參考下面兩篇文章:
http://learn.iis.net/page.aspx/581/advanced-logging-for-iis-70---real-time-logging/
http://learn.iis.net/page.aspx/582/advanced-logging-for-iis-70---client-logging/