核心概念
Telemetry
Telemetry 指系统及其行为发出的数据,包括 traces、metrics 和 logs。
OpenTelemetry
OpenTelemetry 是一个可观测性框架和工具包,旨在创建和管理诸如traces、metrics和logs等 telemetry 数据。重要的是,OpenTelemetry 是供应商无关的,这意味着它可以与各种可观测性后端协同工作,包括开源工具如Jaeger和Prometheus,以及商业产品。
Span
Span 是分布式追踪的基本构建块,表示一个具体的操作或工作单元。每个 span 记录请求中的具体动作,帮助我们了解操作执行过程中发生的细节。
一个 span 包含名称、时间相关数据、结构化日志消息以及其他元数据(attributes),这些共同描绘了操作的完整图景。
Trace
Trace 记录请求(无论是来自原生应用还是终端用户)在多服务架构(如微服务和无服务器应用)中的传播路径。
一个 trace 由一个或多个 spans 组成。第一个 span 被称为根 span,代表请求从开始到结束的整个生命周期。根 span 之下的子 spans 提供了关于请求过程(或构成请求的各个步骤)的更详细上下文信息。
没有 traces,识别分布式系统中性能问题的根本原因将非常困难。traces 通过拆解请求在系统中的流动,使调试和理解分布式系统变得更加容易。
Instrumentation
为了实现可观测性,系统需要进行Instrumentation:即系统组件代码必须发出traces、metrics和logs。
使用 OpenTelemetry,你可以通过两种主要方式对代码进行 instrumentation:
基于代码的解决方案能够从应用内部提供更深入和更丰富的 telemetry 数据。你可以使用 OpenTelemetry API 在应用中生成 telemetry 数据,这是对零代码 instrumentation 解决方案生成的 telemetry 数据的重要补充。
零代码 instrumentation 解决方案非常适合快速入门或当你无法修改需要采集 telemetry 数据的应用时使用。它们可以通过你使用的库或运行时环境提供丰富的 telemetry 数据。另一种理解方式是,它们提供关于应用边界(Edges)上发生事件的信息。
这两种解决方案可以同时使用。
OpenTelemetry Collector
OpenTelemetry Collector 是一个供应商无关的智能体,能够接收、处理和导出 telemetry 数据。它支持接收多种格式的 telemetry 数据(如 OTLP、Jaeger、Prometheus 以及许多商业/专有工具),并将数据发送到一个或多个后端。同时,它还支持在导出前对 telemetry 数据进行处理和过滤。
更多信息请参见 Collector。
Jaeger
Jaeger 是一个开源的分布式追踪系统。它旨在监控和诊断基于微服务架构的复杂分布式系统,帮助开发者可视化请求 traces、分析性能瓶颈和排查异常。Jaeger 兼容 OpenTracing 标准(现为 OpenTelemetry 的一部分),支持多种编程语言和存储后端,是云原生领域的重要可观测性工具。