3种环境全覆盖:Jaeger分布式追踪系统部署实战指南
Jaeger是CNCF毕业的开源分布式追踪系统,专为云原生环境设计,可帮助开发和运维团队监控微服务架构中的请求流、诊断性能瓶颈和错误。本文将详细介绍在Docker、Kubernetes及云原生环境下部署Jaeger的完整流程,包含环境准备、配置优化和最佳实践,让你快速掌握分布式追踪系统的搭建技巧。
Jaeger架构概览
Jaeger采用微服务架构设计,主要包含以下核心组件:
graph TD
SDK["OpenTelemetry SDK"] --> |HTTP or gRPC| COLLECTOR
COLLECTOR["Jaeger Collector"] --> STORE[Storage]
COLLECTOR --> |gRPC| PLUGIN[Storage Plugin]
COLLECTOR --> |gRPC/sampling| SDK
PLUGIN --> STORE
QUERY[Jaeger Query Service] --> STORE
QUERY --> |gRPC| PLUGIN
UI[Jaeger UI] --> |HTTP| QUERY
subgraph Application Host
subgraph User Application
SDK
end
end
- Collector(收集器):接收追踪数据并进行处理,支持多种存储后端
- Query Service(查询服务):提供API接口供UI查询追踪数据
- UI(用户界面):可视化展示追踪数据和服务依赖关系
- Storage(存储):支持Elasticsearch、Cassandra等多种存储方案
完整架构文档可参考官方README。
1. Docker快速部署
Docker是体验Jaeger最简单的方式,适合开发和测试环境。Jaeger提供了"all-in-one"镜像,将所有组件打包在单个容器中,无需额外配置。
基础部署步骤
docker run \
--rm \
--name jaeger \
-p 4318:4318 \
-p 16686:16686 \
-p 14268:14268 \
jaegertracing/all-in-one:latest
参数说明:
-p 4318:4318:OTLP协议端口,接收应用发送的追踪数据-p 16686:16686:Jaeger UI端口-p 14268:14268:Jaeger客户端直接连接端口
启动后访问 http://localhost:16686 即可打开Jaeger UI。
带示例应用的部署
Jaeger提供了HotROD示例应用,可模拟真实微服务架构并生成追踪数据:
# 下载docker-compose配置
curl -O https://gitcode.com/GitHub_Trending/ja/jaeger/raw/main/examples/hotrod/docker-compose.yml
# 启动Jaeger和HotROD应用
docker compose up
该配置会启动Jaeger后端和HotROD应用,访问 http://localhost:8080 可打开示例应用界面,通过下单流程生成追踪数据,然后在Jaeger UI中查看详细追踪信息。示例应用完整说明见examples/hotrod/README.md。
2. Kubernetes生产部署
对于生产环境,Kubernetes提供了更好的可扩展性和管理能力。Jaeger官方提供了完整的Kubernetes部署方案,支持高可用配置和持久化存储。
使用Helm Chart部署
Jaeger提供官方Helm Chart,简化Kubernetes部署流程:
# 添加Helm仓库
helm repo add jaegertracing https://jaegertracing.github.io/helm-charts
# 安装Jaeger
helm install jaeger jaegertracing/jaeger \
--set provisionDataStore.cassandra=false \
--set storage.type=elasticsearch \
--set elasticsearch.host=elasticsearch-host \
--set elasticsearch.port=9200
完整的Helm配置选项可参考官方文档。
自定义资源部署
对于更复杂的需求,可使用Jaeger Operator和自定义资源(CR)进行部署:
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: jaeger-production
spec:
strategy: production
collector:
replicas: 3
storage:
type: elasticsearch
options:
es:
server-urls: http://elasticsearch:9200
ingress:
enabled: true
hosts:
- jaeger.example.com
Kubernetes部署示例可参考examples/oci目录,包含完整的Ingress配置、TLS证书管理和监控集成方案。
验证部署
部署完成后,通过端口转发访问Jaeger UI:
kubectl port-forward svc/jaeger-query 16686:16686
访问 http://localhost:16686 确认系统正常运行。
3. 云原生环境部署
在AWS、GCP、Azure等云平台部署Jaeger时,可充分利用云服务提升性能和可靠性,如托管Elasticsearch服务、负载均衡和自动扩缩容。
云平台专属配置
以Oracle Cloud为例,使用云平台的负载均衡服务暴露Jaeger UI:
apiVersion: v1
kind: Service
metadata:
name: jaeger-query
spec:
type: LoadBalancer
selector:
app: jaeger-query
ports:
- port: 80
targetPort: 16686
完整的云平台部署方案可参考examples/oci/README.md,包含Ingress配置、TLS证书管理和监控集成。
多区域部署策略
对于跨区域部署,可采用以下架构:
graph TD
Client[应用] --> LB[负载均衡器]
LB --> C1[区域1 Collector]
LB --> C2[区域2 Collector]
C1 --> S3[共享存储]
C2 --> S3
Q1[区域1 Query] --> S3
Q2[区域2 Query] --> S3
UI1[区域1 UI] --> Q1
UI2[区域2 UI] --> Q2
这种架构确保追踪数据集中存储,同时允许跨区域查询,提高系统可用性。
部署验证与示例应用
部署完成后,可使用Jaeger提供的HotROD示例应用验证系统功能。HotROD是一个模拟的 ride-sharing 应用,包含多个微服务,可生成真实的追踪数据。
运行HotROD应用
docker run \
--rm \
--link jaeger \
--env OTEL_EXPORTER_OTLP_ENDPOINT=http://jaeger:4318 \
-p 8080-8083:8080-8083 \
jaegertracing/example-hotrod:latest \
all
访问 http://localhost:8080,通过界面下单测试,然后在Jaeger UI中查看生成的追踪数据。HotROD应用详细使用说明见examples/hotrod/README.md。
查看服务依赖图
在Jaeger UI的"System Architecture"页面,可查看自动生成的服务依赖图,直观了解系统架构和请求流向。
最佳实践与性能优化
存储后端选择
根据规模选择合适的存储后端:
| 存储方案 | 适用场景 | 优势 |
|---|---|---|
| 内存存储 | 开发测试 | 无需额外配置 |
| Elasticsearch | 中小规模生产 | 查询性能好,适合日志和追踪数据 |
| Cassandra | 大规模分布式 | 高可用,写入性能好 |
详细的存储配置可参考docker-compose目录下的各存储方案示例,如docker-compose/elasticsearch和docker-compose/cassandra。
性能调优参数
collector:
max-concurrent-spans: 10000
queue-size: 100000
num-workers: 10
sampling:
initial-sampling-probability: 0.01
target-samples-per-second: 10
采样策略配置可参考cmd/jaeger/sampling-strategies.json,根据业务需求调整采样率。
监控与告警
Jaeger暴露Prometheus指标,可集成Grafana进行监控:
scrape_configs:
- job_name: 'jaeger'
static_configs:
- targets: ['jaeger-collector:14269', 'jaeger-query:16687']
监控配置示例可参考monitoring/jaeger-mixin,包含预定义的告警规则和仪表盘。
总结与展望
本文介绍了Jaeger在三种主流环境下的部署方案:
- Docker:适合快速体验和开发测试
- Kubernetes:适合生产环境,提供高可用和弹性扩展
- 云原生:充分利用云服务提升性能和可靠性
Jaeger v2版本带来了多项改进,包括OpenTelemetry支持增强、存储插件架构和性能优化。未来Jaeger将继续深化与云原生生态的集成,提供更强大的分布式追踪能力。
如需进一步学习,建议参考:
关注项目更新,及时获取新功能和安全补丁。部署过程中遇到问题,可通过GitHub Issues或社区论坛寻求帮助。
如果你觉得本文有帮助,请点赞收藏,关注获取更多分布式系统部署实战指南!
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust099- DDeepSeek-V4-ProDeepSeek-V4-Pro(总参数 1.6 万亿,激活 49B)面向复杂推理和高级编程任务,在代码竞赛、数学推理、Agent 工作流等场景表现优异,性能接近国际前沿闭源模型。Python00
MiMo-V2.5-ProMiMo-V2.5-Pro作为旗舰模型,擅⻓处理复杂Agent任务,单次任务可完成近千次⼯具调⽤与⼗余轮上 下⽂压缩。Python00
GLM-5.1GLM-5.1是智谱迄今最智能的旗舰模型,也是目前全球最强的开源模型。GLM-5.1大大提高了代码能力,在完成长程任务方面提升尤为显著。和此前分钟级交互的模型不同,它能够在一次任务中独立、持续工作超过8小时,期间自主规划、执行、自我进化,最终交付完整的工程级成果。Jinja00
Kimi-K2.6Kimi K2.6 是一款开源的原生多模态智能体模型,在长程编码、编码驱动设计、主动自主执行以及群体任务编排等实用能力方面实现了显著提升。Python00
MiniMax-M2.7MiniMax-M2.7 是我们首个深度参与自身进化过程的模型。M2.7 具备构建复杂智能体应用框架的能力,能够借助智能体团队、复杂技能以及动态工具搜索,完成高度精细的生产力任务。Python00