Spring Cloud Sleuth 3.1.0 发布了!

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

随着 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 和 fallback 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

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

我们将 Sleuth 与 Prometheus 集成,以便如果有人使用 Prometheus Java Client,他们可以使用 Sleuth 获取 Exemplars。此问题也与 Micrometer Exemplars Support 相关,参见

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

关于此特性,有几点需要注意:

  • Micrometer 目前不支持 Exemplars,我们计划在下一版本中支持(在此期间您可以使用 Prometheus client)
  • 这是 Prometheus 中的一个实验性特性,您需要使用一个特性标志明确启用它(参见:示例
  • 同样,您需要在 Grafana 数据源中配置它,并为您的跟踪后端定义 URL 模式(参见:使用 Zipkin 的示例
  • 您还需要确保在仪表板面板上启用 Exemplar 标志,您想在该面板上使用 Exemplars(参见:仪表板示例
  • 您的跟踪后端(例如: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 提供了一个用于存储已完成 span 的 traces Actuator 端点。该端点可以通过 HTTP GET 方法查询以简单地检索存储的 span 列表,也可以通过 HTTP POST 方法查询以检索列表并清除它。

查看文档了解更多详情。

保持联系!

本次发布引入了许多检测功能。我们非常想看到您的跟踪信息!您可以前往我们的 Gitter 粘贴您的跟踪信息截图,以便我们分析如何改进。

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

获取 Spring 新闻通讯

订阅 Spring 新闻通讯以保持联系

订阅

领先一步

VMware 提供培训和认证服务,助您加速发展。

了解更多

获取支持

Tanzu Spring 通过一项简单的订阅,为 OpenJDK™、Spring 和 Apache Tomcat® 提供支持和二进制文件。

了解更多

近期活动

查看 Spring 社区的所有近期活动。

查看全部