Spring Cloud Sleuth 集成
1. 异步通信
在本节中,我们将介绍如何自定义 Spring Cloud Sleuth 的异步通信。
1.1. @Async
带注释的方法
此功能适用于所有 Tracer 实现。
在 Spring Cloud Sleuth 中,我们检测与异步相关的组件,以便在线程之间传递跟踪信息。
您可以通过将 的值设置为 来禁用此行为。spring.sleuth.async.enabled
false
如果您使用 注释方法,我们会自动修改现有的 Span,如下所示:@Async
-
如果方法带有 注释,则注释的值是 Span 的名称。
@SpanName
-
如果方法未使用 进行批注,则 Span 名称是带批注的方法名称。
@SpanName
-
span 使用方法的类名和方法名进行标记。
由于我们正在修改现有 span,如果您想保持其原始名称(例如,通过接收 HTTP 请求创建的 span)
您应该使用 Annotation 包装带 Comments 的方法,或者手动创建新的 Span。@Async
@NewSpan
1.2. @Scheduled
带注释的方法
此功能适用于所有 Tracer 实现。
在 Spring Cloud Sleuth 中,我们检测计划的方法执行,以便在线程之间传递跟踪信息。
您可以通过将 的值设置为 来禁用此行为。spring.sleuth.scheduled.enabled
false
如果您使用 来注释您的方法,我们会自动创建一个具有以下特征的新 span:@Scheduled
-
span name 是带注释的方法名称。
-
span 使用方法的类名和方法名进行标记。
如果要跳过某些带注释类的 span 创建,可以使用与带注释类的完全限定名称匹配的正则表达式进行设置。@Scheduled
spring.sleuth.scheduled.skipPattern
@Scheduled
1.3. Executor、ExecutorService 和 ScheduledExecutorService
此功能适用于所有 Tracer 实现。
我们提供 、 和 。
这些实施在每次提交、调用或计划新任务时都会创建 span。LazyTraceExecutor
TraceableExecutorService
TraceableScheduledExecutorService
以下示例显示了在使用 时如何传递跟踪信息:TraceableExecutorService
CompletableFuture
CompletableFuture<Long> completableFuture = CompletableFuture.supplyAsync(() -> {
// perform some logic
return 1_000_000L;
}, new TraceableExecutorService(beanFactory, executorService,
// 'calculateTax' explicitly names the span - this param is optional
"calculateTax"));
Sleuth 不能开箱即用。
如果要通过流传播跟踪信息,则必须将方法与 一起使用,如前所述。parallelStream() supplyAsync(…) |
如果存在要从 span 创建中排除的 Bean 实现的接口,则可以使用该属性,其中可以提供 Bean 名称列表。Executor
spring.sleuth.async.ignored-beans
您可以通过将 的值设置为 来禁用此行为。spring.sleuth.async.enabled
false
1.3.1. Executor 的自定义
有时,您需要设置 .
以下示例显示如何设置此类自定义 :AsyncExecutor
Executor
@Configuration(proxyBeanMethods = false)
@EnableAutoConfiguration
@EnableAsync
// add the infrastructure role to ensure that the bean gets auto-proxied
@Role(BeanDefinition.ROLE_INFRASTRUCTURE)
public static class CustomExecutorConfig extends AsyncConfigurerSupport {
@Autowired
BeanFactory beanFactory;
@Override
public Executor getAsyncExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
// CUSTOMIZE HERE
executor.setCorePoolSize(7);
executor.setMaxPoolSize(42);
executor.setQueueCapacity(11);
executor.setThreadNamePrefix("MyExecutor-");
// DON'T FORGET TO INITIALIZE
executor.initialize();
return new LazyTraceExecutor(this.beanFactory, executor);
}
}
要确保您的配置得到后处理,请记住在您的类上添加@Role(BeanDefinition.ROLE_INFRASTRUCTURE) @Configuration |
2. HTTP 客户端集成
可以通过将值等于 的属性设置为来禁用此部分中的功能。spring.sleuth.web.client.enabled
false
2.1. 同步 REST 模板
此功能适用于所有 Tracer 实现。
我们注入一个拦截器,以确保所有跟踪信息都传递给请求。
每次进行调用时,都会创建一个新的 Span。
收到响应后,它将关闭。
要阻止同步功能,请设置为 。RestTemplate
RestTemplate
spring.sleuth.web.client.enabled
false
您必须注册为 bean,以便注入拦截器。
如果使用关键字创建实例,则插桩不起作用。RestTemplate RestTemplate new |
2.2. 异步 REST 模板
此功能适用于所有 Tracer 实现。
从 Sleuth 开始,我们不再注册 type 的 bean。
创建这样的 bean 取决于您。
然后我们对其进行检测。2.0.0 AsyncRestTemplate |
要阻止要素,请设置为 。
要禁用创建默认 ,请设置为 。
如果您根本不想创建,请设置为 。AsyncRestTemplate
spring.sleuth.web.async.client.enabled
false
TraceAsyncClientHttpRequestFactoryWrapper
spring.sleuth.web.async.client.factory.enabled
false
AsyncRestClient
spring.sleuth.web.async.client.template.enabled
false
2.2.1. 多个异步 Rest 模板
有时,您需要使用 Asynchronous Rest Template 的多个实现。
在以下代码段中,您可以看到如何设置此类自定义的示例:AsyncRestTemplate
@Configuration(proxyBeanMethods = false)
public static class TestConfig {
@Bean(name = "customAsyncRestTemplate")
public AsyncRestTemplate traceAsyncRestTemplate() {
return new AsyncRestTemplate(asyncClientFactory(), clientHttpRequestFactory());
}
private ClientHttpRequestFactory clientHttpRequestFactory() {
ClientHttpRequestFactory clientHttpRequestFactory = new CustomClientHttpRequestFactory();
// CUSTOMIZE HERE
return clientHttpRequestFactory;
}
private AsyncClientHttpRequestFactory asyncClientFactory() {
AsyncClientHttpRequestFactory factory = new CustomAsyncClientHttpRequestFactory();
// CUSTOMIZE HERE
return factory;
}
}
2.2.2. Web客户端
此功能适用于所有 Tracer 实现。
我们注入一个 implementation 来创建一个 span,并通过 on-success 和 on-error 回调来关闭客户端 span。ExchangeFilterFunction
要阻止此功能,请设置为 。spring.sleuth.web.client.enabled
false
您必须注册为 bean,以便应用跟踪检测。
如果使用关键字创建实例,则插桩不起作用。WebClient WebClient new |
2.2.3. 遍历
此功能适用于所有 Tracer 实现。
如果使用 Traverson 库,则可以将 as 注入到 Traverson 对象中。
由于 已被拦截,因此您可以在客户端中获得对跟踪的完全支持。
以下伪代码显示了如何执行此操作:RestTemplate
RestTemplate
@Autowired RestTemplate restTemplate;
Traverson traverson = new Traverson(URI.create("https://some/address"),
MediaType.APPLICATION_JSON, MediaType.APPLICATION_JSON_UTF8).setRestOperations(restTemplate);
// use Traverson
2.2.4. Apache HttpClientBuilder
和 HttpAsyncClientBuilder
此功能可用于 Brave 跟踪器实施。
我们检测 and,以便将跟踪上下文注入到发送的请求中。HttpClientBuilder
HttpAsyncClientBuilder
要阻止这些功能,请设置为 。spring.sleuth.web.client.enabled
false
2.2.5. Netty HttpClient
客户端
此功能适用于所有 Tracer 实现。
我们检测 Netty 的 .HttpClient
要阻止此功能,请设置为 。spring.sleuth.web.client.enabled
false
您必须注册为 Bean,以便进行检测。
如果使用关键字创建实例,则插桩不起作用。HttpClient HttpClient new |
2.2.6. UserInfoRestTemplateCustomizer
此功能适用于所有 Tracer 实现。
我们检测 Spring Security 的 .UserInfoRestTemplateCustomizer
要阻止此功能,请设置为 。spring.sleuth.web.client.enabled
false
3. HTTP 服务器集成
可以通过将值等于 的属性设置为来禁用此部分中的功能。spring.sleuth.web.enabled
false
3.1. HTTP 过滤器
此功能适用于所有 Tracer 实现。
通过 ,所有采样的传入请求都会导致创建一个 Span。
您可以通过设置属性来配置要跳过的 URI。
如果你有 onclasspath,则其值 of 将附加到提供的 skip 模式中。
如果您想重用 Sleuth 的默认跳过模式并仅附加您自己的模式,请使用 .TracingFilter
spring.sleuth.web.skipPattern
ManagementServerProperties
contextPath
spring.sleuth.web.additionalSkipPattern
默认情况下,所有 Spring Boot Actuator 端点都会自动添加到跳过模式中。
如果要禁用此行为,请将 .spring.sleuth.web.ignore-auto-configured-skip-patterns
true
要更改跟踪过滤器的注册顺序,请设置属性。spring.sleuth.web.filter-order
要禁用记录未捕获异常的过滤器,您可以禁用该属性。spring.sleuth.web.exception-throwing-filter-enabled
3.2. HandlerInterceptor
此功能适用于所有 Tracer 实现。
由于我们希望 span 名称精确,因此我们使用 a 来包装 existing 或直接添加到 existing .
这会向给定的 .
如果 没有看到此属性,它会创建一个 “fallback” 范围,这是在服务器端创建的附加范围,以便在 UI 中正确显示跟踪。
如果发生这种情况,则可能缺少 instrumentation。
在这种情况下,请在 Spring Cloud Sleuth 中提交问题。TraceHandlerInterceptor
HandlerInterceptor
HandlerInterceptors
TraceHandlerInterceptor
HttpServletRequest
TracingFilter
3.3. 异步 Servlet 支持
此功能适用于所有 Tracer 实现。
如果您的控制器返回 a 或 a ,Spring Cloud Sleuth 将继续现有 span,而不是创建一个新的 span。Callable
WebAsyncTask
3.4. WebFlux 支持
此功能适用于所有 Tracer 实现。
通过 ,所有采样的传入请求都会导致创建一个 Span。
该 Span 的名称是 + 请求发送到的路径。
例如,如果请求被发送到 ,则名称为 。
您可以使用该属性配置要跳过的 URI。
如果你在 Classpath 上,它的值 of 将附加到提供的 skip 模式中。
如果要重用 Sleuth 的默认跳过模式并附加您自己的 skip,请使用 .TraceWebFilter
http:
/this/that
http:/this/that
spring.sleuth.web.skipPattern
ManagementServerProperties
contextPath
spring.sleuth.web.additionalSkipPattern
为了在性能和上下文传播方面获得最佳结果,我们建议您将 .
为了执行范围内具有 span 的代码,您可以调用 .
例:spring.sleuth.reactor.instrumentation-type
MANUAL
WebFluxSleuthOperators.withSpanInScope
@GetMapping("/simpleManual")
public Mono<String> simpleManual() {
return Mono.just("hello").map(String::toUpperCase).doOnEach(WebFluxSleuthOperators
.withSpanInScope(SignalType.ON_NEXT, signal -> log.info("Hello from simple [{}]", signal.get())));
}
要更改跟踪过滤器的注册顺序,请设置属性。spring.sleuth.web.filter-order
4. 消息
可以通过将值等于 的属性设置为来禁用此部分中的功能。spring.sleuth.messaging.enabled
false
4.1. Spring 集成
此功能适用于所有 Tracer 实现。
Spring Cloud Sleuth 与 Spring 集成。
它为 publish 和 subscribe 事件创建 span。
要禁用 Spring 集成插桩,请设置为 。spring.sleuth.integration.enabled
false
您可以提供模式以显式提供要包含以进行跟踪的通道的名称。
默认情况下,包括除 channel 之外的所有通道。spring.sleuth.integration.patterns
hystrixStreamOutput
使用 构建 Spring Integration 时,必须使用 的 未跟踪版本 .
装饰 Spring Integration Executor Channel 会导致 span 被不正确地关闭。Executor IntegrationFlow Executor TraceableExecutorService |
如果要自定义从消息 Headers 读取和写入 tracing 上下文的方式,则注册 Bean 类型就足够了:
-
Propagator.Setter<MessageHeaderAccessor>
- 用于将标头写入消息 -
Propagator.Getter<MessageHeaderAccessor>
- 用于从消息中读取标头
4.1.2. 自定义消息传递 span
为了更改默认的 span 名称和标签,只需注册一个 bean 类型的 .您还可以
override the existing 以扩展 existing 行为。MessageSpanCustomizer
DefaultMessageSpanCustomizer
@Component
class MyMessageSpanCustomizer extends DefaultMessageSpanCustomizer {
@Override
public Span customizeHandle(Span spanCustomizer,
Message<?> message, MessageChannel messageChannel) {
return super.customizeHandle(spanCustomizer, message, messageChannel)
.name("changedHandle")
.tag("handleKey", "handleValue")
.tag("channelName", channelName(messageChannel));
}
@Override
public Span.Builder customizeSend(Span.Builder builder,
Message<?> message, MessageChannel messageChannel) {
return super.customizeSend(builder, message, messageChannel)
.name("changedSend")
.tag("sendKey", "sendValue")
.tag("channelName", channelName(messageChannel));
}
}
4.2. Spring Cloud 函数和 Spring Cloud Stream
此功能适用于所有 Tracer 实现。
Spring Cloud Sleuth 可以检测 Spring Cloud Function。
实现它的方法是提供一个 or 或,将 a 作为参数,例如 .
如果类型不是,则不会进行插桩。
在处理基于 Reactor 的流时,不会进行开箱即用的 instrumentation - 例如 .Function
Consumer
Supplier
Message
Function<Message<String>, Message<Integer>>
Message
Function<Flux<Message<String>>, Flux<Message<Integer>>>
由于 Spring Cloud Stream 重用了 Spring Cloud Function,因此您将立即获得 instrumentation。
您可以通过将 的值设置为 来禁用此行为。spring.sleuth.function.enabled
false
为了使用反应式 Stream 函数,您可以利用 Util 类,该类允许您操作输入和输出消息,以便继续跟踪上下文并在跟踪上下文中执行自定义代码。MessagingSleuthOperators
class SimpleReactiveManualFunction implements Function<Flux<Message<String>>, Flux<Message<String>>> {
private static final Logger log = LoggerFactory.getLogger(SimpleReactiveFunction.class);
private final BeanFactory beanFactory;
SimpleReactiveManualFunction(BeanFactory beanFactory) {
this.beanFactory = beanFactory;
}
@Override
public Flux<Message<String>> apply(Flux<Message<String>> input) {
return input.map(message -> (MessagingSleuthOperators.asFunction(this.beanFactory, message))
.andThen(msg -> MessagingSleuthOperators.withSpanInScope(this.beanFactory, msg, stringMessage -> {
log.info("Hello from simple manual [{}]", stringMessage.getPayload());
return stringMessage;
})).andThen(msg -> MessagingSleuthOperators.afterMessageHandled(this.beanFactory, msg, null))
.andThen(msg -> MessageBuilder.createMessage(msg.getPayload().toUpperCase(), msg.getHeaders()))
.andThen(msg -> MessagingSleuthOperators.handleOutputMessage(this.beanFactory, msg)).apply(message));
}
}
4.3. Spring RabbitMq
此功能可用于 Brave 跟踪器实施。
我们检测 ,以便将跟踪标头注入到消息中。RabbitTemplate
要阻止此功能,请设置为 。spring.sleuth.messaging.rabbit.enabled
false
4.4. Spring Kafka
此功能可用于 Brave 跟踪器实施。
我们对 Spring Kafka 进行检测,以便将跟踪标头注入到创建的 Spring Kafka 和 .ProducerFactory
ConsumerFactory
Producer
Consumer
要阻止此功能,请设置为 。spring.sleuth.messaging.kafka.enabled
false
4.5. Spring Kafka 流
此功能可用于 Brave 跟踪器实施。
我们检测 ,以便将跟踪标头注入到 bean 中,从而允许通过额外的 and 方法进行进一步的检测。KafkaStreams
KafkaClientSupplier
Producer
Consumer`s. A `KafkaStreamsTracing
TransformerSupplier
ProcessorSupplier
要阻止此功能,请设置为 。spring.sleuth.messaging.kafka.streams.enabled
false
4.6. Spring JMS
此功能可用于 Brave 跟踪器实施。
我们检测 ,以便将跟踪标头注入到消息中。
我们还在消费者端支持带注释的方法。JmsTemplate
@JmsListener
要阻止此功能,请设置为 。spring.sleuth.messaging.jms.enabled
false
我们不支持 JMS 的行李传播 |
5. 开放假
此功能适用于所有 Tracer 实现。
默认情况下,Spring Cloud Sleuth 通过 .
您可以通过设置为 来完全禁用它。
如果这样做,则不会发生与 Feign 相关的插桩。TraceFeignClientAutoConfiguration
spring.sleuth.feign.enabled
false
Feign 插桩的一部分是通过 .
您可以通过设置为 来禁用它。
如果将其设置为 Spring Cloud Sleuth ,则不会检测任何自定义 Feign 组件。
但是,所有默认插桩仍然存在。FeignBeanPostProcessor
spring.sleuth.feign.processor.enabled
false
false
6. 开放追踪
此功能适用于所有 Tracer 实现。
Spring Cloud Sleuth 与 OpenTracing 兼容。
如果你在 Classpath 上有 OpenTracing,我们会自动注册 OpenTracing bean。
如果要禁用此功能,请设置为Tracer
spring.sleuth.opentracing.enabled
false
7. Quartz
此功能适用于所有 Tracer 实现。
我们通过向 Quartz Scheduler 添加 Job/Trigger 侦听器来检测 quartz 作业。
要关闭此功能,请将该属性设置为 。spring.sleuth.quartz.enabled
false
8. 反应器
此功能适用于所有 Tracer 实现。
我们有以下模式来检测基于 reactor 的应用程序,可以通过 property 进行设置:spring.sleuth.reactor.instrumentation-type
-
DECORATE_QUEUES
- 使用新的 Reactor 队列包装机制 (Reactor 3.4.3),我们正在检测 Reactor 切换线程的方式。这应该会导致功能对等,但对性能的影响较小。ON_EACH
-
DECORATE_ON_EACH
- 将每个 Reactor 运算符包装在跟踪表示中。 在大多数情况下传递跟踪上下文。 此模式可能会导致性能急剧下降。 -
DECORATE_ON_LAST
- 将最后一个 Reactor 运算符包装在跟踪表示中。 在某些情况下传递跟踪上下文,因此访问 MDC 上下文可能不起作用。 此模式可能会导致中等性能下降。 -
MANUAL
- 以侵入性最小的方式包装每个 Reactor,而不传递跟踪上下文。 这取决于用户来做。
当前默认值是出于向后兼容性的原因,但我们鼓励用户迁移到检测并从 和 中获利。
性能改进可能是显著的。
例:ON_EACH
MANUAL
WebFluxSleuthOperators
MessagingSleuthOperators
@GetMapping("/simpleManual")
public Mono<String> simpleManual() {
return Mono.just("hello").map(String::toUpperCase).doOnEach(WebFluxSleuthOperators
.withSpanInScope(SignalType.ON_NEXT, signal -> log.info("Hello from simple [{}]", signal.get())));
}
9. Redis
此功能可用于 Brave 跟踪器实施。
我们将 property 设置为 Lettuce 实例,以启用在 Lettuce 中构建的 Brave 跟踪。tracing
ClientResources
Spring Cloud Sleuth 将提供 bean 的 traced 版本。如果你有自己的 bean 实现,请记住使用'ClientResourcesBuilderCustomizer'流进行自定义,如下所示:ClientResources
ClientResources.Builder
@Bean(destroyMethod = "shutdown")
DefaultClientResources myLettuceClientResources(ObjectProvider<ClientResourcesBuilderCustomizer> customizer) {
DefaultClientResources.Builder builder = DefaultClientResources.builder();
// setting up the builder manually
customizer.stream().forEach(c -> c.customize(builder));
return builder.build();
}
要禁用 Redis 支持,请将属性设置为 。spring.sleuth.redis.enabled
false
10. Runnable 和 Callable
此功能适用于所有 Tracer 实现。
如果将逻辑包装在 或 中,则可以将这些类包装在其 Sleuth 代表中,如以下示例所示:Runnable
Callable
Runnable
Runnable runnable = new Runnable() {
@Override
public void run() {
// do some work
}
@Override
public String toString() {
return "spanNameFromToStringMethod";
}
};
// Manual `TraceRunnable` creation with explicit "calculateTax" Span name
Runnable traceRunnable = new TraceRunnable(this.tracer, spanNamer, runnable, "calculateTax");
以下示例显示如何对 :Callable
Callable<String> callable = new Callable<String>() {
@Override
public String call() throws Exception {
return someLogic();
}
@Override
public String toString() {
return "spanNameFromToStringMethod";
}
};
// Manual `TraceCallable` creation with explicit "calculateTax" Span name
Callable<String> traceCallable = new TraceCallable<>(tracer, spanNamer, callable, "calculateTax");
这样,您可以确保为每次执行创建并关闭一个新的 span。
11. RPC
此功能可用于 Brave 跟踪器实施。
Sleuth 会自动配置 bean,作为 gRPC 或 Dubbo 等 RPC 插桩的基础。RpcTracing
如果需要自定义 RPC 跟踪的客户端/服务器采样,只需注册一个类型的 Bean,并为 Client 端采样器和服务器采样器命名该 Bean。brave.sampler.SamplerFunction<RpcRequest>
sleuthRpcClientSampler
sleuthRpcServerSampler
为方便起见,可以使用 and 注释来注入正确的 bean 或通过其静态 String 字段引用 bean 名称。@RpcClientSampler
@RpcServerSampler
NAME
前任。 下面是一个每秒跟踪 100 个“GetUserToken”服务器请求的采样器。 这不会为运行状况检查服务的请求启动新的跟踪。 其他请求将使用全局采样配置。
@Configuration(proxyBeanMethods = false)
class Config {
@Bean(name = RpcServerSampler.NAME)
SamplerFunction<RpcRequest> myRpcSampler() {
Matcher<RpcRequest> userAuth = and(serviceEquals("users.UserService"), methodEquals("GetUserToken"));
return RpcRuleSampler.newBuilder().putRule(serviceEquals("grpc.health.v1.Health"), Sampler.NEVER_SAMPLE)
.putRule(userAuth, RateLimitingSampler.create(100)).build();
}
}
11.1. Dubbo RPC 支持
通过与 Brave 的集成,Spring Cloud Sleuth 支持 Dubbo。
添加依赖项就足够了:brave-instrumentation-dubbo
<dependency>
<groupId>io.zipkin.brave</groupId>
<artifactId>brave-instrumentation-dubbo</artifactId>
</dependency>
您还需要设置包含以下内容的文件:dubbo.properties
dubbo.provider.filter=tracing
dubbo.consumer.filter=tracing
11.2. gRPC
Spring Cloud Sleuth 通过 Brave 跟踪器为 gRPC 提供检测。
您可以通过设置为 来完全禁用它。spring.sleuth.grpc.enabled
false
11.2.1. 变体 1
依赖
gRPC 集成依赖于两个外部库来检测客户端和服务器,并且这两个库都必须位于类路径上才能启用检测。 |
Maven 的:
<dependency>
<groupId>io.github.lognet</groupId>
<artifactId>grpc-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>io.zipkin.brave</groupId>
<artifactId>brave-instrumentation-grpc</artifactId>
</dependency>
Gradle:
compile("io.github.lognet:grpc-spring-boot-starter")
compile("io.zipkin.brave:brave-instrumentation-grpc")
服务器检测
Spring Cloud Sleuth 利用 grpc-spring-boot-starter 向所有带有 .@GRpcService
客户端检测
gRPC 客户端利用 a 来构建用于与 gRPC 服务器通信的 a。
本机提供静态方法作为构建实例的入口点,但是,这种机制不受 Spring 应用程序上下文的影响。ManagedChannelBuilder
ManagedChannel
ManagedChannelBuilder
ManagedChannel
Spring Cloud Sleuth 提供了一个可以通过 Spring 应用程序上下文自定义并由 gRPC 客户端注入的 s。在创建 ManagedChannel 实例时,必须使用此构建器。SpringAwareManagedChannelBuilder
|
Sleuth 创建了一个将 Brave 的客户端拦截器注入 .TracingManagedChannelBuilderCustomizer
SpringAwareManagedChannelBuilder
11.2.2. 变体 2
Grpc Spring Boot Starter 会自动检测是否存在 Spring Cloud Sleuth 和 Brave 的 gRPC 检测,并注册必要的客户端和/或服务器工具。
12. RxJava
此功能适用于所有 Tracer 实现。
我们注册了一个自定义的 RxJavaSchedulersHook
,它将所有实例包装在其 Sleuth 代表中,称为 .
钩子可以启动或继续 span,具体取决于在调度 Action 之前是否已经在进行跟踪。
要禁用自定义 ,请将 设置为 。Action0
TraceAction
RxJavaSchedulersHook
spring.sleuth.rxjava.schedulers.hook.enabled
false
您可以为不希望为其创建 span 的线程名称定义正则表达式列表。
为此,请在属性中提供以逗号分隔的正则表达式列表。spring.sleuth.rxjava.schedulers.ignoredthreads
反应式编程和 Sleuth 的建议方法是使用 Reactor 支持。 |
13. Spring Cloud 断路器
此功能适用于所有 Tracer 实现。
如果你在 Classpath 上有 Spring Cloud CircuitBreaker,我们将把传递的命令和回退包装在其跟踪表示中。
要禁用此检测,请将 .Supplier
Function
spring.sleuth.circuitbreaker.enabled
false