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