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 通信的 `RestTemplate` 或 `WebClient` 实例。

Vault example

查看 文档 以了解更多详细信息。

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

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

自动生成文档的标签表

在追踪领域,没有什么比创建跨度却未启动或未停止更令人沮丧的了。我们已经厌倦了这种情况……我们面临的另一个挑战是我们甚至不记得我们创建了多少跨度,它们的名称是什么以及在它们上面设置了多少标签/事件。

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

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

Spring Cloud Deployer

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

Deployer example

查看 文档 以了解更多详细信息。

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

R2DBC

如果您的类路径中包含 R2DBC Proxy,我们将监控 `ConnectionFactory`,使其包含自定义的 `ProxyExecutionListener`。

R2DBC example

查看 文档 以了解更多详细信息。

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

Kafka 和 Reactor Kafka

我们装饰 Kafka 客户端(`KafkaProducer` 和 `KafkaConsumer`)以对生成的或使用的每个事件创建一个跨度。我们还提供 `TracingKafkaProducerFactory` 和 `TracingKafkaConsumerFactory` 用于 Reactor Kafka 客户端(分别为 `KafkaSender` 和 `KafkaReceiver`)。此外,我们还装饰上下文中可用的任何 Spring Kafka `ProducerFactory` 和 `ConsumerFactory`。

Kafka example

查看 文档 以了解更多详细信息。

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

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

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

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

Spring TX

如果你的classpath中包含Spring Tx,我们将对PlatformTransactionManagerReactiveTransactionManager进行增强,以便在创建新事务时创建一个span。

TX example

查看文档了解更多细节。

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

Spring Batch

如果你的classpath中运行着Spring Batch,我们将包装StepBuilderFactoryJobBuilderFactory以传播追踪上下文。

Batch example

查看文档了解更多细节。

这里你可以找到一个展示此集成的示例。

RSocket

如果你的classpath中运行着Spring RSocket,我们将包装进出站通信,通过元数据传播追踪上下文。

RSocket example

查看文档了解更多细节。

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

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

Spring Cloud Task

如果你的classpath中运行着Spring Cloud Task,我们将增强TaskExecutionListenerCommandLineRunnerApplicationRunner

Task example

这里你可以找到一个展示此集成的示例。

Spring Cloud Config

如果你的classpath中运行着Spring Cloud Config Server,我们将用span包装EnvironmentRepository

Config Server example

查看文档了解更多细节。

这里你可以找到一个展示此集成的示例。

Spring Cloud CircuitBreaker Reactive

如果你的classpath中包含Spring Cloud CircuitBreaker,我们将使用其追踪表示法包装传递的命令Supplier和回退Function

CircuitBreaker Reactive example

查看文档了解更多细节。

这里你可以找到一个展示此集成的示例。

Cassandra

如果你的classpath中包含Spring Data Cassandra,我们将增强Cassandra的CqlSessionReactiveSession接口,并提供我们自己的RequestTracker实现。

Cassandra example

查看文档了解更多细节。

这里你可以找到一个展示非反应式Cassandra此集成的示例。

这里你可以找到一个展示反应式Cassandra此集成的示例。

Spring Session

如果你的classpath中包含Spring Session,我们将增强Session存储库,用span包装所有操作。

Session example

查看文档了解更多细节。

这里你可以找到一个展示此集成的示例。

Spring Security

如果你的classpath中包含Spring Security,我们将创建一个SecurityContextChangedListener实现,在上下文更改时用事件注释当前span。

Security example

这里你可以找到一个展示此集成的示例。

Prometheus Exemplars

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

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

这里你可以阅读更多关于此问题的资料。

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

  • Micrometer目前不支持Exemplars,我们计划在下一个版本中实现(在此期间可以使用Prometheus客户端)。
  • 这是Prometheus中的一个实验性功能,你需要使用功能标志显式启用它(参见:示例)。
  • 同样,你需要在你的Grafana数据源中配置它,并为你的追踪后端定义URL模式(参见:使用Zipkin的示例)。
  • 你还需要确保在要使用Exemplars的仪表盘面板上启用了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,你将开箱即用地获得消息传递增强。

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

如果类型**不是**Message,则**不会**进行增强。

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

Stream reactive example

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

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

响应式Mongo

我们添加了命令监听器,它将所有命令都包装在一个跨度内。这对于响应式和非响应式情况都有效。

Reactive Mongo example

这里您可以找到一个展示此集成的示例。

抽象的Redis监控

通过这个PR,Redis监控可以用于其他追踪器,例如OpenTelemetry。

用于存储追踪的自定义Actuator

Spring Cloud Sleuth带有一个追踪Actuator端点,可以存储已完成的跨度。可以通过HTTP GET方法查询该端点以简单地检索存储的跨度列表,也可以通过HTTP POST方法检索列表并清除它。

查看文档以了解更多详细信息。

保持联系!

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

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

获取Spring新闻

关注Spring新闻

订阅

领先一步

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

了解更多

获取支持

Tanzu Spring在一个简单的订阅中提供对OpenJDK™、Spring和Apache Tomcat®的支持和二进制文件。

了解更多

即将举行的活动

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

查看全部