feature: add tracing

This commit is contained in:
laker
2024-12-26 14:45:33 +08:00
parent f09be1a7d8
commit f79455c801
7 changed files with 63 additions and 15 deletions

18
pom.xml
View File

@@ -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>

View File

@@ -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() + "}";
}
}
}

View File

@@ -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";

View File

@@ -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

View File

@@ -162,7 +162,9 @@ public class DemoController {
// 它将包含对 log 关联的内置支持W3C上下文传递将是默认传播类型我们将支持自动传播元数据以供 tracing 基础设施(称为“远程包裹”)使用,帮助标记观察结果。
// 最重要的变化是我们引入了一个新的APIObservation 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")

View File

@@ -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

View File

@@ -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"/>