mirror of
https://gitee.com/lakernote/easy-admin.git
synced 2026-09-03 05:33:47 +08:00
feature: add tracing
This commit is contained in:
18
pom.xml
18
pom.xml
@@ -208,16 +208,16 @@
|
||||
<artifactId>feign-micrometer</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- <dependency>-->
|
||||
<!-- <groupId>io.micrometer</groupId>-->
|
||||
<!-- <artifactId>micrometer-tracing</artifactId>-->
|
||||
<!-- </dependency>-->
|
||||
<!-- https://docs.spring.io/spring-boot/3.3/reference/actuator/tracing.html -->
|
||||
<dependency>
|
||||
<groupId>io.micrometer</groupId>
|
||||
<artifactId>micrometer-tracing</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- <dependency>-->
|
||||
<!-- <groupId>com.github.loki4j</groupId>-->
|
||||
<!-- <artifactId>loki-logback-appender</artifactId>-->
|
||||
<!-- <version>1.5.1</version>-->
|
||||
<!-- </dependency>-->
|
||||
<dependency>
|
||||
<groupId>io.micrometer</groupId>
|
||||
<artifactId>micrometer-tracing-bridge-brave</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.kafka</groupId>
|
||||
|
||||
@@ -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() + "}";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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";
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
|
||||
<!-- 彩色格式 -->
|
||||
<property name="CONSOLE_LOG_PATTERN"
|
||||
value="%clr(%d{HH:mm:ss.SSS}){faint} %clr(%5p) %clr(---){faint} %clr([%15.15t]) [%X{userId}|%X{traceId}] %clr(%-60.60logger{59}){cyan} %clr(:%line){cyan} %m%n%wEx"/>
|
||||
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"/>
|
||||
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
|
||||
<conversionRule conversionWord="wex"
|
||||
converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
|
||||
|
||||
Reference in New Issue
Block a user