搬瓦工部署 Jaeger 分布式追踪系统教程

Jaeger 是由 Uber 开发并捐赠给 CNCF 的分布式追踪系统,已成为 CNCF 毕业项目。它用于监控和排查微服务架构中的事务链路,帮助开发者发现性能瓶颈、分析服务依赖关系和定位故障根因。Jaeger 提供了直观的 Web UI 来展示追踪数据,是生产环境中最常用的追踪系统之一。本文将介绍如何在搬瓦工 VPS 上部署 Jaeger。部署前请确保已安装 Docker 和 Docker Compose

一、Jaeger 功能特性

  • 追踪可视化:瀑布图展示请求在各服务间的流转过程。
  • 服务依赖图:自动生成服务间的调用关系拓扑图。
  • 性能分析:识别耗时较长的 Span,定位性能瓶颈。
  • 追踪对比:对比两条追踪链路的差异。
  • OpenTelemetry 兼容:原生支持 OTLP 协议接入。
  • 多种存储后端:支持 Elasticsearch、Cassandra、Kafka 等。

二、系统要求

  • 操作系统:Ubuntu 20.04+ 或 Debian 11+。
  • 内存:All-in-One 模式至少 512MB,生产环境建议 2GB+。
  • 磁盘:至少 5GB 可用空间。
  • Docker:已安装 Docker 和 Docker Compose。

选购搬瓦工 VPS 请参考 全部方案,购买时使用优惠码 NODESEEK2026 可享 6.77% 折扣,购买入口:bwh81.net

三、快速部署(All-in-One 模式)

All-in-One 模式将所有组件打包在一个容器中,使用内存存储,适合开发和测试:

mkdir -p /opt/jaeger && cd /opt/jaeger

cat > /opt/jaeger/docker-compose.yml <<'EOF'
version: '3.8'

services:
  jaeger:
    image: jaegertracing/all-in-one:latest
    restart: always
    ports:
      - "16686:16686"  # Web UI
      - "4317:4317"    # OTLP gRPC
      - "4318:4318"    # OTLP HTTP
      - "14268:14268"  # Jaeger HTTP Thrift
      - "14250:14250"  # Jaeger gRPC
      - "6831:6831/udp" # Jaeger Compact Thrift
    environment:
      COLLECTOR_OTLP_ENABLED: "true"
      SPAN_STORAGE_TYPE: badger
      BADGER_EPHEMERAL: "false"
      BADGER_DIRECTORY_VALUE: /badger/data
      BADGER_DIRECTORY_KEY: /badger/key
    volumes:
      - jaeger_data:/badger

volumes:
  jaeger_data:
EOF

四、启动服务

cd /opt/jaeger
docker compose up -d

访问 http://your_server_ip:16686 进入 Jaeger Web UI。

五、生产环境部署(Elasticsearch 后端)

cat > /opt/jaeger/docker-compose-prod.yml <<'EOF'
version: '3.8'

services:
  elasticsearch:
    image: elasticsearch:8.11.0
    restart: always
    environment:
      - discovery.type=single-node
      - xpack.security.enabled=false
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    volumes:
      - es_data:/usr/share/elasticsearch/data

  jaeger-collector:
    image: jaegertracing/jaeger-collector:latest
    restart: always
    ports:
      - "4317:4317"
      - "4318:4318"
      - "14268:14268"
      - "14250:14250"
    environment:
      SPAN_STORAGE_TYPE: elasticsearch
      ES_SERVER_URLS: http://elasticsearch:9200
      COLLECTOR_OTLP_ENABLED: "true"
    depends_on:
      - elasticsearch

  jaeger-query:
    image: jaegertracing/jaeger-query:latest
    restart: always
    ports:
      - "16686:16686"
    environment:
      SPAN_STORAGE_TYPE: elasticsearch
      ES_SERVER_URLS: http://elasticsearch:9200
    depends_on:
      - elasticsearch

volumes:
  es_data:
EOF

六、应用接入示例(Python)

# pip install opentelemetry-api opentelemetry-sdk opentelemetry-exporter-otlp

from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk.resources import Resource

resource = Resource.create({"service.name": "my-python-app"})
provider = TracerProvider(resource=resource)

exporter = OTLPSpanExporter(endpoint="http://jaeger-host:4317", insecure=True)
provider.add_span_processor(BatchSpanProcessor(exporter))
trace.set_tracer_provider(provider)

tracer = trace.get_tracer(__name__)

with tracer.start_as_current_span("main-operation") as span:
    span.set_attribute("user.id", "12345")
    with tracer.start_as_current_span("sub-operation"):
        pass  # 业务逻辑

七、配置反向代理

cat > /etc/nginx/sites-available/jaeger <<'EOF'
server {
    listen 80;
    server_name your_domain.com;

    location / {
        proxy_pass http://127.0.0.1:16686;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
EOF

ln -s /etc/nginx/sites-available/jaeger /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx
certbot --nginx -d your_domain.com

八、常见问题

追踪数据未出现

确认 Collector 端口可访问,检查应用端的 Exporter 配置是否指向正确地址。

Elasticsearch 内存不足

减小 ES_JAVA_OPTS 参数,或配置索引的自动清理策略以控制数据量。

总结

Jaeger 是功能最完整的开源分布式追踪系统,Web UI 直观且功能丰富。如果你的团队已经在使用 Grafana,可以考虑更轻量的 Grafana Tempo;如果需要更简单的方案,参考 Zipkin。选购搬瓦工 VPS 使用优惠码 NODESEEK2026 可享 6.77% 折扣。

关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工的方案、优惠和教程。我们不销售主机,不提供技术服务。

新手必读
搬瓦工优惠码

NODESEEK2026(优惠 6.77%)

购买时填入即可抵扣。