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

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 事件中也可用。

OpenMagic API

Need more than content? Move into the product flow.

If you are here for model access, pricing, developer docs, or the future API console, the dedicated product path now lives on api.openmagic.ai.