指标和管理

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

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

您可以在主消息流中控制调试日志记录。 在非常高容量的应用程序中,对isDebugEnabled()对于某些日志记录子系统来说,可能会非常昂贵。 您可以禁用所有此类日志记录以避免此开销。 异常日志记录 (debug 或其他) 不受此设置的影响。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以禁用主消息流中的所有日志记录,而不管 Log System Category (日志系统类别) 设置如何。 设置为 'true' 以启用调试日志记录(如果日志记录子系统也启用了)。 仅在未在 Bean 定义中显式配置设置时应用。 默认值为true.
defaultLoggingEnabled仅当尚未在 Bean 定义中显式配置相应的设置时,才适用。

千分尺集成

概述

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

要使用 Micrometer,请添加MeterRegistrybean 添加到应用程序上下文中。spring-doc.cadn.net.cn

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

这仅适用于扩展AbstractMessageHandler,AbstractMessageChannelAbstractMessageSource(大多数框架组件都是这种情况)。spring-doc.cadn.net.cn

Timer消息通道上的发送作计量具有以下名称或标签:spring-doc.cadn.net.cn

(一个failureresult 替换为noneexception 表示通道的send()作返回false.)spring-doc.cadn.net.cn

Counter用于轮询消息通道上的接收作的计量器具有以下名称或标签:spring-doc.cadn.net.cn

Timer消息处理程序上的作计量器具有以下名称或标签:spring-doc.cadn.net.cn

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

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

可以自定义Meters由集成组件创建,方法是提供MicrometerMetricsCaptor. MicrometerCustomMetricsTests 测试用例显示了如何执行此作的简单示例。 您还可以通过重载build()方法。spring-doc.cadn.net.cn

从版本 5.1.13 开始,QueueChannel公开 Micrometer 仪表的队列大小和剩余容量:spring-doc.cadn.net.cn

禁用仪表

默认情况下,所有计量在首次使用时都会注册。 现在,使用 Micrometer,您可以添加MeterFilters 到MeterRegistry以防止部分或全部注册。 您可以按提供的任何属性过滤(拒绝)仪表。name,tag等。 有关更多信息,请参阅 Micrometer 文档中的 Meter Filtersspring-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"))));

千分尺观察

从版本 6.0 开始, Spring 集成利用了 Micrometer Observation 抽象,它可以处理度量以及通过适当的ObservationHandler配置。spring-doc.cadn.net.cn

IntegrationManagement组件,只要ObservationRegistrybean 存在于应用程序上下文中,并且@EnableIntegrationManagement已配置。 要自定义应插桩的组件集,请使用observationPatterns()属性在@EnableIntegrationManagement注解。 有关模式匹配算法,请参阅其 javadocs。spring-doc.cadn.net.cn

默认情况下,没有任何IntegrationManagement组件使用ObservationRegistry豆。 可以配置为匹配所有组件。*

在这种情况下,计量不是独立收集的,而是委托给适当的ObservationHandler在提供的ObservationRegistry.spring-doc.cadn.net.cn

以下 Spring 集成组件使用 observe logic 进行检测,每个组件都有各自的约定:spring-doc.cadn.net.cn

  • MessageProducerSupport作为流的入站终端节点,被视为CONSUMERspan 类型并使用IntegrationObservation.HANDLER应用程序接口;spring-doc.cadn.net.cn

  • MessagingGatewaySupport是入站请求-回复终端节点,并被视为SERVERspan 类型。 它使用IntegrationObservation.GATEWAY应用程序接口;spring-doc.cadn.net.cn

  • AbstractMessageChannel.send()operation是唯一生成消息的 Spring 集成 API。 因此,它被视为PRODUCERspan 类型并使用IntegrationObservation.PRODCUER应用程序接口。 当通道是分布式实现时(例如PublishSubscribeKafkaChannelZeroMqChannel),并且必须将跟踪信息添加到消息中。 因此,IntegrationObservation.PRODUCER观察基于MessageSenderContext其中 Spring Integration 提供了一个MutableMessage允许后续跟踪Propagator添加标头,以便它们可供使用者使用;spring-doc.cadn.net.cn

  • AbstractMessageHandler是一个CONSUMERspan 类型并使用IntegrationObservation.HANDLER应用程序接口;spring-doc.cadn.net.cn

  • SourcePollingChannelAdapter(从版本 6.5 开始)作为流的入站终端节点,被视为CONSUMERspan 类型并使用IntegrationObservation.HANDLER应用程序接口。spring-doc.cadn.net.cn

IntegrationManagement组件可以通过ObservationConvention配置。 例如,AbstractMessageHandler期望MessageReceiverObservationConvention通过其setObservationConvention()应用程序接口。spring-doc.cadn.net.cn

以下是观察 API 支持的指标、跨度和约定:spring-doc.cadn.net.cn

可观测性 - 指标

您可以在下面找到此项目声明的所有指标的列表。spring-doc.cadn.net.cn

网关

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

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

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

*.active 指标中可能缺少在开始观察后添加的 KeyValue。
千分尺内部使用nanoseconds对于 baseUnit。但是,每个后端都决定了实际的 baseunit。(即 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

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

处理器

消息处理程序的观察。spring-doc.cadn.net.cn

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

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

*.active 指标中可能缺少在开始观察后添加的 KeyValue。
千分尺内部使用nanoseconds对于 baseUnit。但是,每个后端都决定了实际的 baseunit。(即 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

组件的类型 - 'handler'。spring-doc.cadn.net.cn

制作人

对消息生产者(例如通道)的观察。spring-doc.cadn.net.cn

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

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

*.active 指标中可能缺少在开始观察后添加的 KeyValue。
千分尺内部使用nanoseconds对于 baseUnit。但是,每个后端都决定了实际的 baseunit。(即 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

组件的类型 - 'producer'。spring-doc.cadn.net.cn

可观测性 - Span

您可以在下面找到此项目声明的所有 span 的列表。spring-doc.cadn.net.cn

网关跨度

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

Span 名称 spring.integration.gateway(由 convention 类定义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

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

处理程序 Span

消息处理程序的观察。spring-doc.cadn.net.cn

Span 名称 spring.integration.handler(由 convention 类定义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

组件的类型 - 'handler'。spring-doc.cadn.net.cn

生产者跨度

对消息生产者(例如通道)的观察。spring-doc.cadn.net.cn

Span 名称 spring.integration.producer(由 convention 类定义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

组件的类型 - 'producer'。spring-doc.cadn.net.cn

可观测性 - 约定

您可以在下面找到所有GlobalObservationConventionObservationConvention由此项目声明。spring-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

观测传播

要在一个跟踪中提供连接的 span 链,而与消息传递流的性质无关,即使MessageChannel是 persistent 和 distributed 的,则必须在此通道和此通道的使用者(订阅者)上启用观察。 这样,跟踪信息在传播到使用者线程或持久化到数据库中之前,会先存储在消息标头中。 这是通过上述方式完成的MessageSenderContext. 消费者 (aMessageHandler) 端使用MessageReceiverContext并开始一个新的孩子Observation.spring-doc.cadn.net.cn

Spring 集成 JMX 支持