gateway网关过滤器设置链路到skywalking
时间: 2023-07-07 12:27:31 浏览: 109
在 Spring Cloud Gateway 中,可以使用 SkyWalking 提供的插件来实现链路追踪。具体步骤如下:
1. 添加 SkyWalking 插件的依赖:
```xml
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-trace</artifactId>
<version>${skywalking.version}</version>
</dependency>
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-opentracing</artifactId>
<version>${skywalking.version}</version>
</dependency>
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-log4j-1.x</artifactId>
<version>${skywalking.version}</version>
</dependency>
```
其中 `${skywalking.version}` 是 SkyWalking 版本号。
2. 创建一个 `GlobalFilter`,在该过滤器中添加 SkyWalking 的 `TracingContext`:
```java
@Component
public class SkyWalkingFilter implements GlobalFilter, Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
Tracer tracer = TracingContext.Tracing().tracer();
Span span = tracer.createEntrySpan(exchange.getRequest().getURI().getPath());
try {
// 在这里处理逻辑
return chain.filter(exchange);
} finally {
span.asyncFinish();
}
}
@Override
public int getOrder() {
return Ordered.LOWEST_PRECEDENCE;
}
}
```
在过滤器中使用 `TracingContext.Tracing().tracer()` 获取当前线程的 `Tracer`,并使用 `tracer.createEntrySpan()` 创建一个入口 Span。在请求处理完成后,需要在 `finally` 块中调用 `span.asyncFinish()` 来结束该 Span。
3. 在 `application.yml` 中配置 SkyWalking:
```yaml
skywalking:
trace:
ignore-path: /actuator/**
ignored-tracers: org.springframework.cloud.gateway.filter.factory.rewrite.CachedBodyOutputMessage
```
其中 `ignore-path` 表示不进行链路追踪的路径,`ignored-tracers` 表示需要忽略的 Tracer。
4. 启动 SkyWalking Agent,就可以在 SkyWalking 的控制台中看到链路追踪信息了。