OpenTelemetry Agent直接到Jaeger链路跟踪
OpenTelemetry Agent直接到Jaeger链路跟踪
目录
- 方案概述
- 环境准备
- 架构设计
- Jaeger容器配置
- Spring Boot应用配置
- 部署步骤
- 验证测试
- 故障排除
- 与现有方案对比
- 维护建议
方案概述
技术目标
实现OpenTelemetry Java Agent直接发送traces数据到Jaeger,使用Jaeger原生接收器,并将数据持久化存储到Elasticsearch,提供专业的链路跟踪可视化界面。
核心优势
- 简化架构:去除OpenTelemetry Collector中间层,减少故障点
- 专业UI:Jaeger提供专业的链路跟踪分析界面
- 原生协议:使用Jaeger原生导出器,性能更优
- 开箱即用:无需复杂的Elasticsearch索引模板配置
- 自动发现:自动生成服务拓扑图和依赖关系
环境准备
系统要求
- 操作系统: Windows 11 + Docker Desktop
- Java版本: Java 17 JDK
- Elasticsearch: 8.14.3 (HTTP模式)
- Jaeger: 1.74.0 (All-in-One容器)
- opentelemetry-javaagent.jar 最高到 1.32.1(包含) 版本支持直接用 Jaeger exporter
必需文件
D:/soft/
├── opentelemetry-javaagent.jar # OpenTelemetry Java ,Agent
└── springboot3.jar # Spring Boot应用JAR包
架构设计
整体架构图
┌─────────────────┐ Jaeger Native ┌─────────────────┐
│ Spring Boot │ Protocol │ Jaeger │
│ Application │─────────────────────→│ All-in-One │
│ (Port: 9013) │ :14268/api/traces │ (Docker) │
└─────────────────┘ └─────────────────┘││ ES Client API▼┌─────────────────┐│ Elasticsearch ││ (192.168.3.4: ││ 9200) ││ Traces存储 │└─────────────────┘▲│┌─────────────────┐│ Jaeger UI ││(localhost:16686)││ 链路追踪可视化 │└─────────────────┘
数据流说明
- 应用层: Spring Boot应用集成OpenTelemetry Java Agent
- 传输层: 使用Jaeger原生协议直接发送traces数据
- 收集层: Jaeger All-in-One容器接收和处理traces
- 存储层: Elasticsearch持久化存储traces数据
- 展示层: Jaeger UI提供专业的链路跟踪分析界面
架构优势对比
| 特性 | 原架构 (Agent→Collector→ES) | 新架构 (Agent→Jaeger→ES) |
|---|---|---|
| 架构层次 | 3层(复杂) | 2层(简单) |
| 故障点 | Collector单点故障 | 减少故障点 |
| 配置复杂度 | 高(需要复杂配置) | 低(开箱即用) |
| UI体验 | Kibana通用查询 | 专业链路跟踪UI |
| 服务发现 | 手动构建 | 自动生成 |
| 性能分析 | 复杂聚合查询 | 内置性能指标 |
| 维护成本 | 高 | 低 |
Jaeger容器配置
推荐配置 - gRPC协议(高性能)
docker run -d --name jaeger \-p 16686:16686 \-p 14250:14250 \-p 14269:14269 \-e SPAN_STORAGE_TYPE=elasticsearch \-e ES_SERVER_URLS=http://192.168.3.4:9200 \-e ES_USERNAME=elastic \-e ES_PASSWORD=YkH8KP_iCJCKMMVjM1+X \-e ES_TLS_ENABLED=false \jaegertracing/all-in-one:latest
备选配置 - HTTP协议(兼容性好)
docker run -d --name jaeger \-p 16686:16686 \-p 14268:14268 \-p 14269:14269 \-e SPAN_STORAGE_TYPE=elasticsearch \-e ES_SERVER_URLS=http://192.168.3.4:9200 \-e ES_USERNAME=elastic \-e ES_PASSWORD=YkH8KP_iCJCKMMVjM1+X \-e ES_TLS_ENABLED=false \jaegertracing/all-in-one:latest
端口映射说明
gRPC配置端口
- 16686:16686 - Jaeger UI Web界面
- 14250:14250 - Jaeger gRPC接收器端口(推荐,高性能)
- 14269:14269 - 健康检查和管理端口
HTTP配置端口(备选)
- 16686:16686 - Jaeger UI Web界面
- 14268:14268 - Jaeger HTTP接收器端口(兼容性好)
- 14269:14269 - 健康检查和管理端口
环境变量配置
存储配置
SPAN_STORAGE_TYPE=elasticsearch- 使用Elasticsearch作为后端存储ES_SERVER_URLS=http://192.168.3.4:9200- Elasticsearch服务器地址ES_TLS_ENABLED=false- 禁用TLS(因为ES使用HTTP协议)
认证配置
ES_USERNAME=elastic- Elasticsearch用户名ES_PASSWORD=YkH8KP_iCJCKMMVjM1+X- Elasticsearch密码
关键特性
- 协议选择: 支持gRPC(高性能)和HTTP(高兼容性)两种协议
- 原生接收器: 使用Jaeger原生接收器,无需OTLP协议转换
- 自动索引管理: Jaeger自动在ES中创建和管理索引结构
- 高效存储: 专为链路跟踪数据优化的存储格式
Spring Boot应用配置
推荐配置 - gRPC协议(高性能)
java -Dspring.profiles.active=local \-javaagent:D:/soft/opentelemetry-javaagent.jar \-Dotel.service.name=springboot3 \-Dotel.traces.exporter=jaeger \-Dotel.exporter.jaeger.endpoint=http://localhost:14250 \-Dotel.exporter.jaeger.protocol=grpc \-Dotel.metrics.exporter=none \-Dotel.logs.exporter=none \-jar D:/soft/springboot3.jar
备选配置 - HTTP协议(兼容性好)
java -Dspring.profiles.active=local \-javaagent:D:/soft/opentelemetry-javaagent.jar \-Dotel.service.name=springboot3 \-Dotel.traces.exporter=jaeger \-Dotel.exporter.jaeger.endpoint=http://localhost:14268/api/traces \-Dotel.metrics.exporter=none \-Dotel.logs.exporter=none \-jar D:/soft/springboot3.jar
关键参数说明
OpenTelemetry基础配置
-javaagent:D:/soft/opentelemetry-javaagent.jar- 指定OpenTelemetry Java Agent路径-Dotel.service.name=springboot3- 定义服务名称
Jaeger导出器配置
-Dotel.traces.exporter=jaeger- 核心配置:使用Jaeger原生导出器-Dotel.exporter.jaeger.endpoint=http://localhost:14250- Jaeger接收端点(gRPC推荐)-Dotel.exporter.jaeger.protocol=grpc- 使用gRPC协议(性能更优)
备选HTTP配置
-Dotel.exporter.jaeger.endpoint=http://localhost:14268/api/traces- HTTP接收端点(兼容性好)
