關於事件追蹤

Windows 事件追蹤 (ETW) 是高效率的核心層級追蹤功能,讓您能記錄核心或應用程式定義的事件記錄檔。 您可以即時或從記錄檔取用事件,並使用它們來偵錯應用程式,或判斷應用程式中發生效能問題的位置。

ETW 可讓您動態啟用或停用事件追蹤,讓您能夠在生產環境中執行詳細的追蹤,而不需要重新開機電腦或應用程式重新開機。

事件追蹤 API 分成三個不同的元件:

下圖顯示事件追蹤模型。

事件追蹤模型

控制器

控制器是應用程式,可定義記錄檔的大小和位置、啟動和停止 事件追蹤會話、啟用提供者,以便將事件記錄到會話、管理緩衝集區的大小,以及取得會話的執行統計資料。 會話統計資料包括使用的緩衝區數目、傳遞的緩衝區數目,以及事件和緩衝區數目遺失。

如需詳細資訊,請參閱 控制事件追蹤會話

提供者

提供者是包含事件追蹤檢測的應用程式。 提供者註冊本身之後,控制器就可以在提供者中啟用或停用事件追蹤。 提供者會定義其啟用或停用的解譯。 一般而言,啟用的提供者會產生事件,而停用的提供者則不會產生事件。 這可讓您將事件追蹤新增至應用程式,而不需要隨時產生事件。

雖然 ETW 模型會將控制器和提供者分成不同的應用程式,但應用程式可以包含這兩個元件。

如需詳細資訊,請參閱 提供事件

提供者類型

有四種主要的提供者類型:MOF (傳統) 提供者、WPP 提供者、資訊清單型提供者和 TraceLogging 提供者。 如果您要為 Windows Vista 或更新版本撰寫不需要支援舊版系統的應用程式,您應該使用資訊清單型提供者或 TraceLogging 提供者。

MOF (傳統) 提供者:

  • 使用 RegisterTraceGuidsTraceEvent 函式來註冊和寫入事件。
  • 使用 MOF 類別來定義事件,讓取用者知道如何取用事件。
  • 一次只能啟用一個追蹤會話。

WPP 提供者:

  • 使用 RegisterTraceGuidsTraceEvent 函式來註冊和寫入事件。
  • 讓相關聯的 TMF 檔案 (編譯成二進位檔的 .pdb) ,其中包含從原始程式碼中預處理器掃描 WPP 檢測推斷的解碼資訊。
  • 一次只能啟用一個追蹤會話。

資訊清單型提供者:

  • 使用 EventRegisterEventWrite 來註冊和寫入事件。
  • 使用資訊清單來定義事件,讓取用者知道如何取用它們。
  • 最多可以同時啟用八個追蹤會話。

TraceLogging 提供者:

  • 使用 TraceLoggingRegisterTraceLoggingWrite 來註冊和寫入事件。
  • 使用自我描述事件,讓事件本身包含取用事件所需的所有資訊。
  • 最多可以同時啟用八個追蹤會話。

所有事件提供者基本上都會使用TraceEvent 系列, (TraceEvent進行舊版技術,而EventWrite EventWriteEx/ 則用於較新的事件) 。 事件提供者只會在事件承載中儲存哪些欄位類型,以及儲存相關聯事件解碼資訊的位置而有所不同。

取用者

取用者是選取一或多個事件追蹤會話作為事件來源的應用程式。 取用者可以同時要求多個事件追蹤會話的事件;系統會依時間順序傳遞事件。 取用者可以接收儲存在記錄檔中的事件,或從即時傳遞事件的會話接收事件。 處理事件時,取用者可以指定開始和結束時間,而且只會傳遞在指定時間範圍內發生的事件。

如需詳細資訊,請參閱 取用事件

遺失的事件

Perfmon、System Diagnostics 和其他系統工具可能會報告事件記錄檔中的遺漏事件,並指出 Windows 事件追蹤 (ETW) 的設定可能不是最佳。 事件可能會因為許多原因而遺失:

  • 事件大小總計大於 64K。 這包括 ETW 標頭加上資料或承載。 使用者無法控制這些遺漏事件,因為事件大小是由應用程式所設定。

  • ETW 緩衝區大小小於事件大小總計。 使用者無法控制這些遺漏事件,因為事件大小是由記錄事件的應用程式所設定。

  • 針對即時記錄,即時取用者未耗用夠快或完全不存在的事件,而備份檔案會填滿。 如果事件記錄檔服務已停止,並在記錄事件時啟動,就會產生此結果。 使用者無法控制這些遺漏的事件。

  • 記錄到檔案時,磁片速度太慢,無法跟上記錄速率。

基於上述任何原因,請將這些問題回報給產生事件的應用程式或服務提供者。 這些問題只能由應用程式開發人員或服務記錄事件來修正。 如果在事件記錄服務中報告遺漏的事件,這可能表示事件記錄檔服務的設定發生問題。 使用者可能會有一些有限的能力可增加事件記錄服務要使用的磁碟空間上限,這可能會減少遺漏的事件數目。