diff --git a/yudao-dependencies/pom.xml b/yudao-dependencies/pom.xml
index c285378ae2..a81752a34e 100644
--- a/yudao-dependencies/pom.xml
+++ b/yudao-dependencies/pom.xml
@@ -40,7 +40,7 @@
9.6.0
3.5.9
- 0.33.0
+ 1.39.0
8.0.2.RELEASE
1.1.15
@@ -343,45 +343,25 @@
- org.apache.skywalking
- apm-toolkit-trace
- ${skywalking.version}
+ io.opentelemetry
+ opentelemetry-api
+ ${opentelemetry.version}
+
+
+ io.opentelemetry
+ opentelemetry-sdk
+ ${opentelemetry.version}
+
+
+ io.opentelemetry
+ opentelemetry-exporter-otlp
+ ${opentelemetry.version}
org.apache.skywalking
apm-toolkit-logback-1.x
${skywalking.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}
-
de.codecentric
diff --git a/yudao-framework/yudao-common/pom.xml b/yudao-framework/yudao-common/pom.xml
index ec19c8e57a..357c12b4b5 100644
--- a/yudao-framework/yudao-common/pom.xml
+++ b/yudao-framework/yudao-common/pom.xml
@@ -66,8 +66,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 81092b6565..e61338a533 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;
/**
* 链路追踪工具类
@@ -18,13 +19,14 @@ public class TracerUtils {
}
/**
- * 获得链路追踪编号,直接返回 SkyWalking 的 TraceId。
+ * 获得链路追踪编号,直接返回 OpenTelemetry 的 TraceId。
* 如果不存在的话为空字符串!!!
*
* @return 链路追踪编号
*/
public static String getTraceId() {
- return TraceContext.traceId();
+ SpanContext context = Span.current().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 6b6970fbef..e3da8843bf 100644
--- a/yudao-framework/yudao-spring-boot-starter-monitor/pom.xml
+++ b/yudao-framework/yudao-spring-boot-starter-monitor/pom.xml
@@ -42,13 +42,18 @@
- io.opentracing
- opentracing-util
+ io.opentelemetry
+ opentelemetry-api
true
- org.apache.skywalking
- apm-toolkit-trace
+ io.opentelemetry
+ opentelemetry-sdk
+ true
+
+
+ io.opentelemetry
+ opentelemetry-exporter-otlp
true
@@ -56,11 +61,6 @@
apm-toolkit-logback-1.x
true
-
- org.apache.skywalking
- apm-toolkit-opentracing
- 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 596b516757..53e9135d5d 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,9 +1,14 @@
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.GlobalOpenTelemetry;
+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.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
@@ -16,28 +21,27 @@ 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
+ "io.opentelemetry.api.trace.Tracer", // 来自 opentelemetry-api.jar
"jakarta.servlet.Filter"
})
@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:application}")
+ private String applicationName;
+
+ @Bean
+ @ConditionalOnMissingBean
+ public Tracer tracer() {
+ return GlobalOpenTelemetry.getTracer(applicationName);
+ }
+
+ @Bean
+ @ConditionalOnMissingBean
+ public BizTraceAspect bizTracingAop(Tracer tracer) {
+ return new BizTraceAspect(tracer);
+ }
/**
* 创建 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 3c3b9f3bb3..f66699445e 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,9 @@ 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 io.opentelemetry.context.Scope;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
@@ -36,10 +36,10 @@ 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();
- try {
+ Span span = tracer.spanBuilder(operationName)
+ .setAttribute("component", "biz")
+ .startSpan();
+ try (Scope ignored = span.makeCurrent()) {
// 执行原有方法
return joinPoint.proceed();
} catch (Throwable throwable) {
@@ -49,7 +49,7 @@ public class BizTraceAspect {
// 设置 Span 的 biz 属性
setBizTag(span, joinPoint, trace);
// 完成 Span
- span.finish();
+ span.end();
}
}
@@ -67,8 +67,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 51323e7c20..c751eb1aa1 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,10 @@
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 +20,24 @@ public class TracerFrameworkUtils {
* @param span Span
*/
public static void onError(Throwable throwable, Span span) {
- Tags.ERROR.set(span, Boolean.TRUE);
- if (throwable != null) {
- span.log(errorLogs(throwable));
+ // 忽略无效 Span
+ if (span == null || !span.getSpanContext().isValid()) {
+ return;
+ }
+ // 标记异常状态
+ if (throwable == null) {
+ span.setStatus(StatusCode.ERROR);
+ return;
}
- }
- 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());
+ // 记录异常事件
+ span.recordException(throwable);
String message = throwable.getCause() != null ? throwable.getCause().getMessage() : throwable.getMessage();
- if (message != null) {
- errorLogs.put("message", message);
- }
+ span.setStatus(StatusCode.ERROR, message == null ? "" : message);
+ // 记录异常堆栈
StringWriter sw = new StringWriter();
throwable.printStackTrace(new PrintWriter(sw));
- errorLogs.put("stack", sw.toString());
- return errorLogs;
+ span.setAttribute("error.stack", sw.toString());
}
}