共用方式為


Windows Vista

Windows Vista 中事件管理的新工具

Val Menn

 

摘要:

  • 新的事件基礎結構
  • 事件類型
  • 結構化事件內容
  • 使用 XPath 運算式

許多人會說,事件記錄和追蹤相當枯燥。而越來越多人抱怨,追蹤和事件只不過是次要活動 (例如,偵錯和自動監控功能) 的附帶結果,且不夠重視事件記錄和追蹤功能的重要性。

Microsoft® Windows Vista™ 著重在扭轉這些看法,並且讓企業管理向前邁進了一大步。Microsoft 徹底檢修了部分主要元件及其使用者介面。事件日誌服務已針對企業徹底重新撰寫,而追蹤速度也較以往更快、更安全。

想像一下,如果能擁有一組更上乘的工具,協助您發現並解決關鍵任務系統中的問題。或者,如果能擁有可讓支援技術人員輕鬆收集說明事件,並且從使用者的系統進行追蹤的功能?再者,如果能讓開發人員利用使用者傳送的追蹤內容,即時診斷並修復部署系統中的錯誤?想像一下,如果收集資訊的方式更為簡單且強大,並且能夠迅速執行疑難排解,聽起來是不是有趣多了?

何謂事件?

電腦應用程式就像是執行各種功能的「黑盒子」。在這個盒子中進行著許多活動,不過由於您看不見盒子內部,因此很難瞭解內部工作的情形。然而,應用程式會向外與其他程式或使用者溝通。這些溝通「事件」就能讓您稍微窺探應用程式的內部。

如果是軟體,事件通常定義為軟體系統中與外界進行通訊的活動 (所謂外界是指使用者或其他程式)。這類活動通常是指狀態或組態的變更。其溝通的內容可能是軟體系統的目前狀態或組態,以及變更的原因。

廣義來說,事件這個詞也可以用來表示這些活動公開 (Expose) 的方式。這類公開事件的範例如下所述:

  • 用於處理程序之間通訊 (IPC) 的 Win32® 物件
  • 用於暫時 (非持續) 通知的 WMI 事件
  • 儲存到追蹤檔中的 Windows 事件追蹤 (ETW) 追蹤事件
  • 儲存於事件日誌即時記錄中且可能保存於事件日誌檔中的事件日誌事件
  • 使用自訂基礎結構儲存到檔案中的事件

此處列出的後三個範例為本文中將討論的類型。

事件的使用方式

追蹤或記錄的事件是程式或作業系統中活動的記錄。這些追蹤和事件日誌不只是開發人員所需。對於 IT 和支援人員來說,更是不可或缺的工具,並且能讓您一窺執行中應用程式的狀態與內部作業情形。

您可以使用這類日誌監控整體系統健康狀態。使用事件日誌可搜尋指出問題的任何事件。例如,您可能會在 CertificateServicesClient 來源的 Application 日誌中發現錯誤事件 6,以及下列訊息:"Automatic certificate enrollment for local system failed (0x80070576).There is a time and/or date difference between the client and server." (本機系統的自動憑證註冊失敗 (0x80070576)。用戶端和伺服器之間的時間和/或日期不同。)同樣地,您可以偵測元件從不良狀態轉換回正常操作的情形。例如,更正時間和日期的差異之後,同一個 CertificateServiceClient 來源可能會在 Application 日誌中發佈資訊事件 19,指出:"Certificate enrollment for <user name> successfully received an AutoenrolledWindowsSystemComponentVerification certificate from certification authority <authority name>." (<使用者名稱> 的憑證註冊成功收到來自憑證授權單位 <授權單位名稱> 的 AutoenrolledWindowsSystemComponentVerification 憑證。)這類資訊對於尋找和解決衝突及其他組態問題來說,相當具有價值。

這項資訊對於診斷問題也十分實用。您可以找出造成問題的程式和系統動作,並且找到協助您判斷根本原因的詳細資料。同樣地,您還可以運用這項資訊評估及解決效能問題。

事件日誌提供的寶貴資訊可讓您用來確保更安全的環境。這些資訊可用來偵測嘗試入侵的行為、稽核系統歷程記錄、確保不可否認性,以及找出設定錯誤的資源。

Windows Vista 中的事件

舊版 Windows® 在事件記錄和追蹤方面有許多缺點。包括受限的事件日誌延展性 (所有日誌的總容量限制為可用記憶體的數量)、事件發佈效能 (例如,限制可在作用中網域控制站上發佈的事件數量),以及受限的追蹤事件安全性。

Windows Vista 利用稱為 Windows Eventing 6.0 的全新事件記錄和追蹤基礎結構解決了許多這類問題。它不但延伸了始自 Windows 2000 即持續使用的 ETW,更取代了事件日誌服務和事件檢視器。新的 Windows Eventing 是專為處理保留在日誌檔中以供未來檢查使用的事件所設計 (而不是用於暫時事件,如 IPC 和通知機制)。

藉由提供安全性與延展性解決方案,自訂事件記錄和追蹤實作就不是那麼重要了。不過須注意的是,增強功能是在保留與現有事件日誌和 ETW API 之完整相容性的情況下提供,這表示所有現有的應用程式將持續運作不變。

檢視事件的新方法

現行的事件檢視器已是 IT 社群中,最普遍的 Windows 程式之一。新的事件檢視器已徹底重新撰寫,而由於它存在 Microsoft Management Console (MMC) 3.0 中,所以外觀上也有所改變,不過仍然相當熟悉,因此轉換時應相當容易。

樹狀窗格與事件清單都會繼續使用。您仍然可以在 [Windows 記錄檔] 節點下存取熟悉的應用程式記錄檔、系統記錄檔和安全性記錄檔。然而,根目錄中已加入一些新的節點,而新的 ForwardedEvents 記錄檔 (將於稍後討論) 也已加入 [Windows 記錄檔] 節點中。

最明顯的新功能就是位於事件清單下方的預覽窗格。其中包含焦點所在事件的內容。這表示,您不需要按兩下事件,就能看見事件內容,也不必為了同時看見清單和 [事件內容] 對話方塊,而與視窗大玩捉迷藏。不過您仍然可以按兩下事件,在對話方塊中顯示其內容。新的對話方塊並非強制回應,因此您可以同時顯示多個事件內容對話方塊。

新的檢視模式讓您只需按幾下滑鼠,就能顯示所有想看的事件。您可以針對一個或多個日誌檔收集事件,也可以讓事件著重在特定的 ID、等級 (嚴重性) 或時間範圍。

您將在 [自訂檢視] 節點下找到 [系統管理事件] (如 [圖 1] 所示)。其中會提供一份清單,列出系統管理員想查看的各個不同記錄檔中的所有錯誤和警告。

圖 1 系統管理事件

圖 1** 系統管理事件 **(按影像可放大)

那麼,到底如何判斷哪些是管理員想查看的日誌和事件呢?我們識別出了五種不同的事件類型,以及與各類型相關的使用者。[圖 2] 中提供了詳細資料。對於各使用者群組想查看的所有事件日誌和追蹤事件來說,這是相當普遍卻有效的分類方式。

Figure 2 事件類型及使用者

事件類型 說明 使用者
管理 (Admin) 管理類型對於大部分的系統管理員來說即足夠。這些事件的等級相當高,通常會提供足夠識別問題及判斷解決方式的資訊。管理事件至少能夠識別問題發生的時間,或指出應用程式、元件或系統整體處於不健康狀態或已從不健康狀態復原。大部分的管理事件為錯誤或警告,並且通常有因應動作。 管理員、支援人員及監控與分析程式
作業 (Operational) 作業事件與管理事件一樣可診斷問題。但作業事件不僅包含錯誤和警告。這類事件還會通知使用者應用程式或 OS 元件是否正常運作。由於作業事件的容量維持相當低,因此啟用時不會影響系統效能。作業事件與管理事件是由支援人員、監控公用程式,以及一些經驗較豐富的管理員使用。 進階管理員、支援人員及監控與分析程式
稽核 (Audit) 稽核事件提供有關使用者存取任何資源或採取動作的歷程記錄。這類事件本身不代表程式失敗或成功,而是指出動作失敗或成功。稽核事件可以完全停用,或搭配不同等級的細節選擇性啟用。同時也支援 OS 等級的安全性稽核 (這類事件可在事件日誌的安全性記錄檔中找到)。 進階管理員、安全性稽核人員,以及鑑識專家
分析 (Analytic) 分析事件與作業事件差異並不大,會在應用程式和元件正常運作時記錄。但是分析事件的容量和細節則遠大於作業事件,所以可能會對系統效能造成負面影響。因此,分析事件一般為停用狀態。若要使用分析事件,請在診斷工作階段之前啟用,然後在檢查追蹤之前停用。 支援人員監控與分析程式
偵錯 (Debug) 偵錯事件同樣是高容量的事件,因此通常為停用狀態。這類事件主要為開發人員所使用,IT 專業人員很少會檢視這類事件。 開發人員

Windows Eventing 中的每一個日誌都有指定的類型。而日誌中的所有事件都會共用該日誌的類型。[圖 1] 中的檢視是使用此類型資訊定義,其中會擷取 Admin 類型日誌中的所有錯誤和警告事件。

Windows Eventing 的架構

Windows Eventing 的基礎結構是由可讓程式發佈事件物件,並將事件物件傳送至日誌檔的軟體元件所組成。ETW 會提供用來將所有事件類型從事件發佈者傳輸至目的地的傳輸方式。ETW 也已在 Windows Vista 中徹底檢修,而且現在會提供更佳的效能與增強的安全性。透過 ETW 發佈事件並非同步,因此不會影響發佈程式的效能。當系統收到新事件時,就會收集有關目前使用者內容和發佈程序的資訊並附加到事件中。

事件發佈之後,會以不同的方式處理不同的類型。由於分析和偵錯事件通常容量較大,因此必須儲存到僅需最少處理的檔案中,以避免影響系統效能。因此這些事件會立即儲存到追蹤檔。

管理和作業事件的頻率並不高,因此能夠進行額外的處理而不會影響系統效能。這些事件會傳送到事件日誌服務,該服務會將這些事件儲存到即時事件日誌中,並且可以選擇性地將它們傳送給即時訂閱者。訂閱者可使用查詢語言 (將於稍後討論) 挑選想要收到的事件。

IT 社群對於兩種訂閱者特別有興趣。一種是大幅增強的 Windows Vista 工作排程器,另一種是可用來傳送事件給遠端事件收集站的事件轉寄站。

結構化事件概要

關於事件日誌的常見抱怨為,日誌中包含太多不必要的內容。也就是說,這些內容是隨不怎麼重要,甚至不重要的事件所累積,而且常會隱藏或混淆重要的事件。由於有些事件確實提供了少許資訊,因此對於某位使用者來說不必要的內容,對於其他人來說可能相當寶貴。

Windows Vista 提供了篩選掉不必要事件的方式,可讓您瞄準確實重要的事件。這個方式需要使用事件日誌服務支援的跨日誌查詢語言。為了執行此方式,所有事件都必須遵循正確定義的結構。

舊版事件日誌提供了某種事件結構,但該結構並未完整定義,而且只能使用 Win32 API 檢視。而在 Windows Vista 中,事件擁有完整定義的結構。事實上,事件對外是使用具備已發佈結構描述的 XML 呈現。如此就能建立查詢,以收集您需要的事件,同時篩選掉無關的事件。由於使用 XML 的關係,XPath 就成了事件查詢語言的基礎。當然,使用結構化事件開啟了自動化的新視野,如同在新的工作排程器整合中所見。

現在,事件預覽窗格包含了 [詳細資料] 索引標籤。[事件內容] 對話方塊中也提供同樣的索引標籤。選取 [事件內容] 對話方塊上的 [詳細資料] 索引標籤就會顯示事件的 XML 表示方式。[圖 3] 中顯示的範例為工作排程器中的作業事件。其中包括兩個部分。系統部分是由此事件的每個事件執行個體中常見的一般事件資訊,以及發佈執行個體時收集的一些系統參數所組成。EventData 為可延伸的區段,其中包含應用程式的結構化資訊。

圖 3 事件的 XML 表示方式

圖 3** 事件的 XML 表示方式 **(按影像可放大)

每個事件日誌檔都會視為這類結構化事件元素的順序。這代表一種邏輯、可閱讀的事件日誌和事件保存檔檢視方式。事件會在內部儲存為二進位格式,此格式的設計在於提供精簡度、可靠性與搜尋效能之間的平衡。

事件屬性

XML 資料的 System 區段提供事件發生的時間、處理序識別碼、執行緒識別碼、電腦名稱,以及使用者的安全性識別碼 (SID)。在舊版 Windows 中,事件只有兩種屬性:EventID 和 Category。而 XML 還會提供其他詳細資訊,包括 EventID、Level、Task、Opcode 及 Keywords 屬性。現在就來看看這些屬性的細節。

EventID 和 Version:事件會由其 EventID (兩位數字) 和 Version (一位數字) 的組合單獨識別。來自相同事件提供者且共用 EventID 和 Version 的所有事件,會共用相同的結構。

Level:這個值代表事件的嚴重性或詳細程度。預先定義的值 1 (嚴重)、2 (錯誤)、3 (警告)、4 (資訊) 及 5 (詳細) 為常用值,但是提供者可以定義自己的值,且最大值為 255。數字越大,表示事件越詳細。

Task:Task 屬性通常會識別事件提供者的一般功能區 (例如,列印、網路功能或 UI)。此屬性也可以代表程式的子元件。安全性稽核事件即廣泛使用此屬性。每個事件發行者都可為這個兩位數字定義自己的一組值。不過請注意,Task 屬性的意義通常會在語義上與舊版 Windows 中的 Category 屬性相符,而且為 Category 屬性的超集合。基於這個理由,事件檢視器會在稱為 [工作類別] 的欄位中顯示此值。

Opcode:此為一位數的值,通常用來代表軟體執行的特定動作或動作的一部分。此值常在追蹤活動為主的程序中使用 (例如 Web 服務,而活動則是 Web 服務收到的特定要求)。這個屬性有少數預先定義的值,最常見的值包括 1 (開始) 和 2 (停止)。

Keywords:這是一個包含 56 個旗標的遮罩,可由程式設定,以方便將類似的事件設為群組。而每個事件可以設定一個以上的旗標,表示該事件屬於多個群組。

瞭解發行者和事件

如果事先不知道能夠在事件日誌和追蹤檔中找到的所有資訊類型,就很難主動出擊。因此,我們對於新事件基礎結構的主要目標之一,就是針對每個事件發行者提供文件,包括事件及其目的地的組合資訊。

為了達到此目標,每個發行者都必須列舉將隨著事件結構發行的所有事件。這項資訊會經過編譯、編碼,然後隨發行者的 Binary (程式或 DLL) 儲存。

您現在可以找出所有在事件記錄系統中註冊的發行者,以及每個發行者的組態。其中包括檢視某個發行者可能記錄之所有事件的完整清單、這些事件的結構,以及相關的訊息 (甚至是在事件發生之前)。[圖 4] 顯示如何使用命令列公用程式 wevtutil 顯示提供者組態。圖中顯示的命令會顯示系統對於名為 Microsoft-Windows-Video For Windows 的事件發行者已知的所有相關資訊。

圖 4 使用 wevtutil 顯示提供者組態

圖 4** 使用 wevtutil 顯示提供者組態 **(按影像可放大)

查詢語言的運作方式

之前已提過,新的基礎結構中事件的結構化本質能夠讓我們納入查詢語言的支援,而該語言是以標準的 XPath 運算式為基礎。一般來說,只要提供起始位置 (XML 元素),XPath 運算式就能參考元素內的任何位置 (如需 XPath 語言的完整說明,請參閱 w3.org/TR/xpath 網站上的官方參考資料)。XPath 運算式更常參考起始元素內包含的其他元素或屬性。由於事件日誌基本上是 Event 元素的順序,因此您可以假設每個日誌的外觀看起來就像這樣:

<root>
<Event>... </Event>
...
<Event>... </Event>
</root>

根元素並沒有名稱,它只不過是當作所有 XPath 運算式的關聯內容使用。真正會定義的是前面的 X,這表示 XPath 運算式可參考 Event 元素、其子元素及屬性。而如果 XPath 運算式選取的元素存在,便會評估為 true。現在一起來看看,以 [圖 3] 中所顯示事件為主的相當簡單的 XPath 運算式:

*/System[Provider/@Name='Microsoft-Windows-TaskScheduler' and Level <= 2]

此運算式會選取 Microsoft-Windows-TaskScheduler 事件提供者中,等級 2 或更小 (也就是所有錯誤和嚴重事件) 的全部 Event 元素 (「全部」是以星號表示)。

雖然使用簡單的 XPath 運算式就能夠選取單一日誌中的事件,但簡單而強大的 XML 查詢語言還能讓您選取和抑制任何日誌或外部事件保存中的事件。事實上,查詢語言已在 Windows Vista 事件記錄中普遍使用。例如,自訂檢視就是以查詢為主。您可以使用查詢語言指定要在事件檢視器的事件清單窗格中,顯示哪些來自不同特定日誌的事件。您可以使用語言訂閱事件、保存選取的事件,以及觸發新的工作排程器中的動作。

實際的查詢 XML 或 XPath 運算式必須提供給事件日誌命令列公用程式。不過並非每個人都懂得定義這類查詢,因此事件檢視器提供了簡單的使用者介面來建立常用的查詢。例如,[圖 5] 中顯示的 [建立自訂檢視] 對話方塊就可以用來為所有工作排程器事件建立檢視。但請注意,每個查詢建立對話方塊都有一個 [XML] 索引標籤,這個索引標籤會顯示查詢文字,並且讓您直接編輯查詢。

圖 5 建立常用查詢的使用者介面

圖 5** 建立常用查詢的使用者介面 **(按影像可放大)

常見的查詢用法

使用查詢的方式有許多種。其中自然有些使用方式會比其他方式更常用。例如,查詢常用來檢視事件檢視器中,甚或事件日誌命令列公用程式中的選取事件。

您可以使用 Windows 工作排程器將工作附加至查詢。當符合查詢的事件發行時,工作排程器就會啟動指定的工作。但須注意的是,此功能會使用訂閱並且回應任何最近出現的事件。您只能訂閱管理和作業事件;偵錯和分析事件則會直接寫入追蹤檔,因此系統無法在這些事件發生時進行檢查。

查詢可以用來保存選取事件。您可以從任何類型的即時日誌、下層事件保存 (EVT 檔)、外部追蹤檔,或 Windows Vista 事件保存檔中選取事件。保存檔可在事件檢視器中開啟,備份至次要保存區,或傳送給支援人員協助診斷問題。所有事件說明和其他事件相關字串,都可以使用保存作業期間選取的語言附加至保存檔。如果完成此作業,事件就會包含任何電腦選擇使用之語言的完整說明。

最後,查詢可以用來將事件轉寄至專門收集事件的系統。此功能會使用新的事件收集站服務,可讓管理員建立遠端電腦的事件訂閱。這些訂閱會保留在收集站電腦上,並且可以使用可設定的排程進行重試。事件收集站會使用業界標準的 WS-Management 通訊協定在遠端電腦上建立訂閱,並且使用 WS-Eventing 通訊協定傳輸事件 (這兩種通訊協定都很安全並且與防火牆互動良好)。事件收集站收到的事件會儲存到本機的事件日誌中。

結論

Windows Eventing 的變更相當大幅且廣泛,本文所討論的內容僅為開端。單就事件轉寄功能便足以撰寫一整篇文章。

事件系統在效能、延展性、可靠性及安全性上擁有許多改善。但請別忘記,我們的主要目標在於改善 Windows 的管理能力。事件檢視器檢視使用的查詢語言可讓您更輕鬆地發現問題。與工作排程器的緊密整合則開啟了簡易監控、自動化問題解決方案,以及開發迅速通知問題的方式。而事件轉寄則使得伺服器與桌上型電腦能夠保存事件並且在不需代理程式的條件下進行監控。

這些功能都能在不需犧牲舊版相容性的情況下實作,也就是說,現有的解決方案將持續運作。最後要強調的是,事件記錄的改善功能可協助組織更有效地管理系統。

Val Menn 服務於 Microsoft 的管理基礎結構小組,並擔任事件日誌的程式經理。之前則是許多啟動程式的軟體工程師與系統管理員。

© 2008 Microsoft Corporation and CMP Media, LLC. 保留所有權利;未經允許,嚴禁部分或全部複製.