OpenTelemetry 是一个观测性框架和工具包,旨在创建和管理遥测数据,如追踪、指标和日志。简称 OTel, 是 CNCF ( Cloud Native Computing Foundation,云原生计算基金会,一个开源软件基金会,致力于云原生技术的普及和可持续发展) 的一个可观测性项目。
OpenTelemetry 可以同时兼容 OpenTracing 和 OpenCensus,支持各种语言和后端,它可以在不改变现有工具的情况下捕获遥测数据并将其传输到后端。
概念 #
Traces #
Trace(跟踪)是分布式链路追踪中的基本概念,它代表了一个请求或操作的完整生命周期。Trace 由多个 span 组成,每个 span 代表一个具体的操作或工作单元。
上下文传播 #
上下文传播是实现分布式追踪的核心概念。有了上下文传播,可以将 spans 相互关联并组装成一个 Trace,而不管 spans 是在哪里生成的。我们通过两个子概念来定义上下文传播:Context 和 Propagation。
Context(上下文) 是一个对象,它包含了发送和接收服务之间关联一个 span 所需的信息,并将其与整个 Trace 关联起来。例如,如果服务 A 调用服务 B,则在上下文中具有标识为 ID 的服务 A 的 span 将用作服务 B 中下一个创建的 span 的父级 span。上下文中的 Trace ID 也将用于服务 B 中下一个创建的 span,表示该 span 是与服务 A 的 span 相同追踪的一部分。
Propagation(传播) 是在服务和进程之间传递上下文的机制。它将上下文对象序列化或反序列化,并提供相关的追踪信息,以将其从一个服务传播到另一个服务中。传播通常由仪表化库处理,对用户来说是透明的,但是如果您需要手动传播上下文,则可以使用传播 API。
OpenTelemetry 支持几种不同的上下文格式。在 OpenTelemetry 追踪中使用的默认格式称为 W3C TraceContext。每个上下文对象都存储在一个 span 中。
Spans #
Span(跨度)是分布式链路中的基本构建块,它代表了一个具体的操作或工作单元。每个 span 都记录了请求中的特定动作,帮助我们了解操作执行过程中发生的详细情况。