ETW 記錄檔驅動程式

目錄

Windows 事件追蹤 (ETW) 記錄驅動程式會將容器記錄轉送為 ETW 事件。ETW 代表 Windows 中的事件追蹤,是 Windows 中追蹤應用程式的通用架構。每個 ETW 事件都包含一條訊息,其中包含記錄及其上下文資訊。然後,用戶端可以建立 ETW 聆聽器來聆聽這些事件。

此記錄驅動程式向 Windows 註冊的 ETW 提供者具有 GUID 識別碼:{a3693192-9ed6-46d2-a981-f8226c8363bd}。用戶端建立 ETW 聆聽器並註冊以聆聽來自記錄驅動程式提供者的事件。提供者和聆聽器的建立順序無關緊要。用戶端可以在提供者向系統註冊之前建立其 ETW 聆聽器並開始聆聽來自提供者的事件。

用法

以下是如何使用大多數 Windows 安裝中包含的 logman 公用程式來聆聽這些事件的範例

  1. logman start -ets DockerContainerLogs -p {a3693192-9ed6-46d2-a981-f8226c8363bd} 0 0 -o trace.etl
  2. 透過將 `--log-driver=etwlogs` 新增至 Docker run 命令,使用 etwlogs 驅動程式執行您的容器,並產生記錄訊息。
  3. logman stop -ets DockerContainerLogs
  4. 這會產生一個包含事件的 etl 檔案。將此檔案轉換為人類可讀形式的一種方法是執行:`tracerpt -y trace.etl`。

每個 ETW 事件都包含以此格式的結構化訊息字串

container_name: %s, image_name: %s, container_id: %s, image_id: %s, source: [stdout | stderr], log: %s

訊息中每個項目的詳細資訊如下所示

欄位說明
container_name啟動時的容器名稱。
image_name容器映像檔的名稱。
container_id完整的 64 個字元容器 ID。
image_id容器映像檔的完整 ID。
來源`stdout` 或 `stderr`。
記錄容器記錄訊息。

以下是一個事件訊息範例(輸出格式化以提高可讀性)

container_name: backstabbing_spence,
image_name: windowsservercore,
container_id: f14bb55aa862d7596b03a33251c1be7dbbec8056bbdead1da8ec5ecebbe29731,
image_id: sha256:2f9e19bd998d3565b4f345ac9aaf6e3fc555406239a4fb1b1ba879673713824b,
source: stdout,
log: Hello world!

用戶端可以剖析此訊息字串以取得記錄訊息及其上下文資訊。時間戳記也可在 ETW 事件中取得。

**注意**

此 ETW 提供者僅發出訊息字串,而不是特殊結構的 ETW 事件。因此,您不必向系統註冊資訊清單檔案即可讀取和解譯其 ETW 事件。