ETW 日誌驅動程式
目錄
Windows 事件跟蹤 (ETW) 日誌記錄驅動程式將容器日誌作為 ETW 事件轉發。ETW 是 Event Tracing in Windows 的縮寫,是 Windows 中用於跟蹤應用程式的通用框架。每個 ETW 事件都包含一條訊息,其中包含日誌及其上下文資訊。然後,客戶端可以建立一個 ETW 偵聽器來偵聽這些事件。
此日誌記錄驅動程式在 Windows 中註冊的 ETW 提供程式的 GUID 識別符號為:{a3693192-9ed6-46d2-a981-f8226c8363bd}
。客戶端建立一個 ETW 偵聽器並註冊以偵聽來自日誌記錄驅動程式提供程式的事件。提供程式和偵聽器的建立順序無關緊要。客戶端可以在提供程式向系統註冊之前建立其 ETW 偵聽器並開始偵聽來自提供程式的事件。
用法
下面是一個示例,展示瞭如何使用大多數 Windows 安裝中包含的 logman 實用程式來偵聽這些事件:
logman start -ets DockerContainerLogs -p "{a3693192-9ed6-46d2-a981-f8226c8363bd}" 0x0 -o trace.etl
- 透過在 Docker run 命令中新增
--log-driver=etwlogs
,使用 etwlogs 驅動程式執行您的容器,並生成日誌訊息。 logman stop -ets DockerContainerLogs
- 這將生成一個包含事件的 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。 |
source | stdout 或 stderr 。 |
log | 容器的日誌訊息。 |
這是一個事件訊息示例(為便於閱讀已格式化輸出):
container_name: backstabbing_spence,
image_name: windowsservercore,
container_id: f14bb55aa862d7596b03a33251c1be7dbbec8056bbdead1da8ec5ecebbe29731,
image_id: sha256:2f9e19bd998d3565b4f345ac9aaf6e3fc555406239a4fb1b1ba879673713824b,
source: stdout,
log: Hello world!
客戶端可以解析此訊息字串以獲取日誌訊息及其上下文資訊。時間戳也可以在 ETW 事件中獲得。
注意此 ETW 提供程式僅發出訊息字串,而不是專門結構的 ETW 事件。因此,您不必向系統註冊清單檔案來讀取和解釋其 ETW 事件。