From f1327eb51969bdf21a609071fca6ae59ee009d5f Mon Sep 17 00:00:00 2001
From: LZ <1060865215@qq.com>
Date: Tue, 9 Sep 2025 20:00:09 +0800
Subject: [PATCH] =?UTF-8?q?opentracing=E5=8D=87=E7=BA=A7=E4=B8=BAopentelem?=
=?UTF-8?q?etry?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
yudao-dependencies/pom.xml | 46 ++++---------------
yudao-framework/yudao-common/pom.xml | 4 +-
.../common/util/monitor/TracerUtils.java | 7 ++-
.../yudao-spring-boot-starter-monitor/pom.xml | 17 +++----
.../config/YudaoTracerAutoConfiguration.java | 37 ++++++++-------
.../tracer/core/aop/BizTraceAspect.java | 17 ++++---
.../core/util/TracerFrameworkUtils.java | 35 ++++++--------
7 files changed, 66 insertions(+), 97 deletions(-)
diff --git a/yudao-dependencies/pom.xml b/yudao-dependencies/pom.xml
index 0045d4e30..207547d4b 100644
--- a/yudao-dependencies/pom.xml
+++ b/yudao-dependencies/pom.xml
@@ -47,9 +47,8 @@
2.2.7
- 8.12.0
2.7.15
- 0.33.0
+ 1.39.0
7.2.11.RELEASE
1.1.11
@@ -402,44 +401,19 @@
- org.apache.skywalking
- apm-toolkit-trace
- ${skywalking.version}
+ io.opentelemetry
+ opentelemetry-api
+ ${opentelemetry.version}
- org.apache.skywalking
- apm-toolkit-logback-1.x
- ${skywalking.version}
+ io.opentelemetry
+ opentelemetry-sdk
+ ${opentelemetry.version}
- org.apache.skywalking
- apm-toolkit-opentracing
- ${skywalking.version}
-
-
-
-
-
-
-
-
-
-
-
-
- io.opentracing
- opentracing-api
- ${opentracing.version}
-
-
- io.opentracing
- opentracing-util
- ${opentracing.version}
-
-
- io.opentracing
- opentracing-noop
- ${opentracing.version}
+ io.opentelemetry
+ opentelemetry-exporter-otlp
+ ${opentelemetry.version}
diff --git a/yudao-framework/yudao-common/pom.xml b/yudao-framework/yudao-common/pom.xml
index ca6786b20..a4f3b7f8e 100644
--- a/yudao-framework/yudao-common/pom.xml
+++ b/yudao-framework/yudao-common/pom.xml
@@ -73,8 +73,8 @@
- org.apache.skywalking
- apm-toolkit-trace
+ io.opentelemetry
+ opentelemetry-api
diff --git a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/monitor/TracerUtils.java b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/monitor/TracerUtils.java
index 81092b656..4a804a069 100644
--- a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/monitor/TracerUtils.java
+++ b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/monitor/TracerUtils.java
@@ -1,6 +1,7 @@
package cn.iocoder.yudao.framework.common.util.monitor;
-import org.apache.skywalking.apm.toolkit.trace.TraceContext;
+import io.opentelemetry.api.trace.Span;
+import io.opentelemetry.api.trace.SpanContext;
/**
* 链路追踪工具类
@@ -24,7 +25,9 @@ public class TracerUtils {
* @return 链路追踪编号
*/
public static String getTraceId() {
- return TraceContext.traceId();
+ Span currentSpan = Span.current();
+ SpanContext context = currentSpan.getSpanContext();
+ return context.isValid() ? context.getTraceId() : "";
}
}
diff --git a/yudao-framework/yudao-spring-boot-starter-monitor/pom.xml b/yudao-framework/yudao-spring-boot-starter-monitor/pom.xml
index de0a0ed74..3e0d7088d 100644
--- a/yudao-framework/yudao-spring-boot-starter-monitor/pom.xml
+++ b/yudao-framework/yudao-spring-boot-starter-monitor/pom.xml
@@ -42,23 +42,18 @@
- io.opentracing
- opentracing-util
+ io.opentelemetry
+ opentelemetry-api
true
- org.apache.skywalking
- apm-toolkit-trace
+ io.opentelemetry
+ opentelemetry-sdk
true
- org.apache.skywalking
- apm-toolkit-logback-1.x
- true
-
-
- org.apache.skywalking
- apm-toolkit-opentracing
+ io.opentelemetry
+ opentelemetry-exporter-otlp
true
diff --git a/yudao-framework/yudao-spring-boot-starter-monitor/src/main/java/cn/iocoder/yudao/framework/tracer/config/YudaoTracerAutoConfiguration.java b/yudao-framework/yudao-spring-boot-starter-monitor/src/main/java/cn/iocoder/yudao/framework/tracer/config/YudaoTracerAutoConfiguration.java
index 2f8aa7040..570a59466 100644
--- a/yudao-framework/yudao-spring-boot-starter-monitor/src/main/java/cn/iocoder/yudao/framework/tracer/config/YudaoTracerAutoConfiguration.java
+++ b/yudao-framework/yudao-spring-boot-starter-monitor/src/main/java/cn/iocoder/yudao/framework/tracer/config/YudaoTracerAutoConfiguration.java
@@ -1,7 +1,10 @@
package cn.iocoder.yudao.framework.tracer.config;
import cn.iocoder.yudao.framework.common.enums.WebFilterOrderEnum;
+import cn.iocoder.yudao.framework.tracer.core.aop.BizTraceAspect;
import cn.iocoder.yudao.framework.tracer.core.filter.TraceFilter;
+import io.opentelemetry.api.trace.Tracer;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
@@ -16,28 +19,28 @@ import org.springframework.context.annotation.Bean;
*/
@AutoConfiguration
@ConditionalOnClass(name = {
- "org.apache.skywalking.apm.toolkit.opentracing.SkywalkingTracer", // 来自 apm-toolkit-opentracing.jar
-// "io.opentracing.Tracer", // 来自 opentracing-api.jar
- "javax.servlet.Filter"
+ "io.opentelemetry.api.trace.Tracer", // 来自 opentelemetry-api.jar
})
@EnableConfigurationProperties(TracerProperties.class)
@ConditionalOnProperty(prefix = "yudao.tracer", value = "enable", matchIfMissing = true)
public class YudaoTracerAutoConfiguration {
- // TODO @芋艿:skywalking 不兼容最新的 opentracing 版本。同时,opentracing 也停止了维护,尬住了!后续换 opentelemetry 即可!
-// @Bean
-// public BizTraceAspect bizTracingAop() {
-// return new BizTraceAspect(tracer());
-// }
-//
-// @Bean
-// public Tracer tracer() {
-// // 创建 SkywalkingTracer 对象
-// SkywalkingTracer tracer = new SkywalkingTracer();
-// // 设置为 GlobalTracer 的追踪器
-// GlobalTracer.registerIfAbsent(tracer);
-// return tracer;
-// }
+ @Value("${spring.application.name}")
+ private String applicationName;
+
+
+ @Bean
+ public BizTraceAspect bizTracingAop() {
+ return new BizTraceAspect(tracer());
+ }
+
+ /**
+ * 创建 OpenTelemetry Tracer
+ */
+ @Bean
+ public Tracer tracer() {
+ return io.opentelemetry.api.GlobalOpenTelemetry.getTracer(applicationName);
+ }
/**
* 创建 TraceFilter 过滤器,响应 header 设置 traceId
diff --git a/yudao-framework/yudao-spring-boot-starter-monitor/src/main/java/cn/iocoder/yudao/framework/tracer/core/aop/BizTraceAspect.java b/yudao-framework/yudao-spring-boot-starter-monitor/src/main/java/cn/iocoder/yudao/framework/tracer/core/aop/BizTraceAspect.java
index 3c3b9f3bb..b37fcd1ee 100644
--- a/yudao-framework/yudao-spring-boot-starter-monitor/src/main/java/cn/iocoder/yudao/framework/tracer/core/aop/BizTraceAspect.java
+++ b/yudao-framework/yudao-spring-boot-starter-monitor/src/main/java/cn/iocoder/yudao/framework/tracer/core/aop/BizTraceAspect.java
@@ -5,9 +5,8 @@ import cn.hutool.core.util.StrUtil;
import cn.iocoder.yudao.framework.tracer.core.annotation.BizTrace;
import cn.iocoder.yudao.framework.common.util.spring.SpringExpressionUtils;
import cn.iocoder.yudao.framework.tracer.core.util.TracerFrameworkUtils;
-import io.opentracing.Span;
-import io.opentracing.Tracer;
-import io.opentracing.tag.Tags;
+import io.opentelemetry.api.trace.Span;
+import io.opentelemetry.api.trace.Tracer;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
@@ -36,9 +35,9 @@ public class BizTraceAspect {
public Object around(ProceedingJoinPoint joinPoint, BizTrace trace) throws Throwable {
// 创建 span
String operationName = getOperationName(joinPoint, trace);
- Span span = tracer.buildSpan(operationName)
- .withTag(Tags.COMPONENT.getKey(), "biz")
- .start();
+ Span span = tracer.spanBuilder(operationName)
+ .setAttribute("component", "biz")
+ .startSpan();
try {
// 执行原有方法
return joinPoint.proceed();
@@ -49,7 +48,7 @@ public class BizTraceAspect {
// 设置 Span 的 biz 属性
setBizTag(span, joinPoint, trace);
// 完成 Span
- span.finish();
+ span.end();
}
}
@@ -67,8 +66,8 @@ public class BizTraceAspect {
private void setBizTag(Span span, ProceedingJoinPoint joinPoint, BizTrace trace) {
try {
Map result = SpringExpressionUtils.parseExpressions(joinPoint, asList(trace.type(), trace.id()));
- span.setTag(BizTrace.TYPE_TAG, MapUtil.getStr(result, trace.type()));
- span.setTag(BizTrace.ID_TAG, MapUtil.getStr(result, trace.id()));
+ span.setAttribute(BizTrace.TYPE_TAG, MapUtil.getStr(result, trace.type()));
+ span.setAttribute(BizTrace.ID_TAG, MapUtil.getStr(result, trace.id()));
} catch (Exception ex) {
log.error("[setBizTag][解析 bizType 与 bizId 发生异常]", ex);
}
diff --git a/yudao-framework/yudao-spring-boot-starter-monitor/src/main/java/cn/iocoder/yudao/framework/tracer/core/util/TracerFrameworkUtils.java b/yudao-framework/yudao-spring-boot-starter-monitor/src/main/java/cn/iocoder/yudao/framework/tracer/core/util/TracerFrameworkUtils.java
index 51323e7c2..e7c7f3538 100644
--- a/yudao-framework/yudao-spring-boot-starter-monitor/src/main/java/cn/iocoder/yudao/framework/tracer/core/util/TracerFrameworkUtils.java
+++ b/yudao-framework/yudao-spring-boot-starter-monitor/src/main/java/cn/iocoder/yudao/framework/tracer/core/util/TracerFrameworkUtils.java
@@ -1,12 +1,11 @@
package cn.iocoder.yudao.framework.tracer.core.util;
-import io.opentracing.Span;
-import io.opentracing.tag.Tags;
+import io.opentelemetry.api.trace.Span;
+import io.opentelemetry.api.trace.StatusCode;
import java.io.PrintWriter;
import java.io.StringWriter;
-import java.util.HashMap;
-import java.util.Map;
+
/**
* 链路追踪 Util
@@ -22,25 +21,21 @@ public class TracerFrameworkUtils {
* @param span Span
*/
public static void onError(Throwable throwable, Span span) {
- Tags.ERROR.set(span, Boolean.TRUE);
+ if (span == null || !span.getSpanContext().isValid()) {
+ return;
+ }
if (throwable != null) {
- span.log(errorLogs(throwable));
- }
- }
+ // 记录异常信息
+ span.recordException(throwable);
+ span.setStatus(StatusCode.ERROR, throwable.getMessage());
- private static Map errorLogs(Throwable throwable) {
- Map errorLogs = new HashMap(10);
- errorLogs.put("event", Tags.ERROR.getKey());
- errorLogs.put("error.object", throwable);
- errorLogs.put("error.kind", throwable.getClass().getName());
- String message = throwable.getCause() != null ? throwable.getCause().getMessage() : throwable.getMessage();
- if (message != null) {
- errorLogs.put("message", message);
+ // 如果需要,可以把完整堆栈放到属性里
+ StringWriter sw = new StringWriter();
+ throwable.printStackTrace(new PrintWriter(sw));
+ span.setAttribute("error.stacktrace", sw.toString());
+ } else {
+ span.setStatus(StatusCode.ERROR);
}
- StringWriter sw = new StringWriter();
- throwable.printStackTrace(new PrintWriter(sw));
- errorLogs.put("stack", sw.toString());
- return errorLogs;
}
}