ETW 日志驱动程序

目录

Windows 事件跟踪 (ETW) 日志记录驱动程序将容器日志作为 ETW 事件转发。ETW 是 Event Tracing in 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}" 0x0 -o trace.etl
  2. 通过在 Docker run 命令中添加 --log-driver=etwlogs,使用 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。
sourcestdoutstderr
log容器的日志消息。

这是一个事件消息示例(为便于阅读已格式化输出):

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

客户端可以解析此消息字符串以获取日志消息及其上下文信息。时间戳也可以在 ETW 事件中获得。

注意

此 ETW 提供程序仅发出消息字符串,而不是专门结构的 ETW 事件。因此,您不必向系统注册清单文件来读取和解释其 ETW 事件。

© . This site is unofficial and not affiliated with Kubernetes or Docker Inc.