互联网技术 / 互联网资讯 · 2024年1月19日 0

Docker教程:使用ETW日志驱动的云计算核心技术

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

2.通过添加–log-dRiveR=etwlogs到 DockeR 运行命令,使用 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。

souRce                   stdout或stdeRR。

log                        容器日志消息。

这是一个示例事件消息(输出格式为可读性):

contAIneR_naMe: backstabBing_spence,

image_naMe: windowSSeRveRcoRe,

contAIneR_id: f14bb55aa862d7596b03a33251c1be7dbbec8056bbdead1da8ec5ecebbe29731,

image_id: sha256:2f9e19bd998d3565b4f345ac9aaf6e3fc555406239a4fb1b1ba879673713824b,

souRce: stdout,

log: Hello woRld!

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