Skip to content

Commit 9bdfe0e

Browse files
committed
feat: add TraceFilter and TraceIdGenerator for enhanced tracing support
1 parent 9312045 commit 9bdfe0e

7 files changed

Lines changed: 96 additions & 8 deletions

File tree

README.MD

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,12 @@
1212
8. `zoom-operator-log` 提供操作日志支持,基于`spring-aop`的操作日志记录支持
1313
9. `zoom-oss` 提供对象存储支持,支持`S3`
1414
10. `zoom-poi` 提供`POI`支持,支持`Excel`
15-
11. `zoom-security` 提供安全支持,包含`XSS``CSRF``SQL注入`等支持
16-
12. `zoom-social` 提供社交支持,包含`QQ``微信`等支持
17-
13. `zoom-sofa-rpc` 提供[sofa-rpc](https://github.com/sofastack/sofa-rpc)支持
18-
14. `zoom-springdoc` 提供`springdoc`支持,支持`swagger`
19-
15. `zoom-web` 处理`全局异常``跨域` 等配置
15+
11. `zoom-rabbitmq` 提供`RabbitMQ`支持,包含`消息发送``接收``重试`等支持
16+
12. `zoom-robots` 提供`企业微信``钉钉`等自定义机器人消息发送的支持
17+
13. `zoom-security` 提供安全支持,包含`XSS``CSRF``SQL注入`等支持
18+
14. `zoom-social` 提供社交支持,包含`QQ``微信`等支持
19+
15. `zoom-sofa-rpc` 提供[sofa-rpc](https://github.com/sofastack/sofa-rpc)支持
2020
16. `zoom-spring-retry` 提供`spring-retry`支持
21-
17. `zoom-robots` 提供`企业微信``钉钉`等自定义机器人消息发送的支持
21+
17. `zoom-springdoc` 提供`springdoc`支持,支持`swagger`
22+
18. `zoom-web` 处理`全局异常``跨域` 等配置
23+

zoom-base/src/main/java/com/hb0730/zoom/base/R.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ public class R<T> implements Serializable {
6161
* 链路追踪id
6262
*/
6363
@Schema(description = "链路追踪id")
64-
private String traceId = TraceHolder.getTraceIdOrOtelTraceId();
64+
private String traceId = TraceHolder.getTraceId();
6565

6666

6767
/**

zoom-opentelemetry/zoom-opentelemetry-configuration/src/main/java/com/hb0730/zoom/opentelemetry/configuration/OpenTelemetryAutoConfiguration.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
package com.hb0730.zoom.opentelemetry.configuration;
22

3+
import com.hb0730.zoom.opentelemetry.configuration.config.TraceIdGenerator;
34
import com.hb0730.zoom.opentelemetry.sofa.rpc.SofaRpcTelemetry;
45
import io.opentelemetry.api.OpenTelemetry;
56
import io.opentelemetry.context.Context;
7+
import io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizerProvider;
8+
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
9+
import io.opentelemetry.sdk.trace.SdkTracerProviderBuilder;
610
import org.springframework.boot.autoconfigure.AutoConfiguration;
711
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
812
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
@@ -28,6 +32,17 @@ public class OpenTelemetryAutoConfiguration {
2832
private static final String ACTUATOR_TASK_SCHEDULER_BEAN_NAME = "actuatorTaskScheduler";
2933

3034

35+
@Bean
36+
public AutoConfigurationCustomizerProvider otelCustom() {
37+
return p -> p.addTracerProviderCustomizer(this::configTracerProviderCustomizer);
38+
}
39+
40+
41+
private SdkTracerProviderBuilder configTracerProviderCustomizer(SdkTracerProviderBuilder sdkTracerProviderBuilder, ConfigProperties configProperties) {
42+
sdkTracerProviderBuilder.setIdGenerator(TraceIdGenerator.INSTANCE);
43+
return sdkTracerProviderBuilder;
44+
}
45+
3146
@Bean
3247
@ConditionalOnMissingBean
3348
@ConditionalOnProperty(value = "zoom.opentelemetry.sofa.rpc.enabled", havingValue = "true", matchIfMissing = true)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.hb0730.zoom.opentelemetry.configuration.config;
2+
3+
import com.hb0730.zoom.base.meta.TraceHolder;
4+
import io.opentelemetry.sdk.trace.IdGenerator;
5+
import lombok.extern.slf4j.Slf4j;
6+
7+
/**
8+
* @author <a href="mailto:huangbing0730@gmail">hb0730</a>
9+
* @date 2025/5/22
10+
*/
11+
@Slf4j
12+
public class TraceIdGenerator implements IdGenerator {
13+
public static final TraceIdGenerator INSTANCE = new TraceIdGenerator();
14+
15+
@Override
16+
public String generateSpanId() {
17+
// log.info("[otel] generate spanId");
18+
return IdGenerator.random().generateSpanId();
19+
}
20+
21+
@Override
22+
public String generateTraceId() {
23+
// log.info("[otel] generate traceId");
24+
String traceId = IdGenerator.random().generateTraceId();
25+
TraceHolder.setTraceId(traceId);
26+
return traceId;
27+
}
28+
}

zoom-operator-log/src/main/java/com/hb0730/zoom/operator/log/core/model/OperatorLogModelBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ public OperatorLogModelBuilder fillTraceId(String traceId) {
109109
*/
110110
public OperatorLogModelBuilder fillRequest() {
111111
// traceId
112-
String traceId = TraceHolder.getTraceIdOrOtelTraceId();
112+
String traceId = TraceHolder.getTraceId();
113113
model.setTraceId(traceId);
114114
// 填充请求信息
115115
Optional
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package com.hb0730.zoom.sofa.rpc.core.filter;
2+
3+
import com.alipay.sofa.rpc.context.RpcInternalContext;
4+
import com.alipay.sofa.rpc.core.exception.SofaRpcException;
5+
import com.alipay.sofa.rpc.core.request.SofaRequest;
6+
import com.alipay.sofa.rpc.core.response.SofaResponse;
7+
import com.alipay.sofa.rpc.filter.Filter;
8+
import com.alipay.sofa.rpc.filter.FilterInvoker;
9+
import com.hb0730.zoom.base.meta.TraceHolder;
10+
import lombok.extern.slf4j.Slf4j;
11+
12+
/**
13+
* TraceFilter
14+
*
15+
* @author <a href="mailto:huangbing0730@gmail">hb0730</a>
16+
* @date 2025/5/22
17+
*/
18+
@com.alipay.sofa.rpc.ext.Extension("traceFilter")
19+
@com.alipay.sofa.rpc.filter.AutoActive(providerSide = true, consumerSide = true)
20+
@Slf4j
21+
public class TraceFilter extends Filter {
22+
@Override
23+
public SofaResponse invoke(FilterInvoker invoker, SofaRequest request) throws SofaRpcException {
24+
// 1. 获取当前上下文
25+
// 2. 获取当前请求的 traceId
26+
// 3. 如果 traceId 不为空,则设置到当前上下文中
27+
// 4. 调用下一个过滤器
28+
// 5. 返回响应
29+
RpcInternalContext context = RpcInternalContext.getContext();
30+
if (context.isProviderSide()) {
31+
Object requestProp = request.getRequestProp("traceId");
32+
if (requestProp != null) {
33+
TraceHolder.setTraceId((String) requestProp);
34+
}
35+
} else {
36+
String traceId = TraceHolder.getTraceId();
37+
request.addRequestProp("traceId", traceId);
38+
39+
}
40+
return invoker.invoke(request);
41+
}
42+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
serverExceptionLogPrintFilter=com.hb0730.zoom.sofa.rpc.core.filter.ServerExceptionLogPrintFilter
22
usernameFilter=com.hb0730.zoom.sofa.rpc.core.filter.UsernameFilter
3+
traceFilter=com.hb0730.zoom.sofa.rpc.core.filter.TraceFilter

0 commit comments

Comments
 (0)