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; } }