©
本文档使用
php.cn手册 发布
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
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!
客户端可以解析此消息字符串以获取日志消息以及其环境信息。请注意,时间戳在 ETW 事件中也可用。
注意:此 ETW 提供程序仅发出消息字符串,而不是特定结构的 ETW 事件。因此,不需要向系统注册清单文件来读取和解释其 ETW 事件。