Spring Cloud Sleuth 集成

1. 异步通信

在本节中,我们将介绍如何自定义 Spring Cloud Sleuth 的异步通信。spring-doc.cn

1.1. @Async 带注释的方法

此功能适用于所有 Tracer 实现。spring-doc.cn

在 Spring Cloud Sleuth 中,我们检测与异步相关的组件,以便在线程之间传递跟踪信息。 您可以通过将 的值设置为 来禁用此行为。spring.sleuth.async.enabledfalsespring-doc.cn

如果您使用 注释方法,我们会自动修改现有的 Span,如下所示:@Asyncspring-doc.cn

  • 如果方法带有 注释,则注释的值是 Span 的名称。@SpanNamespring-doc.cn

  • 如果方法未使用 进行批注,则 Span 名称是带批注的方法名称。@SpanNamespring-doc.cn

  • span 使用方法的类名和方法名进行标记。spring-doc.cn

由于我们正在修改现有 span,如果您想保持其原始名称(例如,通过接收 HTTP 请求创建的 span) 您应该使用 Annotation 包装带 Comments 的方法,或者手动创建新的 Span。@Async@NewSpanspring-doc.cn

1.2. @Scheduled 带注释的方法

此功能适用于所有 Tracer 实现。spring-doc.cn

在 Spring Cloud Sleuth 中,我们检测计划的方法执行,以便在线程之间传递跟踪信息。 您可以通过将 的值设置为 来禁用此行为。spring.sleuth.scheduled.enabledfalsespring-doc.cn

如果您使用 来注释您的方法,我们会自动创建一个具有以下特征的新 span:@Scheduledspring-doc.cn

如果要跳过某些带注释类的 span 创建,可以使用与带注释类的完全限定名称匹配的正则表达式进行设置。@Scheduledspring.sleuth.scheduled.skipPattern@Scheduledspring-doc.cn

1.3. Executor、ExecutorService 和 ScheduledExecutorService

此功能适用于所有 Tracer 实现。spring-doc.cn

我们提供 、 和 。 这些实施在每次提交、调用或计划新任务时都会创建 span。LazyTraceExecutorTraceableExecutorServiceTraceableScheduledExecutorServicespring-doc.cn

以下示例显示了在使用 时如何传递跟踪信息:TraceableExecutorServiceCompletableFuturespring-doc.cn

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 名称列表。Executorspring.sleuth.async.ignored-beansspring-doc.cn

您可以通过将 的值设置为 来禁用此行为。spring.sleuth.async.enabledfalsespring-doc.cn

1.3.1. Executor 的自定义

有时,您需要设置 . 以下示例显示如何设置此类自定义 :AsyncExecutorExecutorspring-doc.cn

@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.enabledfalsespring-doc.cn

2.1. 同步 REST 模板

此功能适用于所有 Tracer 实现。spring-doc.cn

我们注入一个拦截器,以确保所有跟踪信息都传递给请求。 每次进行调用时,都会创建一个新的 Span。 收到响应后,它将关闭。 要阻止同步功能,请设置为 。RestTemplateRestTemplatespring.sleuth.web.client.enabledfalsespring-doc.cn

您必须注册为 bean,以便注入拦截器。 如果使用关键字创建实例,则插桩不起作用。RestTemplateRestTemplatenew

2.2. 异步 REST 模板

此功能适用于所有 Tracer 实现。spring-doc.cn

从 Sleuth 开始,我们不再注册 type 的 bean。 创建这样的 bean 取决于您。 然后我们对其进行检测。2.0.0AsyncRestTemplate

要阻止要素,请设置为 。 要禁用创建默认 ,请设置为 。 如果您根本不想创建,请设置为 。AsyncRestTemplatespring.sleuth.web.async.client.enabledfalseTraceAsyncClientHttpRequestFactoryWrapperspring.sleuth.web.async.client.factory.enabledfalseAsyncRestClientspring.sleuth.web.async.client.template.enabledfalsespring-doc.cn

2.2.1. 多个异步 Rest 模板

有时,您需要使用 Asynchronous Rest Template 的多个实现。 在以下代码段中,您可以看到如何设置此类自定义的示例:AsyncRestTemplatespring-doc.cn

@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 实现。spring-doc.cn

我们注入一个 implementation 来创建一个 span,并通过 on-success 和 on-error 回调来关闭客户端 span。ExchangeFilterFunctionspring-doc.cn

要阻止此功能,请设置为 。spring.sleuth.web.client.enabledfalsespring-doc.cn

您必须注册为 bean,以便应用跟踪检测。 如果使用关键字创建实例,则插桩不起作用。WebClientWebClientnew

2.2.3. 遍历

此功能适用于所有 Tracer 实现。spring-doc.cn

如果使用 Traverson 库,则可以将 as 注入到 Traverson 对象中。 由于 已被拦截,因此您可以在客户端中获得对跟踪的完全支持。 以下伪代码显示了如何执行此操作:RestTemplateRestTemplatespring-doc.cn

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

此功能可用于 Brave 跟踪器实施。spring-doc.cn

我们检测 and,以便将跟踪上下文注入到发送的请求中。HttpClientBuilderHttpAsyncClientBuilderspring-doc.cn

要阻止这些功能,请设置为 。spring.sleuth.web.client.enabledfalsespring-doc.cn

2.2.5. Netty HttpClient 客户端

此功能适用于所有 Tracer 实现。spring-doc.cn

我们检测 Netty 的 .HttpClientspring-doc.cn

要阻止此功能,请设置为 。spring.sleuth.web.client.enabledfalsespring-doc.cn

您必须注册为 Bean,以便进行检测。 如果使用关键字创建实例,则插桩不起作用。HttpClientHttpClientnew

2.2.6. UserInfoRestTemplateCustomizer

此功能适用于所有 Tracer 实现。spring-doc.cn

我们检测 Spring Security 的 .UserInfoRestTemplateCustomizerspring-doc.cn

要阻止此功能,请设置为 。spring.sleuth.web.client.enabledfalsespring-doc.cn

3. HTTP 服务器集成

可以通过将值等于 的属性设置为来禁用此部分中的功能。spring.sleuth.web.enabledfalsespring-doc.cn

3.1. HTTP 过滤器

此功能适用于所有 Tracer 实现。spring-doc.cn

通过 ,所有采样的传入请求都会导致创建一个 Span。 您可以通过设置属性来配置要跳过的 URI。 如果你有 onclasspath,则其值 of 将附加到提供的 skip 模式中。 如果您想重用 Sleuth 的默认跳过模式并仅附加您自己的模式,请使用 .TracingFilterspring.sleuth.web.skipPatternManagementServerPropertiescontextPathspring.sleuth.web.additionalSkipPatternspring-doc.cn

默认情况下,所有 Spring Boot Actuator 端点都会自动添加到跳过模式中。 如果要禁用此行为,请将 .spring.sleuth.web.ignore-auto-configured-skip-patternstruespring-doc.cn

要更改跟踪过滤器的注册顺序,请设置属性。spring.sleuth.web.filter-orderspring-doc.cn

要禁用记录未捕获异常的过滤器,您可以禁用该属性。spring.sleuth.web.exception-throwing-filter-enabledspring-doc.cn

3.2. HandlerInterceptor

此功能适用于所有 Tracer 实现。spring-doc.cn

由于我们希望 span 名称精确,因此我们使用 a 来包装 existing 或直接添加到 existing . 这会向给定的 . 如果 没有看到此属性,它会创建一个 “fallback” 范围,这是在服务器端创建的附加范围,以便在 UI 中正确显示跟踪。 如果发生这种情况,则可能缺少 instrumentation。 在这种情况下,请在 Spring Cloud Sleuth 中提交问题。TraceHandlerInterceptorHandlerInterceptorHandlerInterceptorsTraceHandlerInterceptorHttpServletRequestTracingFilterspring-doc.cn

3.3. 异步 Servlet 支持

此功能适用于所有 Tracer 实现。spring-doc.cn

如果您的控制器返回 a 或 a ,Spring Cloud Sleuth 将继续现有 span,而不是创建一个新的 span。CallableWebAsyncTaskspring-doc.cn

3.4. WebFlux 支持

此功能适用于所有 Tracer 实现。spring-doc.cn

通过 ,所有采样的传入请求都会导致创建一个 Span。 该 Span 的名称是 + 请求发送到的路径。 例如,如果请求被发送到 ,则名称为 。 您可以使用该属性配置要跳过的 URI。 如果你在 Classpath 上,它的值 of 将附加到提供的 skip 模式中。 如果要重用 Sleuth 的默认跳过模式并附加您自己的 skip,请使用 .TraceWebFilterhttp:/this/thathttp:/this/thatspring.sleuth.web.skipPatternManagementServerPropertiescontextPathspring.sleuth.web.additionalSkipPatternspring-doc.cn

为了在性能和上下文传播方面获得最佳结果,我们建议您将 . 为了执行范围内具有 span 的代码,您可以调用 . 例:spring.sleuth.reactor.instrumentation-typeMANUALWebFluxSleuthOperators.withSpanInScopespring-doc.cn

@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-orderspring-doc.cn

4. 消息

可以通过将值等于 的属性设置为来禁用此部分中的功能。spring.sleuth.messaging.enabledfalsespring-doc.cn

4.1. Spring 集成

此功能适用于所有 Tracer 实现。spring-doc.cn

Spring Cloud Sleuth 与 Spring 集成。 它为 publish 和 subscribe 事件创建 span。 要禁用 Spring 集成插桩,请设置为 。spring.sleuth.integration.enabledfalsespring-doc.cn

您可以提供模式以显式提供要包含以进行跟踪的通道的名称。 默认情况下,包括除 channel 之外的所有通道。spring.sleuth.integration.patternshystrixStreamOutputspring-doc.cn

使用 构建 Spring Integration 时,必须使用 的 未跟踪版本 . 装饰 Spring Integration Executor Channel 会导致 span 被不正确地关闭。ExecutorIntegrationFlowExecutorTraceableExecutorService

如果要自定义从消息 Headers 读取和写入 tracing 上下文的方式,则注册 Bean 类型就足够了:spring-doc.cn

  • Propagator.Setter<MessageHeaderAccessor>- 用于将标头写入消息spring-doc.cn

  • Propagator.Getter<MessageHeaderAccessor>- 用于从消息中读取标头spring-doc.cn

4.1.2. 自定义消息传递 span

为了更改默认的 span 名称和标签,只需注册一个 bean 类型的 .您还可以 override the existing 以扩展 existing 行为。MessageSpanCustomizerDefaultMessageSpanCustomizerspring-doc.cn

@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-doc.cn

Spring Cloud Sleuth 可以检测 Spring Cloud Function。 实现它的方法是提供一个 or 或,将 a 作为参数,例如 . 如果类型不是,则不会进行插桩。 在处理基于 Reactor 的流时,不会进行开箱即用的 instrumentation - 例如 .FunctionConsumerSupplierMessageFunction<Message<String>, Message<Integer>>MessageFunction<Flux<Message<String>>, Flux<Message<Integer>>>spring-doc.cn

由于 Spring Cloud Stream 重用了 Spring Cloud Function,因此您将立即获得 instrumentation。spring-doc.cn

您可以通过将 的值设置为 来禁用此行为。spring.sleuth.function.enabledfalsespring-doc.cn

为了使用反应式 Stream 函数,您可以利用 Util 类,该类允许您操作输入和输出消息,以便继续跟踪上下文并在跟踪上下文中执行自定义代码。MessagingSleuthOperatorsspring-doc.cn

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 跟踪器实施。spring-doc.cn

我们检测 ,以便将跟踪标头注入到消息中。RabbitTemplatespring-doc.cn

要阻止此功能,请设置为 。spring.sleuth.messaging.rabbit.enabledfalsespring-doc.cn

4.4. Spring Kafka

此功能可用于 Brave 跟踪器实施。spring-doc.cn

我们对 Spring Kafka 进行检测,以便将跟踪标头注入到创建的 Spring Kafka 和 .ProducerFactoryConsumerFactoryProducerConsumerspring-doc.cn

要阻止此功能,请设置为 。spring.sleuth.messaging.kafka.enabledfalsespring-doc.cn

4.5. Spring Kafka 流

此功能可用于 Brave 跟踪器实施。spring-doc.cn

我们检测 ,以便将跟踪标头注入到 bean 中,从而允许通过额外的 and 方法进行进一步的检测。KafkaStreamsKafkaClientSupplierProducerConsumer`s. A `KafkaStreamsTracingTransformerSupplierProcessorSupplierspring-doc.cn

要阻止此功能,请设置为 。spring.sleuth.messaging.kafka.streams.enabledfalsespring-doc.cn

4.6. Spring JMS

此功能可用于 Brave 跟踪器实施。spring-doc.cn

我们检测 ,以便将跟踪标头注入到消息中。 我们还在消费者端支持带注释的方法。JmsTemplate@JmsListenerspring-doc.cn

要阻止此功能,请设置为 。spring.sleuth.messaging.jms.enabledfalsespring-doc.cn

我们不支持 JMS 的行李传播

5. 开放假

此功能适用于所有 Tracer 实现。spring-doc.cn

默认情况下,Spring Cloud Sleuth 通过 . 您可以通过设置为 来完全禁用它。 如果这样做,则不会发生与 Feign 相关的插桩。TraceFeignClientAutoConfigurationspring.sleuth.feign.enabledfalsespring-doc.cn

Feign 插桩的一部分是通过 . 您可以通过设置为 来禁用它。 如果将其设置为 Spring Cloud Sleuth ,则不会检测任何自定义 Feign 组件。 但是,所有默认插桩仍然存在。FeignBeanPostProcessorspring.sleuth.feign.processor.enabledfalsefalsespring-doc.cn

6. 开放追踪

此功能适用于所有 Tracer 实现。spring-doc.cn

Spring Cloud Sleuth 与 OpenTracing 兼容。 如果你在 Classpath 上有 OpenTracing,我们会自动注册 OpenTracing bean。 如果要禁用此功能,请设置为Tracerspring.sleuth.opentracing.enabledfalsespring-doc.cn

7. Quartz

此功能适用于所有 Tracer 实现。spring-doc.cn

我们通过向 Quartz Scheduler 添加 Job/Trigger 侦听器来检测 quartz 作业。spring-doc.cn

要关闭此功能,请将该属性设置为 。spring.sleuth.quartz.enabledfalsespring-doc.cn

8. 反应器

此功能适用于所有 Tracer 实现。spring-doc.cn

我们有以下模式来检测基于 reactor 的应用程序,可以通过 property 进行设置:spring.sleuth.reactor.instrumentation-typespring-doc.cn

  • DECORATE_QUEUES- 使用新的 Reactor 队列包装机制 (Reactor 3.4.3),我们正在检测 Reactor 切换线程的方式。这应该会导致功能对等,但对性能的影响较小。ON_EACHspring-doc.cn

  • DECORATE_ON_EACH- 将每个 Reactor 运算符包装在跟踪表示中。 在大多数情况下传递跟踪上下文。 此模式可能会导致性能急剧下降。spring-doc.cn

  • DECORATE_ON_LAST- 将最后一个 Reactor 运算符包装在跟踪表示中。 在某些情况下传递跟踪上下文,因此访问 MDC 上下文可能不起作用。 此模式可能会导致中等性能下降。spring-doc.cn

  • MANUAL- 以侵入性最小的方式包装每个 Reactor,而不传递跟踪上下文。 这取决于用户来做。spring-doc.cn

当前默认值是出于向后兼容性的原因,但我们鼓励用户迁移到检测并从 和 中获利。 性能改进可能是显著的。 例:ON_EACHMANUALWebFluxSleuthOperatorsMessagingSleuthOperatorsspring-doc.cn

@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 跟踪器实施。spring-doc.cn

我们将 property 设置为 Lettuce 实例,以启用在 Lettuce 中构建的 Brave 跟踪。tracingClientResourcesspring-doc.cn

Spring Cloud Sleuth 将提供 bean 的 traced 版本。如果你有自己的 bean 实现,请记住使用'ClientResourcesBuilderCustomizer'流进行自定义,如下所示:ClientResourcesClientResources.Builderspring-doc.cn

@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.enabledfalsespring-doc.cn

10. Runnable 和 Callable

此功能适用于所有 Tracer 实现。spring-doc.cn

如果将逻辑包装在 或 中,则可以将这些类包装在其 Sleuth 代表中,如以下示例所示:RunnableCallableRunnablespring-doc.cn

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

以下示例显示如何对 :Callablespring-doc.cn

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。spring-doc.cn

11. RPC

此功能可用于 Brave 跟踪器实施。spring-doc.cn

Sleuth 会自动配置 bean,作为 gRPC 或 Dubbo 等 RPC 插桩的基础。RpcTracingspring-doc.cn

如果需要自定义 RPC 跟踪的客户端/服务器采样,只需注册一个类型的 Bean,并为 Client 端采样器和服务器采样器命名该 Bean。brave.sampler.SamplerFunction<RpcRequest>sleuthRpcClientSamplersleuthRpcServerSamplerspring-doc.cn

为方便起见,可以使用 and 注释来注入正确的 bean 或通过其静态 String 字段引用 bean 名称。@RpcClientSampler@RpcServerSamplerNAMEspring-doc.cn

前任。 下面是一个每秒跟踪 100 个“GetUserToken”服务器请求的采样器。 这不会为运行状况检查服务的请求启动新的跟踪。 其他请求将使用全局采样配置。spring-doc.cn

@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-dubbospring-doc.cn

<dependency>
    <groupId>io.zipkin.brave</groupId>
    <artifactId>brave-instrumentation-dubbo</artifactId>
</dependency>

您还需要设置包含以下内容的文件:dubbo.propertiesspring-doc.cn

dubbo.provider.filter=tracing
dubbo.consumer.filter=tracing

您可以在此处阅读有关 Brave - Dubbo 集成的更多信息。 Spring Cloud Sleuth 和 Dubbo 的示例可以在这里找到。spring-doc.cn

11.2. gRPC

Spring Cloud Sleuth 通过 Brave 跟踪器为 gRPC 提供检测。 您可以通过设置为 来完全禁用它。spring.sleuth.grpc.enabledfalsespring-doc.cn

11.2.1. 变体 1

依赖
gRPC 集成依赖于两个外部库来检测客户端和服务器,并且这两个库都必须位于类路径上才能启用检测。

Maven 的:spring-doc.cn

        <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:spring-doc.cn

    compile("io.github.lognet:grpc-spring-boot-starter")
    compile("io.zipkin.brave:brave-instrumentation-grpc")
服务器检测

Spring Cloud Sleuth 利用 grpc-spring-boot-starter 向所有带有 .@GRpcServicespring-doc.cn

客户端检测

gRPC 客户端利用 a 来构建用于与 gRPC 服务器通信的 a。 本机提供静态方法作为构建实例的入口点,但是,这种机制不受 Spring 应用程序上下文的影响。ManagedChannelBuilderManagedChannelManagedChannelBuilderManagedChannelspring-doc.cn

Spring Cloud Sleuth 提供了一个可以通过 Spring 应用程序上下文自定义并由 gRPC 客户端注入的 s。在创建 ManagedChannel 实例时,必须使用此构建器。SpringAwareManagedChannelBuilder

Sleuth 创建了一个将 Brave 的客户端拦截器注入 .TracingManagedChannelBuilderCustomizerSpringAwareManagedChannelBuilderspring-doc.cn

11.2.2. 变体 2

Grpc Spring Boot Starter 会自动检测是否存在 Spring Cloud Sleuth 和 Brave 的 gRPC 检测,并注册必要的客户端和/或服务器工具。spring-doc.cn

12. RxJava

此功能适用于所有 Tracer 实现。spring-doc.cn

我们注册了一个自定义的 RxJavaSchedulersHook,它将所有实例包装在其 Sleuth 代表中,称为 . 钩子可以启动或继续 span,具体取决于在调度 Action 之前是否已经在进行跟踪。 要禁用自定义 ,请将 设置为 。Action0TraceActionRxJavaSchedulersHookspring.sleuth.rxjava.schedulers.hook.enabledfalsespring-doc.cn

您可以为不希望为其创建 span 的线程名称定义正则表达式列表。 为此,请在属性中提供以逗号分隔的正则表达式列表。spring.sleuth.rxjava.schedulers.ignoredthreadsspring-doc.cn

反应式编程和 Sleuth 的建议方法是使用 Reactor 支持。

13. Spring Cloud 断路器

此功能适用于所有 Tracer 实现。spring-doc.cn

如果你在 Classpath 上有 Spring Cloud CircuitBreaker,我们将把传递的命令和回退包装在其跟踪表示中。 要禁用此检测,请将 .SupplierFunctionspring.sleuth.circuitbreaker.enabledfalsespring-doc.cn