首页
/ 3种环境全覆盖:Jaeger分布式追踪系统部署实战指南

3种环境全覆盖:Jaeger分布式追踪系统部署实战指南

2026-02-04 05:17:43作者:董宙帆

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/elasticsearchdocker-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或社区论坛寻求帮助。

如果你觉得本文有帮助,请点赞收藏,关注获取更多分布式系统部署实战指南!

登录后查看全文
热门项目推荐
相关项目推荐