ETW 日志记录驱动程序
目录
Windows 事件跟踪 (ETW) 日志记录驱动程序将容器日志作为 ETW 事件转发。 ETW 代表 Windows 中的事件跟踪,是通用框架 用于跟踪 Windows 中的应用程序。每个 ETW 事件都包含一条消息 替换为日志及其上下文信息。然后,客户端可以创建 一个 ETW 侦听器来侦听这些事件。
此日志记录驱动程序向 Windows 注册的 ETW 提供程序具有
GUID 标识符为: 。客户端创建一个
ETW 侦听器并注册以侦听来自日志记录驱动程序提供程序的事件。
提供程序和侦听器的创建顺序并不重要。
客户端可以创建其 ETW 侦听器并开始侦听来自提供程序的事件。
在提供程序注册到系统之前。{a3693192-9ed6-46d2-a981-f8226c8363bd}
用法
以下是如何使用 logman 实用程序侦听这些事件的示例 包含在大多数 Windows 安装中:
logman start -ets DockerContainerLogs -p {a3693192-9ed6-46d2-a981-f8226c8363bd} 0 0 -o trace.etl
- 通过 添加到 Docker run 命令,使用 etwlogs 驱动程序运行容器,并生成日志消息。
--log-driver=etwlogs
logman stop -ets DockerContainerLogs
- 这将生成一个包含事件的 etl 文件。转换此
file 转换为人类可读的形式来运行: .
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 事件。