2. Jaeger 基础回顾:架构、核心概念与采样策略
在深入配置环境一致性发布健康口径之前,必须先夯实 Jaeger 的基础知识。本章将系统回顾 Jaeger 的四大核心组件(Agent、Collector、Query、UI)、分布式追踪的两个核心抽象(Span 与 Trace),以及生产环境中至关重要的采样策略。这些概念是后续所有链路数据治理与健康评估的基石。
2.1 Jaeger 整体架构
Jaeger 采用模块化、可水平扩展的架构设计,主要分为四个核心组件。数据流从应用程序埋点开始,经过 Agent 缓冲上报,由 Collector 接收、校验、存储,最终通过 Query 服务对外提供检索能力,UI 层负责可视化呈现。
架构要点: Jaeger 的 Agent 与应用程序同进程部署(Sidecar 模式),Collector 无状态可水平扩展,存储后端支持 Cassandra、Elasticsearch 和 Badger。
2.2 Span 与 Trace 核心概念
分布式追踪的两个核心抽象是 Span(跨度)和 Trace(追踪)。理解这两个概念是解读链路数据的起点。
| 概念 | 定义 | 关键属性 | 类比 |
|---|---|---|---|
| Span | 分布式系统中一个逻辑工作单元,代表一次操作(如 RPC 调用、数据库查询)。 | SpanID、ParentSpanID、OperationName、StartTime、Duration、Tags、Logs | 函数调用栈中的一帧 |
| Trace | 一个完整请求在分布式系统中的全路径,由一组具有相同 TraceID 的 Span 组成。 | TraceID、RootSpan、Span 树结构 | 一次完整的 HTTP 请求链路 |
| SpanContext | 跨进程传递的追踪上下文,包含 TraceID、SpanID、Baggage 等。 | TraceID、SpanID、采样标记、Baggage Items | HTTP 请求头中的追踪凭证 |
关键理解: Trace 是由多个 Span 组成的 有向无环图(DAG),根 Span 代表入口请求,子 Span 代表内部调用。Span 之间的父子关系通过 ParentSpanID 建立。
2.3 采样策略
在生产环境中,全量采集所有请求的链路数据会带来巨大的存储和网络开销。采样策略是 Jaeger 生产部署的必备配置。Jaeger 支持三种核心采样模式:
- 头采样(Head-based Sampling): 在请求入口处决定是否采样,决策结果随 SpanContext 传递。简单但无法感知请求内部复杂度。
- 尾采样(Tail-based Sampling): 在请求完成后,根据完整 Trace 的特征(如延迟、错误码)决定是否保留。更灵活但需要缓冲和延迟决策。
- 自适应采样(Adaptive Sampling): 根据流量动态调整采样率,低流量时全采,高流量时降采。
| 采样策略 | 配置方式 | 适用场景 | 优缺点 |
|---|---|---|---|
| 固定概率采样 | sampler.type=const, sampler.param=0.1 | 流量稳定、对采样率有明确预期的场景 | 简单可控,但无法区分重要请求 |
| 速率限制采样 | sampler.type=ratelimiting, sampler.param=10 | 需要控制每秒最大采样量的场景 | 防止突发流量导致存储过载,但可能丢失低频重要请求 |
| 远程采样 | sampler.type=remote, 从 Collector 动态获取策略 | 需要动态调整采样率、灰度发布期间 | 灵活可管理,但依赖 Collector 可用性 |
| 尾采样 | 通过 Jaeger 插件或 OpenTelemetry Collector 实现 | 需要保留高延迟、错误请求的完整链路 | 精准保留有价值链路,但增加延迟和内存开销 |
生产建议: 在配置环境一致性发布场景中,推荐使用 远程采样 + 自适应采样 组合。远程采样允许运维中心统一调整采样策略,自适应采样确保低流量环境(如灰度金丝雀发布)下全量采集,高流量环境(如全量发布)下按比例降采,从而在保障数据完整性的同时控制成本。
2.4 采样策略配置示例
以下是一个典型的 Jaeger Client 采样配置(以 Java 为例),通过环境变量或配置文件注入:
# 固定概率采样:10% 的请求被采样
JAEGER_SAMPLER_TYPE=const
JAEGER_SAMPLER_PARAM=0.1
# 速率限制采样:每秒最多采样 5 个请求
JAEGER_SAMPLER_TYPE=ratelimiting
JAEGER_SAMPLER_PARAM=5
# 远程采样:从 Collector 的 sampling 端点获取策略
JAEGER_SAMPLER_TYPE=remote
JAEGER_SAMPLER_MANAGER_HOST_PORT=jaeger-collector:5778
JAEGER_SAMPLER_PARAM=0.001 # 初始默认采样率
关键参数说明: 远程采样模式下,
JAEGER_SAMPLER_PARAM 仅作为客户端启动时的初始值,后续采样率由 Collector 端的采样策略管理服务动态下发。生产环境中建议将初始值设为一个较低的概率(如 0.001),避免启动瞬间产生大量采样数据。