Jaeger
外观
Jaeger 是一款开源的分布式追踪系统,由 Uber 公司开发并贡献给 云原生计算基金会 (CNCF)。它主要用于监控和排查复杂的微服务架构中的性能问题,通过收集、存储和分析请求在分布式系统中的流转路径和时间消耗。
概述[编辑 | 编辑源代码]
Jaeger 的名称来源于德语中的"猎人",寓意其能够帮助开发者"追踪"分布式系统中的请求流转。该系统实现了 OpenTracing 标准,并与 OpenTelemetry 项目兼容,是现代可观测性技术栈中的重要组成部分。
主要功能包括:
- 分布式上下文传播
- 事务监控
- 根因分析
- 服务依赖分析
- 性能优化
架构组成[编辑 | 编辑源代码]
Jaeger 由多个组件构成,采用模块化设计:
核心组件[编辑 | 编辑源代码]
- Jaeger Client - 支持多种语言的客户端库
- Jaeger Agent - 接收客户端发送的跨度数据
- Jaeger Collector - 接收并处理来自 Agent 的数据
- Storage Backend - 支持 Elasticsearch、Cassandra 等存储
- Jaeger Query - 提供查询界面和 API
- Jaeger UI - 基于 React 的可视化界面
部署架构[编辑 | 编辑源代码]
核心概念[编辑 | 编辑源代码]
追踪 (Trace)[编辑 | 编辑源代码]
表示一个完整的请求流程,由多个Span组成。例如,一个 HTTP 请求从进入系统到返回响应所经历的所有服务调用。
跨度 (Span)[编辑 | 编辑源代码]
代表一个操作单元,包含:
- 操作名称
- 开始时间戳
- 持续时间
- 标签 (Tags)
- 日志 (Logs)
- 引用关系 (References)
上下文传播[编辑 | 编辑源代码]
Jaeger 使用以下方式传播追踪上下文:
- HTTP 头 (如 `uber-trace-id`)
- gRPC 元数据
- 消息队列属性
安装与配置[编辑 | 编辑源代码]
使用 Docker 快速启动[编辑 | 编辑源代码]
docker run -d --name jaeger \
-e COLLECTOR_ZIPKIN_HTTP_PORT=9411 \
-p 5775:5775/udp \
-p 6831:6831/udp \
-p 6832:6832/udp \
-p 5778:5778 \
-p 16686:16686 \
-p 14268:14268 \
-p 9411:9411 \
jaegertracing/all-in-one:1.30
生产环境部署[编辑 | 编辑源代码]
推荐使用 Kubernetes 部署各组件分离的架构,存储后端建议使用 Elasticsearch 集群。
代码集成示例[编辑 | 编辑源代码]
Go 语言示例[编辑 | 编辑源代码]
package main
import (
"context"
"log"
"time"
"github.com/uber/jaeger-client-go"
"github.com/uber/jaeger-client-go/config"
)
func main() {
cfg := config.Configuration{
ServiceName: "my-service",
Sampler: &config.SamplerConfig{
Type: jaeger.SamplerTypeConst,
Param: 1,
},
Reporter: &config.ReporterConfig{
LogSpans: true,
LocalAgentHostPort: "localhost:6831",
},
}
tracer, closer, err := cfg.NewTracer()
if err != nil {
log.Fatal(err)
}
defer closer.Close()
// 创建根span
parentSpan := tracer.StartSpan("parent-operation")
defer parentSpan.Finish()
// 创建子span
childSpan := tracer.StartSpan("child-operation", jaeger.ChildOf(parentSpan.Context()))
time.Sleep(100 * time.Millisecond)
childSpan.Finish()
}
可视化分析[编辑 | 编辑源代码]
Jaeger UI 提供以下关键功能:
- 服务依赖图
- 追踪时间线
- 错误标记
- 延迟热图
- 比较分析工具
与其他系统的集成[编辑 | 编辑源代码]
- 与 Prometheus 集成进行指标监控
- 与 Grafana 集成实现统一仪表盘
- 与 Kubernetes 集成进行服务发现
- 与 Istio 集成实现服务网格追踪
性能调优[编辑 | 编辑源代码]
采样策略[编辑 | 编辑源代码]
Jaeger 支持多种采样策略以平衡性能和开销:
- 恒定采样 (Const)
- 概率采样 (Probabilistic)
- 速率限制采样 (Rate Limiting)
- 自适应采样 (Adaptive)
存储优化[编辑 | 编辑源代码]
对于高流量系统,建议:
- 使用 Elasticsearch 索引优化
- 设置合理的保留策略
- 使用 Cassandra 的 TTL 功能
实际应用案例[编辑 | 编辑源代码]
电商系统追踪[编辑 | 编辑源代码]
通过 Jaeger 可以: 1. 分析下单流程的瓶颈 2. 发现跨服务调用的异常延迟 3. 识别不必要的高频调用
社区与生态[编辑 | 编辑源代码]
Jaeger 拥有活跃的开源社区,主要资源包括:
- 官方文档
- GitHub 仓库
- CNCF Slack 频道
- 定期社区会议