领先一步
VMware 提供培训和认证服务,助您加速发展。
了解更多随着 Spring Cloud 2021.0.0 (又名 Jubilee) 发布列车的发布,我们非常高兴地宣布 Spring Cloud Sleuth 3.1.0 的正式可用。在这篇博客文章中,我们将介绍最值得关注的已发布特性。
以下是最值得关注的特性列表,我们将在本文后续部分详细介绍它们。
我们正在以跟踪表示形式装饰 DataSource
。我们将实际代理委托给 p6spy 或 datasource-proxy。要使用此特性,您需要在类路径中包含它们。
查看文档了解更多详情。
这里您可以找到展示此集成的示例。
这项更改的主要驱动力在于,直到 Sleuth 3.1 版本,您的 Tomcat 日志中都没有任何跟踪信息。通过这项更改,我们对 Tomcat 进行了检测,从而在请求生命周期中更早地介入,可以用跟踪信息来检测所有可能的日志。
查看文档了解更多详情。
这里您可以找到展示此集成的示例。
我们正在检测 Spring Vault 用于与 Vault 通信的 RestTemplate
或 WebClient
实例。
查看文档了解更多详情。
这里您可以找到展示 RestTemplate
集成的示例。
这里您可以找到展示 WebClient
集成的示例。
在跟踪领域,没有什么比创建一个 span 却忘记启动或停止它更令人沮丧的了。我们已经受够了这种情况……我们面临的另一个挑战是,我们甚至记不清创建了多少个 span,它们的名称是什么,以及在它们上面设置了多少标签/事件。
我们决定改变在 Sleuth 中编写代码的方式,以便引入某些自动化。我们只需检测一次代码,但在测试时可以开启额外的断言,验证 span 是否已启动和停止等。此外,在文档构建时,我们会解析源代码,并构建一个包含 span 及其详细信息的表格。
您可以查看文档,了解此自动化的结果。
如果您的类路径中运行着 Spring Cloud Deployer,我们将 AppDeployer
包装在跟踪表示中。我们以默认间隔轮询应用程序的状态。
查看文档了解更多详情。
这里您可以找到展示此集成的示例。
如果您的类路径中有 R2DBC Proxy,我们将检测 ConnectionFactory
,以便它包含一个自定义的 ProxyExecutionListener
。
查看文档了解更多详情。
这里您可以找到展示此集成的示例。
我们装饰 Kafka 客户端(KafkaProducer
和 KafkaConsumer
),为每个生产或消费的事件创建一个 span。我们还提供了 TracingKafkaProducerFactory
和 TracingKafkaConsumerFactory
,可用于 Reactor Kafka 客户端(分别为 KafkaSender
和 KafkaReceiver
)。此外,我们还装饰了上下文中可用的任何 Spring Kafka ProducerFactory
和 ConsumerFactory
。
查看文档了解更多详情。
这里您可以找到展示 Kafka 生产者集成的示例。
这里您可以找到展示 Kafka 消费者集成的示例。
这里您可以找到展示 Kafka 响应式生产者集成的示例。
这里您可以找到展示 Kafka 响应式消费者集成的示例。
如果您的类路径中有 Spring TX,我们将检测 PlatformTransactionManager
和 ReactiveTransactionManager
,以便在新事务创建时生成一个 span。
查看文档了解更多详情。
这里您可以找到展示此集成的示例。
如果您的类路径中运行着 Spring Batch,我们将 StepBuilderFactory
和 JobBuilderFactory
包装起来以传播跟踪上下文。
查看文档了解更多详情。
这里您可以找到展示此集成的示例。
如果您的类路径中运行着 Spring RSocket,我们将入站和出站通信包装起来,通过元数据传播跟踪上下文。
查看文档了解更多详情。
这里您可以找到展示 RSocket 服务器集成的示例。
这里您可以找到展示 RSocket 客户端集成的示例。
如果您的类路径中运行着 Spring Cloud Task,我们将检测 TaskExecutionListener
、CommandLineRunner
和 ApplicationRunner
。
这里您可以找到展示此集成的示例。
如果您的类路径中运行着 Spring Cloud Config Server,我们将把 EnvironmentRepository
包装在 span 中。
查看文档了解更多详情。
这里您可以找到展示此集成的示例。
如果您的类路径中有 Spring Cloud CircuitBreaker,我们将把传入的命令 Supplier
和 fallback Function
包装在其跟踪表示中。
查看文档了解更多详情。
这里您可以找到展示此集成的示例。
如果您的类路径中有 Spring Data Cassandra,我们将检测 Cassandra 的 CqlSession
和 ReactiveSession
接口,并提供我们自己的 RequestTracker
实现。
查看文档了解更多详情。
这里您可以找到展示非响应式 Cassandra 集成的示例。
这里您可以找到展示响应式 Cassandra 集成的示例。
如果您的类路径中有 Spring Session,我们将检测 Session
仓库,它将所有操作包装在 span 中。
查看文档了解更多详情。
这里您可以找到展示此集成的示例。
如果您的类路径中有 Spring Security,我们将创建一个 SecurityContextChangedListener
的实现,当上下文发生变化时,该实现会使用事件注释当前 span。
这里您可以找到展示此集成的示例。
Exemplars 是附加到指标的元数据(参见:Prometheus Exemplars),例如:traceId,以便您可以为您的指标获取一个示例 traceId。
我们将 Sleuth 与 Prometheus 集成,以便如果有人使用 Prometheus Java Client,他们可以使用 Sleuth 获取 Exemplars。此问题也与 Micrometer Exemplars Support 相关,参见。
这里您可以阅读更多关于此问题的信息。
关于此特性,有几点需要注意:
Spring Cloud Sleuth 可以检测 Spring Cloud Function。由于 Spring Cloud Stream 使用 Spring Cloud Function,您将直接获得消息传递的检测功能。
实现此功能的方法是提供一个以 Message
作为参数的 Function
、Consumer
或 Supplier
,例如 Function<Message<String>, Message<Integer>>
。
如果类型不是 Message
,则检测不会发生。
对于响应式 Consumer<Flux<Message<?>>>
,请记住在调用 .subscribe()
之前手动关闭 span 并清除上下文。
这里您可以找到展示生产者集成的示例。
这里您可以找到展示消费者集成的示例。
我们添加了命令监听器,将所有命令包装在 span 中。它对响应式和非响应式场景都有效。
这里您可以找到展示此集成的示例。
通过此 PR,Redis 检测可以兼容其他 Tracer,例如 OpenTelemetry。
Spring Cloud Sleuth 提供了一个用于存储已完成 span 的 traces Actuator 端点。该端点可以通过 HTTP GET 方法查询以简单地检索存储的 span 列表,也可以通过 HTTP POST 方法查询以检索列表并清除它。
查看文档了解更多详情。
本次发布引入了许多检测功能。我们非常想看到您的跟踪信息!您可以前往我们的 Gitter 粘贴您的跟踪信息截图,以便我们分析如何改进。
如有任何问题,请随时联系我们