(今天電腦有些問題,圖的部分我晚點再補)
用了個難懂的標題,我只是暫時想不到更好的梗用這個先上。企是台灣國語,去 (GO),事減見是就是可以讓你在遇到問題的時候,減少你需要做的事,就能看見真正的問題在哪兒的更多線索(是,如同實事求是的是)。好,解釋完了難懂的標題,能達成標題說的這件事的,今天要介紹的,是什麼工具呢?沒錯,就是事件檢視器(Event Viewer),讓我們多了解它一些,去事減見是!
一件事就是一個事件,這句話好像廢話,不過這就是事件檢視器的事件的定義,事件檢視器是 Microsoft Windows OS 內建的事件檢視工具,能夠查看本地或遠端的事件。
(圖:事件檢視器開啟)
對於系統來說,事件檢視器裡的事件有統一規格的制定標準,使得其他應用程式也能夠透過該標準寫入事件,集中化事件的管理於事件檢視器中。在 Windows Vista 的事件檢視器據說有大改事件系統本身,不過現在應該沒什麼人用 Vista,我自己都沒用過(Win7 → Win10)。事件檢視器寫入的實體檔案預設路徑為 C:\Windows\System32\winevt\Logs\,檔案格式為 evtx。
一般我們重視的 Log 類型有三,System,Security,Application。
(圖:事件檢視器介面)
上圖基本上就是事件檢視器打開後的畫面,而我提到的三類在圖中左側圈起來的地方。
System 寫入的是系統層面的問題,比如你要查看系統的開關機時間、意外發生原因,或是像一些 Process 的 Crash(如 WAS),都會是找這個類別
(圖:System範例)
Security 基本是和帳號驗證認證相關的事件記錄,記述各個身分的登入、登出、檢查等行為
(圖:Security範例)
Application 是 Application 主動寫下的 Log,比如你安裝程式失敗、程式意外結束,這邊也許就會有相關記錄
(圖:Application範例)
如果我們要匯出事件檢視器的內容供他人查看協助除錯時,要注意匯出的資訊中有沒有敏感資訊,還有就是時間。Event Viewer 裡顯示的時間是「當前這台電腦」的 Local Time Zone,也就是如果從 UTC+7 的電腦裡會出了 09:00 的事件,在 UTC+8 的電腦裡看起來會是 10:00,無須另外轉換。
(圖:儲存事件檢視器)
匯出的方式有二,一是點擊右鍵選擇 Save All Events As…的全部匯出,二是部分匯出,多選你要匯出的目標事件,可以左鍵點擊開始事件,再用 Shift 配合左鍵點選結束事件,快速全選範圍內的事件來做匯出。或是使用我們一會提到的 Filter 來做被過濾完事件的匯出,一樣是部分匯出。
我們查看事件本身的時候,一般欄位有這些資料:Level,Date and Time,Source,Event ID,Task Category。
Event Viewer 中的緊急程度標準,Level 由高到低為 Critical > Error > Warning > Information,Information 就只是顯示個記錄,Critical 則是指嚴重影響到系統層面的錯誤。
時間剛剛說過了,就是要記得這邊顯示得是你電腦的 Local Time 的時區,Source 是該 Event 的來源是誰,Task Category 用於表示細部類別分類,相對比較少用。
Event ID 中文又稱事件識別碼,往往是能夠幫助我們定位問題的事件碼,不同提供者可能會重複使用到 Event ID 來標是個別的事件,所以要注意該事件是由誰提供的,還有對應的訊息。如果是系統的話通常 Provider 會寫 System,就會是比較常見會去查詢的錯誤碼。
錯誤碼有時候部分 Application 會拿來當泛用錯誤表述,實際情況可能會寫在下面的敘述裡,又或者有時候只代表了最後徵兆,並不一定能定位到原因。
如果這些資料仍沒辦法幫你定位到問題,點擊事件後的 Detail 分頁可能會給你一些幫助,內容會是基於一般欄位再往上擴充。有時候事件本身的內容會寫 Error record in the detail 之類的句子,這時候 Detail 的頁面裡面可能就有 16 進制的錯誤碼,能夠幫助我們定位到更進一步的原因。
(圖:16進制錯誤碼範例)
記得,所有的錯誤碼務必先看 Provider,如果是 System / Windows 家的這裡提供兩個連結可能會幫助除錯。
The Microsoft Error Lookup Tool
第一個是一個命令列的查詢工具,輸入對應錯誤碼他會幫你列出可能的相關錯誤訊息;第二個是令一些錯誤碼的對照參考。如果 Detail 裡有錯誤碼通常更能幫我們靠近問題的核心。
事件檢視器有提供過濾功能(Filter)來協助我們過濾大量的事件,依系統裡裝的程式而定,有時候事件量會很驚人,過濾可以幫助我們省去一些上下翻找的時間。
(圖:常用的過濾設置)
在查看事件檢視器除錯的時候,如果我沒有太多的資訊,想要大概看一下問題的話,通常我會勾起 Critical,Error,Warning 做過濾,這幾個會是比較跟錯誤相關的標籤。如果是 IIS 配 .NET 的組合,Provider 的地方可以再多過濾一層 WAS / .NET Runtime,可以逐漸縮小過濾範圍,減少雜訊。
(圖:過濾XML)
過濾器其實是用 XML 文件做過濾表述,可以切到 XML 格式來做 Query 條件的保存或匯入,在你處理同一個時間段多台 Server 的事件檢視比對的時候可以省去你反覆手動設置過濾條件的時間。
事件檢視器的簡單介紹大概到這邊,有機會我再補上實例演示讓大家可能會有個更立體的使用認知。