jaeger组件部署

以下是 Jaeger 组件(Collector、UI 等)的详细部署和使用步骤,涵盖 Docker 和 Kubernetes 两种常见环境:


一、部署前准备

  1. 选择存储后端 :

    Jaeger 依赖外部存储,常用选项: • Elasticsearch (推荐):适合生产环境,支持高吞吐量和复杂查询。 • Cassandra :适合大规模写入场景,但查询性能较弱。 • 内存存储(测试用):仅用于快速验证,数据不持久化。

  2. 环境准备 :

    • 安装 Docker 和 Docker Compose(Docker 部署) 或 Kubernetes 集群(如 Minikube)。 • 下载 Jaeger 官方镜像:jaegertracing/all-in-one(测试用)或分体组件。


二、部署方案 1:使用 Docker Compose(适合本地测试)

步骤 1:编写 docker-compose.yml

yaml 复制代码
version: '3'
services:
  # 存储后端:Elasticsearch
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.14.0
    environment:
      - discovery.type=single-node
      - ES_JAVA_OPTS=-Xms512m -Xmx512m
    ports:
      - "9200:9200"
      - "9300:9300"
    volumes:
      - esdata:/usr/share/elasticsearch/data

  # Jaeger 组件
  jaeger-collector:
    image: jaegertracing/jaeger-collector:1.42
    environment:
      - SPAN_STORAGE_TYPE=elasticsearch
      - ES_SERVER_URLS=http://elasticsearch:9200
    ports:
      - "14250:14250"  # 接收 Agent 发送的 Thrift 格式数据
      - "14268:14268"  # 接收客户端直接发送的 JSON 数据
    depends_on:
      - elasticsearch

  jaeger-query:
    image: jaegertracing/jaeger-query:1.42
    environment:
      - SPAN_STORAGE_TYPE=elasticsearch
      - ES_SERVER_URLS=http://elasticsearch:9200
    ports:
      - "16686:16686"  # Jaeger UI 访问端口
    depends_on:
      - elasticsearch

volumes:
  esdata:

步骤 2:启动服务

bash 复制代码
docker-compose up -d

步骤 3:验证服务

  1. 检查 Elasticsearch:

    bash 复制代码
    curl http://localhost:9200/_cat/health

    输出应为 green 状态。

  2. 访问 Jaeger UI :

    打开浏览器访问 http://localhost:16686。


三、部署方案 2:使用 Kubernetes(适合生产环境)

步骤 1:通过 Helm 快速部署

bash 复制代码
# 添加 Jaeger Helm 仓库
helm repo add jaegertracing https://jaegertracing.github.io/helm-charts
helm repo update

# 部署 Elasticsearch(若尚未部署)
helm install elasticsearch elastic/elasticsearch --version 7.14.0

# 部署 Jaeger
helm install jaeger jaegertracing/jaeger \
  --set storage.type=elasticsearch \
  --set storage.elasticsearch.host=elasticsearch-master \
  --set storage.elasticsearch.port=9200

步骤 2:暴露 Jaeger UI

bash 复制代码
kubectl port-forward svc/jaeger-query 16686:16686

访问 http://localhost:16686。

部署可以参考官方文档:github.com/jaegertraci...

四、配置微服务发送数据到 Jaeger

Go 服务示例(使用 OpenTelemetry SDK)

  1. 初始化 Tracer Provider:

    go 复制代码
    package main
    
    import (
      "go.opentelemetry.io/otel"
      "go.opentelemetry.io/otel/exporters/jaeger"
      "go.opentelemetry.io/otel/sdk/resource"
      sdktrace "go.opentelemetry.io/otel/sdk/trace"
      semconv "go.opentelemetry.io/otel/semconv/v1.4.0"
    )
    
    func initTracer() {
      // 1. 创建 Jaeger Exporter
      exporter, _ := jaeger.New(jaeger.WithCollectorEndpoint(
        jaeger.WithEndpoint("http://jaeger-collector:14268/api/traces"),
      ))
    
      // 2. 配置 Tracer Provider
      tp := sdktrace.NewTracerProvider(
        sdktrace.WithBatcher(exporter),
        sdktrace.WithResource(resource.NewWithAttributes(
          semconv.SchemaURL,
          semconv.ServiceNameKey.String("my-go-service"),
        )),
      )
    
      // 3. 注册为全局 Tracer
      otel.SetTracerProvider(tp)
    }
    
    func main() {
      initTracer()
      // ... 启动 HTTP/RPC 服务
    }
  2. 发送追踪数据 :

    确保服务网络可访问 jaeger-collector 的端点(如 Kubernetes 中通过 Service 名访问)。


五、使用 Jaeger UI 分析数据

  1. 查找 Trace :

    • 在 Jaeger UI 中选择服务名(如 my-go-service),设置时间范围后点击 Find Traces。

  2. 分析 Trace 详情 :

    • 查看完整的调用链、Span 耗时和层级关系。

    • 点击单个 Span 可查看标签(Tags)、日志(Logs)和错误状态。

  3. 过滤和搜索 :

    • 使用标签(如 http.method=GET)或操作名(Operation)过滤 Trace。


六、关键配置说明

组件 配置项 说明
Collector SPAN_STORAGE_TYPE 指定存储类型(如 elasticsearch、cassandra)
ES_SERVER_URLS Elasticsearch 集群地址(多个节点用逗号分隔)
Query (UI) SPAN_STORAGE_TYPE 必须与 Collector 的存储类型一致
Agent JAEGER_AGENT_HOST 微服务通过 Agent 上报数据时指定的主机(通常为 localhost 或 Service 名)
JAEGER_AGENT_PORT Agent 监听端口(默认 6831 UDP)

七、常见问题排查

  1. Collector 无法连接 Elasticsearch :

    • 检查网络连通性(如防火墙、Kubernetes Service 名称)。

    • 验证 Elasticsearch 健康状态:curl http://elasticsearch:9200/_cat/health。

  2. Jaeger UI 无数据 :

    • 确认微服务是否正确配置了 Exporter 端点。

    • 检查 Collector 日志:docker logs <collector-container-id>。

  3. 存储性能瓶颈 :

    • 增加 Elasticsearch 分片数或使用更高性能的存储(如 SSD)。

    • 调整 Jaeger 的采样率(如仅收集 10% 的请求)。


通过以上步骤,您可以快速搭建一个完整的 Jaeger 追踪系统,并集成到 Go 微服务中。

相关推荐
我不会起名字3223 小时前
会话缓存失效排查:区分 Redis 失效与节点广播
redis·后端·go·即时通讯·im·故障排查
大然Ryan1 天前
我用 Go 和 AI 做了一个 macOS 磁盘清理工具:Vole(开源)
go
我不会起名字3221 天前
seq 空洞排查:Mongo 的 51 只是预留上界,Redis CURR 才是已消耗边界
redis·后端·mongodb·go·即时通讯·im·故障排查
喵个咪2 天前
GoWind 拆解:全链 ID 类型体系——int64 定版与前端字符串化契约
前端·后端·go
喵个咪2 天前
GoWind CMS 拆解:发布审批——多级推进、逐级角色与全程留痕
前端·后端·go
喵个咪2 天前
GoWind Flow 拆解:一个 Go 工作流引擎与它的双模式设计器
前端·后端·go
喵个咪2 天前
GoWind CMS 拆解:搜索三板斧——高亮、联想、同义词
后端·搜索引擎·go
喵个咪2 天前
GoWind 拆解:AI Agent 编排引擎——波次并行、子图递归与人工审批
人工智能·后端·go
喵个咪2 天前
GoWind Admin 拆解:打印模板设计器——从画布到服务端 PDF 的完整打印链路
前端·后端·go
喵个咪3 天前
GoWind Admin 拆解:BI 大屏设计器——schema 即 JSON、resolver 注入与三张快照表的口径谱系
大数据·后端·go