当前位置: 首页 > java >正文

OpenTelemetry 在 Spring Boot 项目中的3种集成方式

目录

1. 自动埋点(Java Agent)

2. 注解驱动(@WithSpan)

3. 手动埋点(SDK 编程)

配置关键点

方案选择建议


OpenTelemetry 在 Spring Boot 项目中的应用主要有以下三种方式,按实现复杂度由低到高排列:


1. 自动埋点(Java Agent)

原理:通过 JVM 的 -javaagent 参数加载 OpenTelemetry Java Agent,自动收集框架层(如 Spring MVC、JDBC、HTTP 客户端)的遥测数据。
优点

  • 零代码侵入:无需修改业务逻辑
  • 开箱即用:支持主流组件(Tomcat、HikariCP、RestTemplate 等)
    实现步骤
  1. 下载 opentelemetry-javaagent.jar
  2. 启动时添加 JVM 参数:
    java -javaagent:path/to/opentelemetry-javaagent.jar \-Dotel.service.name=your-service-name \-Dotel.exporter.otlp.endpoint=http://otel-collector:4317 \-jar your-spring-boot-app.jar
    


2. 注解驱动(@WithSpan)

原理:使用 OpenTelemetry 的注解标记需要追踪的方法,结合 SDK 手动埋点。
适用场景:需定制关键业务方法的追踪(如核心算法、外部调用)。
实现步骤

  1. 添加依赖:
    <dependency><groupId>io.opentelemetry</groupId><artifactId>opentelemetry-api</artifactId><version>1.32.0</version>
    </dependency>
    <dependency><groupId>io.opentelemetry</groupId><artifactId>opentelemetry-sdk</artifactId><version>1.32.0</version>
    </dependency>
    

  2. 在方法上添加注解:
    import io.opentelemetry.instrumentation.annotations.WithSpan;@Service
    public class OrderService {@WithSpan("process-order") // 自定义 Span 名称public void processOrder(Order order) {// 业务逻辑}
    }
    


3. 手动埋点(SDK 编程)

原理:直接调用 OpenTelemetry API 创建 Span、记录事件。
适用场景

  • 需要精细控制追踪逻辑(如异步操作、复杂事务)
  • 集成非标准组件
    代码示例
import io.opentelemetry.api.trace.Span;
import io.opentelemetry.api.trace.Tracer;@Service
public class PaymentService {private final Tracer tracer = GlobalOpenTelemetry.getTracer("com.example.payment");public void pay(Order order) {Span span = tracer.spanBuilder("process-payment").startSpan();try (Scope scope = span.makeCurrent()) {span.addEvent("Payment started");// 支付逻辑span.setAttribute("payment.amount", order.getAmount());} catch (Exception e) {span.recordException(e);span.setStatus(StatusCode.ERROR);} finally {span.end();}}
}


配置关键点

所有方式均需配置 OTLP 导出器(以推送到 Collector):

# application.yml
otel:service.name: order-serviceexporter.otlp.endpoint: http://otel-collector:4317traces.sampler: parentbased_always_on # 采样率控制


方案选择建议

方案适用场景维护成本
Java Agent快速接入,标准组件监控
注解驱动关键方法定制追踪
手动埋点非标逻辑/深度定制

💡 最佳实践:优先使用 Java Agent 覆盖基础监控,再通过注解补充核心业务追踪,最后对特殊场景手动埋点。

http://www.xdnf.cn/news/18930.html

相关文章:

  • 互联网大厂Java面试深度解析:从基础到微服务云原生的全场景模拟
  • 嵌入式linux相机(1)
  • CPU、IO、网络与内核参数调优
  • 【目标检测】论文阅读5
  • 6.8 学习ui组件方法和Element Plus介绍
  • 【C++】类型系统:内置类型与自定义类型的对比
  • FlashAttention算法原理
  • 元宇宙与医疗健康:重构诊疗体验与健康管理模式
  • 【开题答辩全过程】以 微信小程序的老年活动中心为例,包含答辩的问题和答案
  • LabVIEW 音频信号处理
  • 火焰传感器讲解
  • laravel学习并连接mysql数据库
  • 煤矸石检测数据集VOC+YOLO格式3090张2类别
  • Python爬虫获取1688商品列表与图片信息
  • AGDO-BP+NSGAII梯度下降优化算法优化BP神经网络+NSGAII多目标优化算法,三目标和四目标案例
  • 【Oracle篇】伪列之ROWID:行数据的物理地址(基于物理地址对行数据最快速度的查询、更新、删除)(第四篇,总共六篇)
  • Python 前后端框架实战:从选型到搭建简易全栈应用
  • 使用MP4视频格式链接地址的自适应视频弹窗实现方案HTML代码
  • 共享云服务器替代传统电脑做三维设计会卡顿吗
  • 移远 × 高通:从开源生态到场景验证,共筑端侧AI新生态
  • 电脑开机显示器不亮
  • 私域电商新范式:开源AI智能名片链动2+1模式S2B2C商城小程序赋能传统行业流量转化
  • electron离线开发核心环境变量npm_config_cache
  • LangGraph - API多种访问方式
  • Diagnosing bias and variance|诊断偏差和方差
  • Redis哨兵机制:高可用架构的守护神!⚔️ 主从秒级切换实战指南
  • Elasticsearch核心配置详解与优化
  • 【Linux】Docker洞察:掌握docker inspect命令与Go模板技巧
  • 免费开源图片压缩工具|绿色版本地运行,支持批量压缩+格式转换,不上传数据,隐私安全有保障!
  • 毕业项目推荐:27-基于yolov8/yolov5/yolo11的电塔缺陷检测识别系统(Python+卷积神经网络)