?
本文檔使用 php中文網手冊 發(fā)布
ETW 日志記錄驅動程序將容器日志轉發(fā)為 ETW 事件。ETW 代表 Windows 中的事件跟蹤,是用于在 Windows 中跟蹤應用程序的通用框架。每個 ETW 事件都包含一條包含日志及其環(huán)境信息的消息。然后客戶端可以創(chuàng)建一個 ETW 偵聽器來偵聽這些事件。
此日志記錄驅動程序在 Windows 中注冊的 ETW 提供程序具有以下 GUID 標識符:{a3693192-9ed6-46d2-a981-f8226c8363bd}
。客戶端創(chuàng)建一個 ETW 偵聽器并注冊以偵聽來自日志驅動程序提供者的事件。提供者和監(jiān)聽者的創(chuàng)建順序無關緊要??蛻艨梢栽谙蛳到y(tǒng)注冊提供商之前創(chuàng)建自己的 ETW 監(jiān)聽器,并開始監(jiān)聽來自提供商的事件。
以下是如何使用大多數 Windows 安裝中包含的 logman 實用程序來監(jiān)聽這些事件的示例:
1. logman start -ets DockerContainerLogs -p {a3693192-9ed6-46d2-a981-f8226c8363bd} 0 0 -o trace.etl
1. 使用 etwlogs 驅動程序運行您的容器,通過添加--log-driver=etwlogs
到 Docker 運行命令并生成日志消息。
2. logman stop -ets DockerContainerLogs
2. 這將生成一個包含事件的 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_nameE | 容器圖像的名稱。 |
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!
客戶端可以解析此消息字符串以獲取日志消息以及其環(huán)境信息。請注意,時間戳在 ETW 事件中也可用。
注意:此 ETW 提供程序僅發(fā)出消息字符串,而不是特定結構的 ETW 事件。因此,不需要向系統(tǒng)注冊清單文件來讀取和解釋其 ETW 事件。