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