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 微服务中。

相关推荐
却尘8 小时前
一篇小白也能看懂的 Go 字符串拼接 & Builder & cap 全家桶
后端·go
ん贤9 小时前
一次批量删除引发的死锁,最终我选择不加锁
数据库·安全·go·死锁
mtngt1121 小时前
AI DDD重构实践
go
Grassto2 天前
12 go.sum 是如何保证依赖安全的?校验机制源码解析
安全·golang·go·哈希算法·go module
Grassto4 天前
11 Go Module 缓存机制详解
开发语言·缓存·golang·go·go module
程序设计实验室5 天前
2025年的最后一天,分享我使用go语言开发的电子书转换工具网站
go
我的golang之路果然有问题5 天前
使用 Hugo + GitHub Pages + PaperMod 主题 + Obsidian 搭建开发博客
golang·go·github·博客·个人开发·个人博客·hugo
啊汉7 天前
古文观芷App搜索方案深度解析:打造极致性能的古文搜索引擎
go·软件随想
asaotomo7 天前
一款 AI 驱动的新一代安全运维代理 —— DeepSentry(深哨)
运维·人工智能·安全·ai·go
码界奇点8 天前
基于Gin与GORM的若依后台管理系统设计与实现
论文阅读·go·毕业设计·gin·源代码管理