觀察IIS Log異常事件檢視
由於系統發生異常事件(網站速度異常,最後無法連線),在這裡分享一下追查過程。
- 需有記錄:效能分析、IISLog、事件檢視記錄(系統&應用程式)。
- 明確了解事情發生時間點,幾點至幾點。
- 先看效能分析在這段時間是否有異常,主要看:CPU、Memery、連線數、硬碟讀寫的情況。
- 再看時段內,系統&應用程式的事件檢視是否有異常,其實,看錯誤&警告應該就夠了。
- 最後看IISLog的紀錄。
補充說明:IIS Log很多、很雜而且很醜,所以,我們透過Log Parser 2.2來幫助我們。以下說明大略使用方式。
Log Parser 是微軟下的產物,我是看著介紹好用工具:Log Parser (分析多種 Log 格式的超強工具) 來入門的,撰寫者為保哥。
多次嘗試以後,發現真的跟SQL與法沒有啥兩樣。
在安裝完Log Parser 2.2之後,執行Log Parser2.2
之後會出現一個Cmd視窗。
使用方式大概是像:
這樣說有沒有簡單呢!?我嘗試了一個下午才跑出來。
假設我桌面上有一個.Log檔案,我要看我有哪些欄位其實可以用,
其實Log檔看起來一點都不直覺,所以,我們把資料匯入到資料庫中。
首先,先瞭解IIS的Log檔的欄位定義。
需要注意的是,DateTime的問題,要轉換為LocalTime,否則要注意記錄的時間格式。
再來就是可以扣除掉一些不必要的Log如下:
過濾附檔名:
WHERE TO_LOWERCASE (EXTRACT_EXTENSION(cs-uri-stem)) NOT IN ('gif';'jpg';'png';'bmp';'ico';'axd';'css';'flv';'js';'swf';'xls';'doc';'pdf';'htc';'xml')
過濾時間:
Where TO_LOCALTIME(to_timestamp(date,time)) between
TO_LOCALTIME(timestamp('2012/01/11 00:00:00', 'yyyy/MM/dd hh:mm:ss'))
and TO_LOCALTIME(timestamp('2012/01/11 23:59:59', 'yyyy/MM/dd hh:mm:ss'))
過濾Http狀態碼:
Where [sc-status] <> 200
我這次用到的大概就是這些,如果都不下Where條件各位可能要匯到天荒地老了。就我而言,一個Log檔有快六百萬筆資料。
所以,各位自行評估嚕!若是多個檔匯入SQL,若資料表已存在,不會再建立一次Table,只會執行Insert指令。
說這麼多.........那最後系統到底發生甚麼事情了呢!?
交叉比對下,確實在該時間點系統的記憶體被吃光了,而導致Web程式在呼叫資料庫等服務,苦等不到資源,而瘋狂發生錯誤。
PS:各位還是要記住,上線的程式要關掉Debug,不要讓別人看光光。
但是,在某段期間後,系統資源被釋放掉就又正常了!!
多多的蛛絲馬跡的結論是,無更多資訊指出誰是兇手了!