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 指定存储类型(如 elasticsearchcassandra
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 微服务中。

相关推荐
郝同学的测开笔记1 小时前
云原生探索系列(十五):Go 语言通道
后端·云原生·go
夜寒花碎4 小时前
GO入门——Hello, World
后端·go
王中阳Go5 小时前
15~30K,3年以上golang开发经验
后端·面试·go
梦兮林夕8 小时前
06 文件上传从入门到实战:基于Gin的服务端实现(一)
后端·go·gin
孔令飞8 小时前
LLM 中的函数调用和工具是什么?
人工智能·云原生·go
江湖十年9 小时前
go-multierror: 更方便的处理你的错误列表
后端·面试·go
Pandaconda1 天前
【新人系列】Golang 入门(十三):结构体 - 下
后端·golang·go·方法·结构体·后端开发·值传递
Serverless社区1 天前
MCP 正当时:FunctionAI MCP 开发平台来了!
go
楽码1 天前
检查go语言变量内存结构
后端·go·计算机组成原理