Spring Cloud Sleuth 3.1.0 已发布!

工程 | Marcin Grzejszczak | 2021年12月7日 | ...

随着Spring Cloud 2021.0.0(又名Jubilee)发布火车的发布,我们非常高兴地宣布Spring Cloud Sleuth 3.1.0的正式可用性。在这篇博文中,我们将描述最显著的已发布功能。

以下是最显著的功能列表,我们将在本文的后续部分进行详细阐述。

JDBC

我们以跟踪表示的形式修饰 DataSource。我们将实际代理委托给 p6spydatasource-proxy。要使用此功能,您需要在类路径中包含它们。

JDBC example

查看文档了解更多详情。

此处可以找到一个展示此集成的示例。

Tomcat Valve

此更改背后的主要原因是,直到 Sleuth 3.1,您的 Tomcat 日志中没有任何跟踪信息。通过此更改,我们正在检测 Tomcat,因此我们在请求生命周期的早期阶段,并且可以用跟踪信息检测所有可能的日志。

MVC example

查看文档了解更多详情。

此处可以找到一个展示此集成的示例。

Spring Vault

我们正在检测 Spring Vault 用于与 Vault 通信的 RestTemplateWebClient 实例。

Vault example

查看文档了解更多详情。

此处可以找到一个展示此与 RestTemplate 集成的示例。

此处可以找到一个展示此与 WebClient 集成的示例。

自动标签表生成用于文档

在跟踪世界中,最令人沮丧的事情莫过于创建了一个 Span 却未启动它,或者未停止它。我们受够了这种情况……我们面临的另一个挑战是我们甚至不记得我们创建了多少 Span,它们的名称是什么,以及它们设置了多少标签/事件。

我们决定改变 Sleuth 中的编码方式,以便引入某些自动化。我们对代码进行一次检测,但在测试时可以打开额外的断言,以验证 Span 是否已启动和停止等。此外,在文档构建时,我们解析源并构建一个 Span 表以及一些详细信息。

您可以查看文档以查看该自动化的结果。

Spring Cloud Deployer

如果您的类路径上运行着 Spring Cloud Deployer,我们将把 AppDeployer 包装成跟踪表示。我们以默认间隔轮询应用程序的状态。

Deployer example

查看文档了解更多详情。

此处可以找到一个展示此集成的示例。

R2DBC

如果您的类路径上有 R2DBC Proxy,我们将检测 ConnectionFactory,使其包含一个自定义的 ProxyExecutionListener

R2DBC example

查看文档了解更多详情。

此处可以找到一个展示此集成的示例。

Kafka 和 Reactor Kafka

我们修饰 Kafka 客户端(KafkaProducerKafkaConsumer),为每个生成或消费的事件创建一个 Span。我们还提供 TracingKafkaProducerFactoryTracingKafkaConsumerFactory,用于 Reactor Kafka 客户端(分别是 KafkaSenderKafkaReceiver)。此外,我们还修饰上下文中可用的任何 Spring Kafka ProducerFactoryConsumerFactory

Kafka example

查看文档了解更多详情。

此处可以找到一个展示 Kafka 生产者集成的示例。

此处可以找到一个展示 Kafka 消费者集成的示例。

此处可以找到一个展示 Kafka 响应式生产者集成的示例。

此处可以找到一个展示 Kafka 响应式消费者集成的示例。

Spring TX

如果您的类路径上有 Spring Tx,我们将检测 PlatformTransactionManagerReactiveTransactionManager,以便在每次创建新事务时创建一个 Span。

TX example

查看文档了解更多详情。

此处可以找到一个展示此集成的示例。

Spring Batch

如果您的类路径上运行着 Spring Batch,我们将包装 StepBuilderFactoryJobBuilderFactory 以传播跟踪上下文。

Batch example

查看文档了解更多详情。

此处可以找到一个展示此集成的示例。

RSocket

如果您的类路径上运行着 Spring RSocket,我们将包装入站和出站通信,以通过元数据传播跟踪上下文。

RSocket example

查看文档了解更多详情。

此处可以找到一个展示 RSocket 服务器集成的示例。

此处可以找到一个展示 RSocket 客户端集成的示例。

Spring Cloud Task

如果您的类路径上运行着 Spring Cloud Task,我们将检测 TaskExecutionListenerCommandLineRunnerApplicationRunner

Task example

此处可以找到一个展示此集成的示例。

Spring Cloud Config

如果您的类路径上运行着 Spring Cloud Config Server,我们将把 EnvironmentRepository 包装在一个 Span 中。

Config Server example

查看文档了解更多详情。

此处可以找到一个展示此集成的示例。

Spring Cloud CircuitBreaker Reactive

如果您的类路径上有 Spring Cloud CircuitBreaker,我们将把传入的命令 Supplier 和回退 Function 包装在其跟踪表示中。

CircuitBreaker Reactive example

查看文档了解更多详情。

此处可以找到一个展示此集成的示例。

Cassandra

如果您的类路径上有 Spring Data Cassandra,我们将检测 Cassandra 的 CqlSessionReactiveSession 接口,并提供我们自己的 RequestTracker 实现。

Cassandra example

查看文档了解更多详情。

此处可以找到一个展示非响应式 Cassandra 集成的示例。

此处可以找到一个展示响应式 Cassandra 集成的示例。

Spring Session

如果您的类路径上有 Spring Session,我们将检测 Session 仓库,它将所有操作包装在一个 Span 中。

Session example

查看文档了解更多详情。

此处可以找到一个展示此集成的示例。

Spring Security

如果您的类路径上有 Spring Security,我们将创建一个 SecurityContextChangedListener 的实现,当上下文发生更改时,它会使用一个事件来注释当前 Span。

Security example

此处可以找到一个展示此集成的示例。

Prometheus Exemplars

Exemplar 是附加到指标的元数据(请参阅:Prometheus Exemplars),例如:traceId,以便您可以为您的指标获取一个示例 traceId。

我们正在将 Sleuth 与 Prometheus 集成,这样如果有人使用 Prometheus Java 客户端,他们就可以使用 Sleuth 获取 Exemplar。这个问题也与 Micrometer Exemplar 支持有关,请参阅

此处您可以阅读更多关于此问题的信息。

关于此功能,有几点需要注意:

  • Micrometer 目前不支持 Exemplar,我们计划在下一个版本中实现它(在此期间您可以使用 Prometheus 客户端)
  • 这是 Prometheus 中的一个实验性功能,您需要使用功能标志显式启用它(请参阅:示例
  • 同样,您需要在 Grafana 数据源中配置它,并定义跟踪后端(请参阅:Zipkin 示例)的 URL 模式。
  • 您还需要确保在仪表板的面板上启用了 exemplar 标志,您希望在该面板中使用 exemplar(请参阅:示例仪表板
  • 您的跟踪后端(例如:Zipkin)无需任何配置,您只需要知道后端用于引用 traceId 的 URL 模式(请参阅上面的 URL 模式)

Exemplars example

Exemplars example

Spring Cloud Stream Reactive

Spring Cloud Sleuth 可以检测 Spring Cloud Function。由于 Spring Cloud Stream 使用 Spring Cloud Function,您将开箱即用地获得消息传递检测。

实现方式是提供一个以 Message 作为参数的 FunctionConsumerSupplier,例如 Function<Message<String>, Message<Integer>>

如果类型不是 Message,则不会进行检测。

对于响应式 Consumer<Flux<Message<?>>>,请记住在调用 .subscribe() 之前手动关闭 Span 并清除上下文。

Stream reactive example

此处可以找到一个展示生产者集成的示例。

此处可以找到一个展示消费者集成的示例。

响应式 Mongo

我们添加了命令监听器,将所有命令包装在一个 Span 中。它适用于响应式和非响应式情况。

Reactive Mongo example

此处可以找到一个展示此集成的示例。

抽象的 Redis 检测

通过此 PR,Redis 检测可以用于其他 Tracer,例如 OpenTelemetry。

用于存储跟踪的自定义 Actuator

Spring Cloud Sleuth 附带一个 Traces Actuator 端点,可以存储已完成的 Span。该端点可以通过 HTTP Get 方法查询以简单检索存储的 Span 列表,或者通过 HTTP Post 方法查询以检索列表并清除它。

查看文档了解更多详情。

保持联系!

此版本引入了许多检测功能。我们很乐意看到您的跟踪!您可以访问我们的 Gitter 并粘贴您的跟踪屏幕截图,以便我们分析如何改进它。

如有任何疑问,请随时联系我们

获取 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

领先一步

VMware 提供培训和认证,助您加速进步。

了解更多

获得支持

Tanzu Spring 提供 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件,只需一份简单的订阅。

了解更多

即将举行的活动

查看 Spring 社区所有即将举行的活动。

查看所有