日志
**日志(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 中的日志的更多信息,请参阅日志规范。