【IIS】IIS Log 異常事件檢視

  • 18002
  • 0
  • IIS
  • 2015-11-29

觀察IIS Log異常事件檢視

由於系統發生異常事件(網站速度異常,最後無法連線),在這裡分享一下追查過程。

  1. 需有記錄:效能分析、IISLog、事件檢視記錄(系統&應用程式)。
  2. 明確了解事情發生時間點,幾點至幾點。
  3. 先看效能分析在這段時間是否有異常,主要看:CPU、Memery、連線數、硬碟讀寫的情況。
  4. 再看時段內,系統&應用程式的事件檢視是否有異常,其實,看錯誤&警告應該就夠了。
  5. 最後看IISLog的紀錄。

補充說明:IIS Log很多、很雜而且很醜,所以,我們透過Log Parser 2.2來幫助我們。以下說明大略使用方式。

Log Parser 是微軟下的產物,我是看著介紹好用工具:Log Parser (分析多種 Log 格式的超強工具) 來入門的,撰寫者為保哥。

多次嘗試以後,發現真的跟SQL與法沒有啥兩樣。

在安裝完Log Parser 2.2之後,執行Log Parser2.2

1

之後會出現一個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,不要讓別人看光光。

但是,在某段期間後,系統資源被釋放掉就又正常了!!

多多的蛛絲馬跡的結論是,無更多資訊指出誰是兇手了!