3. Jaeger 基础概念:架构、核心组件与数据模型
在分布式系统排障中,Jaeger 是业界标准的分布式追踪系统。理解其架构、组件与数据模型,是后续利用 Jaeger 联动排查配置发布环境一致性偏差的前提。本节从三个维度拆解 Jaeger 的核心设计。
3.1 Jaeger 整体架构
Jaeger 采用 端到端异步收集 架构,数据流从应用进程出发,经过 Agent 缓冲、Collector 处理、存储持久化,最终在 Query/UI 呈现。整体分为 数据面(产生与收集)和 控制面(存储与查询)。
架构要点:Agent 采用 UDP 协议与应用程序通信,避免阻塞业务线程;Collector 无状态设计使得在配置发布高峰期可以快速扩容,降低数据丢失风险。
3.2 核心组件详解
Jaeger 由五个核心组件构成,每个组件承担明确的职责。下表从部署形态、通信协议、关键配置三个维度进行对比。
| 组件 | 部署形态 | 通信协议 | 关键配置项 |
|---|---|---|---|
| Jaeger Client | 嵌入应用进程(库) | 内部 API | 采样率、服务名、Tags |
| Jaeger Agent | Sidecar / DaemonSet | UDP (Thrift) | 端口、Collector 端点、队列大小 |
| Jaeger Collector | 无状态服务集群 | gRPC / HTTP | 存储后端地址、最大消息大小 |
| Jaeger Query | 无状态服务 | gRPC / HTTP | 存储后端地址、端口 |
| Jaeger UI | Web 应用(静态资源) | HTTP (Browser) | Query 服务地址 |
3.3 数据模型:Trace、Span 与 SpanContext
Jaeger 的数据模型基于 Dapper 设计,核心概念包括 Trace、Span 和 SpanContext。理解这三者的关系是进行分布式追踪分析的基础。
- Trace(追踪):一个完整的请求链路,由多个 Span 组成,通过 TraceID 唯一标识。
- Span(跨度):链路中的最小工作单元,记录一个操作(如 RPC 调用、数据库查询)的开始、结束时间、状态和标签。
- SpanContext(跨度上下文):跨进程传递的元数据,包含 TraceID、SpanID、Baggage 等,用于在分布式环境中串联上下游。
排查配置偏差的关键点:在配置发布场景中,通过 TraceID 可以串联同一请求在不同服务实例上的 Span。如果某个 Span 的 Tags 中携带了
config.version 或 env.id,就能快速定位到哪个实例使用了错误的配置版本。
3.4 数据模型核心字段速查
下表列出 Span 中与配置排查最相关的字段,方便后续在 Jaeger UI 中筛选和定位。
| 字段 | 类型 | 说明 | 配置排查用途 |
|---|---|---|---|
traceID |
string | 全局唯一追踪 ID | 关联同一请求的所有 Span |
spanID |
string | 当前 Span 唯一 ID | 定位具体操作 |
operationName |
string | 操作名称(如 HTTP 路由) | 识别配置加载入口 |
tags |
map | 键值对标签 | 注入配置版本号、环境标识 |
logs |
list | 事件日志(时间戳 + 字段) | 记录配置加载失败事件 |
process.serviceName |
string | 服务名称 | 区分不同微服务 |
常见误区:不要将 TraceID 与 SpanID 混淆。TraceID 用于跨服务串联,SpanID 用于服务内定位。在配置发布一致性排查中,应优先关注
tags 字段中是否携带了自定义的配置版本标签,如果没有,需要在客户端代码中主动注入。