diff --git a/pom.xml b/pom.xml
index c62d64c..5d358f9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -208,16 +208,16 @@
feign-micrometer
-
-
-
-
+
+
+ io.micrometer
+ micrometer-tracing
+
-
-
-
-
-
+
+ io.micrometer
+ micrometer-tracing-bridge-brave
+
org.springframework.kafka
diff --git a/src/main/java/com/laker/admin/config/EasySimpleTracingConfiguration.java b/src/main/java/com/laker/admin/config/EasySimpleTracingConfiguration.java
new file mode 100644
index 0000000..144a727
--- /dev/null
+++ b/src/main/java/com/laker/admin/config/EasySimpleTracingConfiguration.java
@@ -0,0 +1,44 @@
+package com.laker.admin.config;
+
+import brave.Tracer;
+import brave.handler.MutableSpan;
+import brave.handler.SpanHandler;
+import brave.propagation.TraceContext;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+@Configuration
+public class EasySimpleTracingConfiguration {
+ // 默认是Tracer.NOOP,添加了Brave到classpath后,默认是BraveTracer
+ // trace协议/追踪实现 + 存储 Zipkin / Jaeger / Console Logging 等追踪后端
+ // SpanHandler LogSpanHandler 会将Span信息输出到日志
+ // ConsoleSpanHandler 会将Span信息输出到控制台
+ // BraveAutoConfiguration
+ // from Tracing LogSpanHandler
+
+
+ @Bean
+ // 开启会把所有的span信息输出到日志
+ public SpanHandler logSpanHandler() {
+ return new LogSpanHandler();
+ }
+
+ static final class LogSpanHandler extends SpanHandler {
+ final Logger logger = Logger.getLogger(Tracer.class.getName());
+
+ @Override
+ public boolean end(TraceContext context, MutableSpan span, Cause cause) {
+ if (!logger.isLoggable(Level.INFO)) return false;
+ logger.info(span.toString());
+ return true;
+ }
+
+ @Override
+ public String toString() {
+ return "LogSpanHandler{name=" + logger.getName() + "}";
+ }
+ }
+}
diff --git a/src/main/java/com/laker/admin/framework/EasyAdminConstants.java b/src/main/java/com/laker/admin/framework/EasyAdminConstants.java
index a724585..b4557b6 100644
--- a/src/main/java/com/laker/admin/framework/EasyAdminConstants.java
+++ b/src/main/java/com/laker/admin/framework/EasyAdminConstants.java
@@ -3,7 +3,7 @@ package com.laker.admin.framework;
public interface EasyAdminConstants {
String APPLICATION_NAME = "easy-admin";
String CURRENT_USER = "currentUser";
- String TRACE_ID = "traceId";
+ String TRACE_ID = "traceID"; // 用于追踪请求 区分micrometer tracing的traceId
String USER_ID = "userId";
String TOKEN_TYPE = "tokenType";
diff --git a/src/main/java/com/laker/admin/framework/ext/filter/MDCTraceIDFilter.java b/src/main/java/com/laker/admin/framework/ext/filter/MDCTraceIDFilter.java
index c68bb7d..128e2e6 100644
--- a/src/main/java/com/laker/admin/framework/ext/filter/MDCTraceIDFilter.java
+++ b/src/main/java/com/laker/admin/framework/ext/filter/MDCTraceIDFilter.java
@@ -22,7 +22,8 @@ import org.springframework.web.filter.OncePerRequestFilter;
import java.io.IOException;
-@Order(value = Ordered.HIGHEST_PRECEDENCE + 100)
+// 要在所有的filter之前执行 例如 ServerHttpObservationFilter
+@Order(value = Ordered.HIGHEST_PRECEDENCE)
@Component
@WebFilter(filterName = "MDCTraceIDFilter", urlPatterns = "/*")
@Slf4j
diff --git a/src/main/java/com/laker/admin/module/ext/controller/DemoController.java b/src/main/java/com/laker/admin/module/ext/controller/DemoController.java
index 7bbe2e4..867b8af 100644
--- a/src/main/java/com/laker/admin/module/ext/controller/DemoController.java
+++ b/src/main/java/com/laker/admin/module/ext/controller/DemoController.java
@@ -162,7 +162,9 @@ public class DemoController {
// 它将包含对 log 关联的内置支持,W3C上下文传递将是默认传播类型,我们将支持自动传播元数据,以供 tracing 基础设施(称为“远程包裹”)使用,帮助标记观察结果。
// 最重要的变化是我们引入了一个新的API:Observation API。
// 它创建理念是,希望用户使用单一 API 就能检测代码,并从中获得多种信息(例如 metrics, tracing, logging)。
- // classpath 添加了 Micrometer Tracing
+ // DefaultMeterObservationHandler 内部有Timer 和longTaskTimer
+ // 如果 classpath 添加了 Micrometer Tracing DefaultTracingObservationHandler
+ // TracingAwareMeterObservationHandler
return Observation.createNotStarted("my.observation", registry)
// Low cardinality means that the number of potential values won't be big. Low cardinality entries will end up in e.g. Metrics
.lowCardinalityKeyValue("userType", "userType1")
diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml
index 803a091..61b5e38 100644
--- a/src/main/resources/application.yaml
+++ b/src/main/resources/application.yaml
@@ -143,9 +143,10 @@ easy:
time: 1000
# actuator
management:
- tracing:
+ tracing: # 开启链路追踪
enabled: true
sampling:
+ # 默认情况下,Spring Boot 仅对 10% 的请求进行采样,以防止跟踪后端不堪重负。此属性将其切换为 100%,以便每个请求都发送到跟踪后端。
probability: 1.0
endpoint:
info:
@@ -232,7 +233,7 @@ springdoc:
logging:
level:
#feign日志以什么级别监控哪个接口:即对哪个Feign接口进行日志检查
- com.laker.admin.module.remote: debug
+ com.laker.admin.module.remote: error
org.springframework.web.client.RestTemplate: error
# 配置 Resilience4j CircuitBreaker
diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml
index 64ce4b4..2352904 100644
--- a/src/main/resources/logback.xml
+++ b/src/main/resources/logback.xml
@@ -37,7 +37,7 @@
+ value="%clr(%d{HH:mm:ss.SSS}){faint} %clr(%5p) %clr(---){faint} %clr([%15.15t]) [%X{userId:-},%X{traceID:-},%X{traceId:-},%X{spanId:-}] %clr(%-60.60logger{59}){cyan} %clr(:%line){cyan} %m%n%wEx"/>