2. Jaeger 架构深度解析:组件、数据流与部署模式

在生产环境中落地分布式追踪,首先需要理解 Jaeger 的架构设计。本章将深入拆解 Jaeger 的四大核心组件(Agent、Collector、Query、UI),分析端到端的数据流,并对比 All-in-one 与 Production 两种部署模式的适用场景与配置要点。

2.1 核心组件与职责

Jaeger 遵循“客户端-代理-收集器-存储-查询”的经典链路。每个组件职责清晰,可独立扩展。

组件 角色 关键职责 通信协议
Jaeger Client 应用内嵌库 创建 Span、注入/提取上下文、采样决策 Thrift / gRPC
Jaeger Agent 本地守护进程 接收 Client 数据、批处理、转发至 Collector UDP (Thrift) / HTTP
Jaeger Collector 后端服务 验证、清洗、存储 Span;支持采样策略下发 gRPC / HTTP
Jaeger Query API 服务 提供查询 API、聚合 Trace、服务依赖图 HTTP / gRPC
Jaeger UI Web 前端 可视化 Trace 搜索、Span 详情、火焰图 HTTP (Query API)
Storage Backend 持久化层 支持 Cassandra、Elasticsearch、Kafka + 后端 —
架构要点: Agent 作为“边车”进程,通过 UDP 接收 Client 数据,避免阻塞应用主线程。Collector 是无状态服务,可通过 Kafka 做缓冲层,应对流量尖峰。

2.2 端到端数据流

一次完整的 Trace 从应用发起请求开始,到 UI 展示结束。下图展示了标准生产环境的数据流转路径。

Jaeger 生产环境数据流 Jaeger 生产环境数据流 应用服务 (Client SDK) Jaeger Agent (UDP 批处理) Collector (验证/清洗) Kafka (缓冲/解耦) Storage (ES/Cassandra) Query + UI (API / 可视化) 数据流说明: ① Client → Agent (UDP) → Collector (gRPC) → Kafka → Storage → Query → UI ② Collector 可直接写入 Storage;Kafka 为可选缓冲层,用于削峰填谷。
性能关键路径: Agent → Collector 段使用 gRPC 流式传输,减少连接开销。如果 Collector 成为瓶颈,优先扩容 Collector 实例或引入 Kafka 缓冲。

2.3 部署模式对比

Jaeger 提供两种官方部署模式:All-in-one 用于开发测试,Production 用于生产环境。下表从多个维度进行对比。

维度 All-in-one Production
组件形态 单进程包含 Agent + Collector + Query + UI + 内存存储 各组件独立部署,可水平扩展
存储 内存 (Badger) / 临时文件 Cassandra / Elasticsearch / Kafka + 后端
持久化 重启丢失 持久化存储,支持长期查询
采样管理 静态配置 动态采样策略,支持远程配置
高可用 单点故障 多副本 + 负载均衡
适用场景 本地开发、功能验证、Demo 生产环境、大规模集群、SLA 保障
启动复杂度 一条命令 需部署多个服务 + 存储 + 配置
避坑提醒: 切勿在生产环境使用 All-in-one 模式。内存存储无法持久化,且单进程无法承载高吞吐。生产环境至少需要 Collector + Query + 外部存储三件套。

2.4 生产部署架构图

下面展示一个典型的生产部署架构,包含多副本 Collector、Kafka 缓冲层、Elasticsearch 集群以及负载均衡器。

Jaeger 生产部署架构 Jaeger 生产部署架构 负载均衡器 (LB) Agent 副本 1 Agent 副本 N Collector 1 Collector N Kafka 集群 Elasticsearch Query 服务 部署要点: • Agent 以 DaemonSet 或 Sidecar 模式部署在每台主机上,与应用同生命周期。 • Collector 无状态,通过 LB 接收 Agent 数据;Kafka 作为缓冲层,防止存储写入失败导致数据丢失。

2.5 组件通信协议与端口

在生产环境中配置防火墙或 Service Mesh 时,需要明确各组件使用的端口与协议。

通信方向 协议 默认端口 说明
Client → Agent UDP (Thrift) 6831 / 6832 批量发送 Span,低延迟
Client → Collector gRPC / HTTP 14250 / 14268 直连模式,跳过 Agent
Agent → Collector gRPC 14250 推荐生产使用 gRPC 流
Collector → Storage HTTP / gRPC 9200 (ES) / 9042 (Cassandra) 取决于后端存储
Query → Storage HTTP / gRPC 同上 读取 Trace 数据
UI → Query HTTP 16686 浏览器访问端口
性能调优建议: 如果 Agent 与 Collector 之间网络延迟较高,可增大 Agent 的批处理大小(--jaeger.agent.batch-size)和发送间隔(--jaeger.agent.batch-timeout),减少网络往返次数。

2.6 本章小结

Jaeger 的架构设计体现了分布式系统组件化的最佳实践:

  • Agent 作为轻量级代理,将采样与传输逻辑从应用中剥离。
  • Collector 无状态设计,支持水平扩展和缓冲层集成。
  • Query + UI 提供标准 API 和可视化界面,便于问题定位。
  • All-in-one 适合开发调试,Production 模式必须使用外部存储和组件分离。

掌握这些组件及其数据流,是后续进行采样策略配置、性能调优和 SLI 口径设计的基础。