日志

**日志(Log)**是一条带有时间戳的文本记录,可以是结构化(推荐)或非结构化的,带有元数据。在所有遥测信号中,日志具有最大的遗留程度。大多数编程语言都内置了日志功能或使用广泛的已知日志库。尽管日志是一个独立的数据源,但它们也可以附加到 spans 上。在 OpenTelemetry 中,任何不属于分布式追踪或度量的数据都被视为日志。例如,_事件(Events)_是一种特定类型的日志。日志通常包含详细的调试/诊断信息,例如操作的输入、操作的结果以及与该操作有关的任何支持性元数据。

对于追踪和度量,OpenTelemetry 采用了全新的设计方法,规定了新的 API,并在多种语言的 SDK 中提供了完整的实现。

OpenTelemetry 在日志方面的方法有所不同。由于现有的日志解决方案在语言和操作生态系统中得到广泛应用,OpenTelemetry 充当了将这些日志与跟踪和度量信号以及其他 OpenTelemetry 组件连接起来的"桥梁"。事实上,日志的 API 因此被称为"日志桥接 API"。

日志规范提供了关于这一理念的更多细节。

为了理解在 OpenTelemetry 中如何使用日志,让我们查看一个在代码中进行仪表化的组件列表。

日志附加器/桥接器

作为应用程序开发人员,你不应直接调用日志桥接 API,而是使用你首选的日志库并配置它使用能够将日志发送到 OpenTelemetry LogRecordExporter 的日志附加器(或日志桥接器)。

OpenTelemetry 的语言 SDK 提供了这些功能。

日志提供器

日志桥接 API的一部分,只有当你是日志库的作者时才会使用。

日志提供器(有时称为LoggerProvider)是Logger的工厂。在大多数情况下,日志提供器初始化一次,并与应用程序的生命周期相匹配。日志提供器的初始化还包括资源(Resource)和导出器(Exporter)的初始化。

日志记录器

日志桥接 API的一部分,只有当你是日志库的作者时才会使用。

日志记录器创建日志记录。日志记录器是从日志提供器创建的。

日志记录导出器

日志记录导出器将日志记录发送给消费者。该消费者可以是用于调试和开发时的标准输出,也可以是 OpenTelemetry 收集器或你选择的任何开源或供应商后端。

日志记录

日志记录表示事件的记录。在 OpenTelemetry 中,日志记录包含两种类型的字段:

  • 具有特定类型和含义的命名顶层字段
  • 任意值和类型的资源和属性字段

顶层字段包括:

字段名 描述
时间戳 事件发生的时间。
观察到的时间戳 观察到事件的时间。
追踪 ID 请求追踪 ID。
span ID 请求 span ID。
追踪标志 W3C 追踪标志。
严重性文本 严重性文本(也称为日志级别)。
严重性数字 严重性的数值。
主体 日志记录的主体。
资源 描述日志的来源。
仪表化范围 描述发出日志的范围。
属性 有关事件的附加信息。

有关日志记录和日志字段的更多详情,请参阅日志数据模型(Logs Data Model)

语言支持

在 OpenTelemetry 规范中,日志是一个稳定的信号。对于 Logs API & SDK 的各个语言具体实现,情况如下:

Language Logs
C++ Stable
C#/.NET Stable
Erlang/Elixir Experimental
Go Not yet implemented
Java Stable
JavaScript Development
PHP Stable
Python Experimental
Ruby Not yet implemented
Rust Alpha
Swift In development

规范

要了解有关 OpenTelemetry 中的日志的更多信息,请参阅日志规范

最后修改 December 10, 2023: translate (a4350d6e)