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

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.dtcms.com/a/353268.html

相关文章:

  • SciPy科学计算与应用:SciPy应用实战-数据分析与工程计算
  • SpringBoot集成 DeepSeek 对话补全功能
  • 安全建设之SLA指标(服务等级协议)
  • Linux基础优化(Ubuntu、Kylin)
  • k8s—部署discuz论坛和tomca商城
  • 轮转数组或者旋转数组-力扣189
  • 【开题答辩全过程】以基于Android的校园跳蚤市场交易系统的设计与实现为例,包含答辩的问题和答案
  • java基础(十六)操作系统(上)
  • RCLAMP3552T.TQT电子元器件Semtech 多通道、低电容、高速ESD保护器件/TVS二极管阵列
  • Git零基础入门实践(带图解)
  • JMeter —— 压力测试
  • ES01-环境安装
  • Ansible 核心模块与实操练习
  • 使用Python自动化VS 2022的C++项目构建流程
  • 数据结构青铜到王者第六话---栈(Stack)
  • 使用 ROS2 构建客户端-服务器通信:一个简单的计算器示例
  • 2024年12月 Python(三级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • Vue3音频组件开发与使用指南
  • PythonDay38
  • 虚拟机逃逸攻防演练
  • 【项目】分布式Json-RPC框架 - 抽象层与具象层实现
  • 借助 LAMBDA 公式,实现单元格区域高效转换
  • 云计算资源分配问题
  • 【CVE-2025-49113】(内附EXP) 通过 PHP 对象反序列化在 Roundcube 中执行身份验证后远程代码
  • MongoDB Shell
  • 解决.env.production 写死 IP 的问题:Vue + config.json 运行时加载方案
  • vsCode如何自定义编辑器背景色
  • 元宇宙与医疗健康:重构诊疗体验与健康管理模式
  • 硬件开发_基于物联网的儿童座椅系统
  • Milvus + Reranker 混合搜索技术方案详细文档