如需使用最新稳定版本,请使用 Spring Integration 7.0.4spring-doc.cadn.net.cn

指标与管理

本节介绍如何为 Spring Integration 捕获指标。 在较新的版本中,我们更多地依赖 Micrometer(参见 micrometer.io),并计划在未来的发布中更广泛地使用 Micrometer。spring-doc.cadn.net.cn

在高流量环境中禁用日志记录

您可以在主消息流中控制调试日志记录。 在极高流量的应用中,某些日志子系统对 isDebugEnabled() 的调用可能非常昂贵。 您可以禁用所有此类日志记录以避免此开销。 异常日志记录(无论是调试还是其他级别)不受此设置影响。spring-doc.cadn.net.cn

以下列表显示了用于控制日志记录的可选项:spring-doc.cadn.net.cn

@Configuration
@EnableIntegration
@EnableIntegrationManagement(
    defaultLoggingEnabled = "true" <1>)

public static class ContextConfiguration {
...
}
<int:management default-logging-enabled="true"/> (1)
1 设置为 false 以禁用主消息流中的所有日志记录,无论日志系统类别设置如何。 设置为 'true' 以启用调试日志记录(如果日志子系统也启用了该功能)。 仅当未在 bean 定义中显式配置该设置时才适用。 默认值为 true
defaultLoggingEnabled 仅在您未在 bean 定义中显式配置相应设置时适用。

Micrometer 集成

概述

从版本 5.0.3 开始,应用上下文中存在 Micrometer MeterRegistry 将触发对 Micrometer 指标的支持。spring-doc.cadn.net.cn

要使用 Micrometer,请将其中一个 MeterRegistry Bean 添加到应用程序上下文中。spring-doc.cadn.net.cn

对于每个 MessageHandlerMessageChannel,都会注册计时器。 对于每个 MessageSource,会注册一个计数器。spring-doc.cadn.net.cn

这仅适用于扩展 AbstractMessageHandlerAbstractMessageChannelAbstractMessageSource 的对象(大多数框架组件均属于这种情况)。spring-doc.cadn.net.cn

用于消息通道发送操作的 Timer 米具有以下名称或标签:spring-doc.cadn.net.cn

(带有 none 个异常的 failure 条结果表示通道的 send() 操作返回了 false。)spring-doc.cadn.net.cn

可轮询消息通道上接收操作的 Counter 米具有以下名称或标签:spring-doc.cadn.net.cn

用于消息处理器操作的 Timer 米的指标具有以下名称或标签:spring-doc.cadn.net.cn

消息源的 Counter 米具有以下名称/标签:spring-doc.cadn.net.cn

此外,还有三个 Gauge 米:spring-doc.cadn.net.cn

可以通过提供 MicrometerMetricsCaptor 的子类来自定义集成组件创建的 Meters 的名称和标签。 MicrometerCustomMetricsTests 测试用例展示了如何实现这一点的简单示例。 您还可以通过重载构建器子类上的 build() 方法进一步自定义计量器。spring-doc.cadn.net.cn

从版本 5.1.13 开始,QueueChannel 为队列大小和剩余容量公开了 Micrometer 指标:spring-doc.cadn.net.cn

禁用指标

默认情况下,所有指标在首次使用时都会注册。 现在,借助 Micrometer,您可以在 MeterRegistry 中添加 MeterFilter,以防止部分或全部指标被注册。 您可以通过提供的任意属性(如 nametag 等)过滤掉(拒绝)某些指标。 有关更多信息,请参阅 Micrometer 文档中的 指标过滤器spring-doc.cadn.net.cn

例如,给定:spring-doc.cadn.net.cn

@Bean
public QueueChannel noMeters() {
    return new QueueChannel(10);
}

您可以使用以下方法仅针对此通道抑制计量器的注册:spring-doc.cadn.net.cn

registry.config().meterFilter(MeterFilter.deny(id ->
        "channel".equals(id.getTag("type")) &&
        "noMeters".equals(id.getTag("name"))));

Micrometer 观测

从 6.0 版本开始,Spring Integration 利用 Micrometer Observation 抽象,可通过适当的 ObservationHandler 配置处理指标以及 链路追踪spring-doc.cadn.net.cn

当应用程序上下文中存在 ObservationRegistry bean 且配置了 @EnableIntegrationManagement 时,IntegrationManagement 组件上的观察处理将被启用。 要自定义应被仪器化的组件集合,@EnableIntegrationManagement 注解上公开了 observationPatterns() 属性。 请参阅其 Javadoc 以了解模式匹配算法。spring-doc.cadn.net.cn

默认情况下,没有任何 IntegrationManagement 组件被配置为 ObservationRegistry Bean。 可以将其配置为 * 以匹配所有组件。

在这种情况下,指标并非独立收集,而是委托给在提供的 ObservationRegistry 上配置的适当 ObservationHandlerspring-doc.cadn.net.cn

以下 Spring Integration 组件均配备了观测逻辑,每个组件都有相应的约定:spring-doc.cadn.net.cn

  • MessageProducerSupport作为流程的入口端点,被视为1类型的span,并使用2 API;spring-doc.cadn.net.cn

  • MessagingGatewaySupport` 是一个入站请求 - 响应端点,被视为 SERVER 类型的跨度。 它使用 IntegrationObservation.GATEWAY API;spring-doc.cadn.net.cn

  • AbstractMessageChannel.send()操作是唯一生成消息的 Spring Integration API。 因此,它被视为 PRODUCER 跨度类型,并使用 IntegrationObservation.PRODCUER API。 当通道是分布式实现(例如 PublishSubscribeKafkaChannelZeroMqChannel)且需要向消息添加跟踪信息时,这样做更有意义。 因此,IntegrationObservation.PRODUCER 观察基于 MessageSenderContext,其中 Spring Integration 提供 MutableMessage,以便后续的跟踪 Propagator 可以添加标头,从而使消费者能够使用这些标头;spring-doc.cadn.net.cn

  • 一个 AbstractMessageHandlerCONSUMER 类型的 span,并使用 IntegrationObservation.HANDLER API。spring-doc.cadn.net.cn

关于 IntegrationManagement 组件的观察生产可通过 ObservationConvention 配置进行自定义。 例如,AbstractMessageHandler 通过其 setObservationConvention() API 期望接收一个 MessageReceiverObservationConventionspring-doc.cadn.net.cn

以下支持 Observation API 的指标、跨度及约定:spring-doc.cadn.net.cn

可观测性 - 指标

以下列出了本项目声明的所有指标。spring-doc.cadn.net.cn

网关

入站消息网关的观测。spring-doc.cadn.net.cn

指标名称 spring.integration.gateway(由约定类 o.s.i.support.management.observation.DefaultMessageRequestReplyReceiverObservationConvention 定义)。类型 timerspring-doc.cadn.net.cn

指标名称 spring.integration.gateway.active(由约定类 o.s.i.support.management.observation.DefaultMessageRequestReplyReceiverObservationConvention 定义)。类型 long task timerspring-doc.cadn.net.cn

在启动 Observation 后添加的 KeyValues 可能会缺失于 *.active 指标中。
Micrometer 内部使用 nanoseconds 作为基本单位。然而,每个后端决定实际的基本单位。(即 Prometheus 使用秒)

封闭类 o.s.i.support.management.observation.IntegrationObservation 的全限定名。spring-doc.cadn.net.cn

所有标签都必须以 spring.integration. 前缀开头!
表1. 低基数键

spring.integration.name (必填)spring-doc.cadn.net.cn

消息网关组件的名称。spring-doc.cadn.net.cn

spring.integration.outcome (必填)spring-doc.cadn.net.cn

请求/响应执行的结果。spring-doc.cadn.net.cn

spring.integration.type (必填)spring-doc.cadn.net.cn

组件类型 - '网关'。spring-doc.cadn.net.cn

处理器

消息处理器的观察功能。spring-doc.cadn.net.cn

指标名称 spring.integration.handler(由约定类 o.s.i.support.management.observation.DefaultMessageReceiverObservationConvention 定义)。类型 timerspring-doc.cadn.net.cn

指标名称 spring.integration.handler.active(由约定类 o.s.i.support.management.observation.DefaultMessageReceiverObservationConvention 定义)。类型 long task timerspring-doc.cadn.net.cn

在启动 Observation 后添加的 KeyValues 可能会缺失于 *.active 指标中。
Micrometer 内部使用 nanoseconds 作为基本单位。然而,每个后端决定实际的基本单位。(即 Prometheus 使用秒)

封闭类 o.s.i.support.management.observation.IntegrationObservation 的全限定名。spring-doc.cadn.net.cn

所有标签都必须以 spring.integration. 前缀开头!
表2. 低基数键

spring.integration.name (必填)spring-doc.cadn.net.cn

消息处理组件的名称。spring-doc.cadn.net.cn

spring.integration.type (必填)spring-doc.cadn.net.cn

组件类型 - '处理器'。spring-doc.cadn.net.cn

生产者

为消息生产者(例如通道)提供的观察功能。spring-doc.cadn.net.cn

指标名称 spring.integration.producer(由约定类 o.s.i.support.management.observation.DefaultMessageSenderObservationConvention 定义)。类型 timerspring-doc.cadn.net.cn

指标名称 spring.integration.producer.active(由约定类 o.s.i.support.management.observation.DefaultMessageSenderObservationConvention 定义)。类型 long task timerspring-doc.cadn.net.cn

在启动 Observation 后添加的 KeyValues 可能会缺失于 *.active 指标中。
Micrometer 内部使用 nanoseconds 作为基本单位。然而,每个后端决定实际的基本单位。(即 Prometheus 使用秒)

封闭类 o.s.i.support.management.observation.IntegrationObservation 的全限定名。spring-doc.cadn.net.cn

所有标签都必须以 spring.integration. 前缀开头!
表3. 低基数键

spring.integration.name (必填)spring-doc.cadn.net.cn

消息处理组件的名称。spring-doc.cadn.net.cn

spring.integration.type (必填)spring-doc.cadn.net.cn

组件类型 - '生产者'。spring-doc.cadn.net.cn

可观测性 - 跨度

以下列出了本项目声明的所有 span。spring-doc.cadn.net.cn

网关跨度

入站消息网关的观测。spring-doc.cadn.net.cn

Span 名称 spring.integration.gateway(由约定类 o.s.i.support.management.observation.DefaultMessageRequestReplyReceiverObservationConvention 定义)。spring-doc.cadn.net.cn

封闭类 o.s.i.support.management.observation.IntegrationObservation 的全限定名。spring-doc.cadn.net.cn

所有标签都必须以 spring.integration. 前缀开头!
表4. 标签键

姓名spring-doc.cadn.net.cn

描述spring-doc.cadn.net.cn

spring.integration.name (必填)spring-doc.cadn.net.cn

消息网关组件的名称。spring-doc.cadn.net.cn

spring.integration.outcome (必填)spring-doc.cadn.net.cn

请求/响应执行的结果。spring-doc.cadn.net.cn

spring.integration.type (必填)spring-doc.cadn.net.cn

组件类型 - '网关'。spring-doc.cadn.net.cn

处理器跨度

消息处理器的观察功能。spring-doc.cadn.net.cn

Span 名称 spring.integration.handler(由约定类 o.s.i.support.management.observation.DefaultMessageReceiverObservationConvention 定义)。spring-doc.cadn.net.cn

封闭类 o.s.i.support.management.observation.IntegrationObservation 的全限定名。spring-doc.cadn.net.cn

所有标签都必须以 spring.integration. 前缀开头!
表 5. 标签键

姓名spring-doc.cadn.net.cn

描述spring-doc.cadn.net.cn

spring.integration.name (必填)spring-doc.cadn.net.cn

消息处理组件的名称。spring-doc.cadn.net.cn

spring.integration.type (必填)spring-doc.cadn.net.cn

组件类型 - '处理器'。spring-doc.cadn.net.cn

生产者 Span

为消息生产者(例如通道)提供的观察功能。spring-doc.cadn.net.cn

Span 名称 spring.integration.producer(由约定类 o.s.i.support.management.observation.DefaultMessageSenderObservationConvention 定义)。spring-doc.cadn.net.cn

封闭类 o.s.i.support.management.observation.IntegrationObservation 的全限定名。spring-doc.cadn.net.cn

所有标签都必须以 spring.integration. 前缀开头!
表 6. 标签键

姓名spring-doc.cadn.net.cn

描述spring-doc.cadn.net.cn

spring.integration.name (必填)spring-doc.cadn.net.cn

消息处理组件的名称。spring-doc.cadn.net.cn

spring.integration.type (必填)spring-doc.cadn.net.cn

组件类型 - '生产者'。spring-doc.cadn.net.cn

可观测性 - 约定

以下列出了本项目声明的所有 GlobalObservationConventionObservationConventionspring-doc.cadn.net.cn

表 7. ObservationConvention 实现

ObservationConvention 类名spring-doc.cadn.net.cn

适用的 ObservationContext 类名spring-doc.cadn.net.cn

o.s.i.support.management.observation.DefaultMessageReceiverObservationConventionspring-doc.cadn.net.cn

MessageReceiverContextspring-doc.cadn.net.cn

o.s.i.support.management.observation.MessageReceiverObservationConventionspring-doc.cadn.net.cn

MessageReceiverContextspring-doc.cadn.net.cn

o.s.i.support.management.observation.DefaultMessageRequestReplyReceiverObservationConventionspring-doc.cadn.net.cn

MessageRequestReplyReceiverContextspring-doc.cadn.net.cn

o.s.i.support.management.observation.MessageRequestReplyReceiverObservationConventionspring-doc.cadn.net.cn

MessageRequestReplyReceiverContextspring-doc.cadn.net.cn

o.s.i.support.management.observation.DefaultMessageSenderObservationConventionspring-doc.cadn.net.cn

MessageSenderContextspring-doc.cadn.net.cn

o.s.i.support.management.observation.MessageSenderObservationConventionspring-doc.cadn.net.cn

MessageSenderContextspring-doc.cadn.net.cn

观测传播

为了在一条跟踪中提供连接的跨度链,无论消息流的性质如何,即使 MessageChannel 是持久化且分布式的,也必须在此通道以及该通道的消费者(订阅者)上启用观察功能。 通过这种方式,跟踪信息会被存储在消息头中,然后再传播到消费者线程或持久化到数据库中。 这是通过上述提到的 MessageSenderContext 完成的。 消费者(MessageHandler)端使用 MessageReceiverContext 从这些消息头中恢复跟踪信息,并启动一个新的子 Observationspring-doc.cadn.net.cn

Spring Integration JMX 支持