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.pswp.cn/news/920462.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/920462.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nvue文件text标签 不同样式的文本在同一段落显示

参考链接&#xff1a;nvue中处理text为块级元素的替代解决方法_nvue 块级元素-CSDN博客 实现效果&#xff1a; nvue的text是块级元素&#xff0c;用上层加粗的绝对定位覆盖底层的文本实现 <view class"cus-text-area"><!-- nvue的text是块级元素&#xff0…

STM32的ADC寄存器操作

ADC硬件电路ADC的硬件电路主要由输入电路&#xff0c;触发信号电路&#xff0c;数据寄存器电路&#xff0c;中断电路还有数据总线这及部分构成。输入信号通道ADC的通道输入到转换器&#xff0c;每个ADC有多达18个通道&#xff0c;可测量16个外部和2个内部信号源&#xff0c;温度…

Java 实现HTML转Word:从HTML文件与字符串到可编辑Word文档

在实际开发中&#xff0c;将HTML页面或内容转换为Word文档是一项常见需求。无论是将网页报表导出为正式文档&#xff0c;还是将合同、发票等页面内容生成可编辑的Word文件&#xff0c;这种转换都能显著提升文档的复用性和归档价值。然而&#xff0c;HTML与Word在结构和渲染机制…

华为L420国产笔记本(统信UOS桌面专业版1070)安装openEuler2403虚拟机

本文探讨在华为L420国产笔记本&#xff08;操作系统为统信UOS桌面专业版1070&#xff09;中安装openEuler2403的arm版虚拟机。 一、测试环境 1、硬件设备 华为L420国产笔记本&#xff0c;CPU为华为麒麟9006C&#xff0c;内存16G 2、操作系统 统信UOS桌面专业版1070 二、安…

【STM32】将 FreeRTOS移植到STM32F103RCT6 详细流程

这篇文章是将 FreeRTOS移植到STM32F103RCT6 详细流程。创建用于移植的根文件夹&#xff0c;如 FreeRTOS-F103。也可以命名为别的名称。进入 FreeRTOS-F103 文件夹&#xff0c;在其内创建以下几个子文件夹&#xff1a;apps&#xff0c;doc&#xff0c;drivers&#xff0c;FreeRT…

京东招java开发

java开发&#xff08;岗位信息经过jobleap.cn授权&#xff0c;可在CSDN发布&#xff09;京东 四川职位描述1、负责企业金融资金、支付基础支撑相关系统建设&#xff1b; 2、负责重点项目、日常需求的承接&#xff0c;按期保质保量交付&#xff1b; 3、负责系统的日常维护及技术…

文本处理与模型对比:BERT, Prompt, Regex, TF-IDF

1. BERT (Bidirectional Encoder Representations from Transformers) BERT是一种基于Transformer架构的深度双向预训练语言模型。它通过在海量文本上进行预训练&#xff08;如掩码语言模型任务&#xff09;&#xff0c;学习到丰富的语言表征&#xff0c;并可以通过微调&#x…

流量迷局 - 理解负载均衡(L4/L7)与CDN背后的“隐形路由

《网络迷踪:SRE的TCP/IP故障排查艺术》 系列第七篇:流量迷局 - 理解负载均衡(L4/L7)与CDN背后的“隐形路由” “案发现场”: 你在排查一个问题时,让用户提供他ping你服务域名的结果。 在北京的用户,ping app.mycompany.com,显示的IP地址是 111.222.1.100。 在广州的用户…

dagger.js 实现「CSS 机械键盘」示例解读(对比 React 版本)

0) 效果演示 &#xff08;代码地址&#xff09; CSS Mechanical Keyboard1) 示例与来源 dagger.js 版本&#xff1a;本笔围绕 CodePen 上的《CSS Mechanical Keyboard》的 dagger.js 改写版进行解读&#xff0c;核心思路是用 dagger 指令把纯 CSS 艺术包装成可复用的组件&…

如何检查 Linux 系统的内存使用情况

内存管理是保持 Linux 系统平稳运行的重要组成部分。无论您是系统管理员、开发者&#xff0c;学会检查 Linux 内存使用情况是确保系统稳定性和性能的关键步骤。本文将介绍在 Linux 环境下监控和检查内存使用的几种方法&#xff0c;包括命令行工具&#xff08;如 top、vmstat、p…

我店生活平台是不是 “圈钱平台”?揭开消费补贴新模式的面纱

近年来&#xff0c;本地生活服务领域涌现出诸多创新模式&#xff0c;其中“WO店”生活平台凭借其独特的全民补贴机制引发行业关注。在“圈钱平台”质疑声此起彼伏的背景下&#xff0c;这一模式究竟是商业创新还是资本游戏&#xff1f;本文将从商业模式、风险控制、用户权益保障…

(LeetCode 每日一题) 1493. 删掉一个元素以后全为 1 的最长子数组 (双指针)

题目&#xff1a;1493. 删掉一个元素以后全为 1 的最长子数组 思路&#xff1a;双指针&#xff0c;时间复杂度0(n)。 C版本&#xff1a; class Solution { public:int longestSubarray(vector<int>& nums) {int ans0;int left0,cnt0;for(int i0;i<nums.size();i…

java去图片水印的方法

下面我将从简单到复杂&#xff0c;介绍几种常见的 Java 去水印方法、适用的场景以及需要注意的事项。核心思路去水印的本质是&#xff1a;​用合理的背景内容替换水印区域的像素。方法一&#xff1a;覆盖或裁剪&#xff08;适用于简单情况&#xff09;这种方法不算是真正的“去…

刷题日记0828

今天开启新篇章。面试经典150题。今日计划5道。3/588. 合并两个有序数组怎么样不用sort把 nums2里的放进 nums1呢&#xff1f;看题解。看了&#xff0c;还是新开了个数组。做的还是挺快的&#xff0c;记得有一次面试就是这个题&#xff0c;没想到居然是第一题 hhh。时间复杂度可…

网站开发用什么语言好

HTML、CSS 和 JavaScriptHTML 就像是网站的骨架&#xff0c;负责搭建网页的结构&#xff1b;CSS 则是给网站穿上漂亮的衣服&#xff0c;让它看起来赏心悦目&#xff1b;而 JavaScript 就如同赋予网站生命的灵魂&#xff0c;让网页能够与用户进行交互。据统计&#xff0c;全球超…

开源夜莺里如何引用标签和注解变量

今天遇到开源社区咨询&#xff1a;夜莺里如何引用标签和注解变量&#xff1f;这个问题如果通读文档&#xff0c;其实也能找到答案&#xff0c;不过相关知识是散落在各处的&#xff0c;这里就集中说一下&#xff0c;方便大家查阅。 哪里可以引用标签和注解变量 主要有两个地方…

大数据的五大特征(5V模型)深度解读

一、Volume&#xff08;体积&#xff09;&#xff1a;数据的“海洋” 定义&#xff1a;指数据的巨大体量。大数据的计量单位已经从传统的GB、TB级跃升至PB、EB甚至ZB级。 深度解读&#xff1a; “Volume”是大数据最显而易见的特征。我们正生活在一个数据爆炸的时代&#xff1a…

基于SpringBoot的宠物领养服务系统【2026最新】

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

AI 解决生活小事 2——用 AI 做一回新闻播客

哈喽&#xff0c;各位C站的朋友们&#xff0c;我是极客团长&#xff0c;一位专注用AI解决生活小事的科技玩家&#xff0c;上一期我们聊了聊怎么用AI给电脑做“深度体检”&#xff0c;把电脑里积攒多年的“垃圾”清理了个干净。 那篇反响还不错&#xff0c;看来大家跟我一样&am…

Vue3 图片加载失败回退为默认图:最简、健壮的两种实现(含完整代码)

先上结论&#xff1a;给 <img> 绑定 error&#xff0c;在回调里将 src 切到默认头像&#xff0c;并断开二次触发&#xff0c;配合 new URL(..., import.meta.url).href 解析静态资源路径&#xff0c;可靠、可维护。 场景与目标 登录用户有头像 URL&#xff0c;但可能 40…