|
此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Integration 6.5.1! |
指标和管理
本节介绍如何捕获 Spring Integration 的指标。 在最近的版本中,我们更多地依赖 Micrometer(参见 micrometer.io),我们计划在未来的版本中更多地使用 Micrometer。
在高容量环境中禁用日志记录
您可以在主消息流中控制调试日志记录。
在非常大容量的应用程序中,调用isDebugEnabled()对于某些日志记录子系统来说,可能会非常昂贵。
您可以禁用所有此类日志记录以避免此开销。
异常日志记录(调试或其他)不受此设置的影响。
以下列表显示了用于控制日志记录的可用选项:
-
Java
-
XML
@Configuration
@EnableIntegration
@EnableIntegrationManagement(
defaultLoggingEnabled = "true" <1>)
public static class ContextConfiguration {
...
}
<int:management default-logging-enabled="true"/> (1)
| 1 | 设置为false以禁用主消息流中的所有日志记录,而不考虑日志系统类别设置。
设置为“true”以启用调试日志记录(如果日志记录子系统也启用了)。
仅当您尚未在 Bean 定义中显式配置设置时才应用。
默认值为true. |
defaultLoggingEnabled仅当未在 Bean 定义中显式配置相应设置时才应用。 |
千分尺集成
概述
从 5.0.3 版开始,千分尺的存在 MeterRegistry在应用程序上下文中触发对微米度量的支持。
要使用 Micrometer,请添加MeterRegistrybean 添加到应用程序上下文中。
对于每个MessageHandler和MessageChannel,计时器被注册。
对于每个MessageSource,则注册了计数器。
这仅适用于延伸的对象AbstractMessageHandler,AbstractMessageChannel和AbstractMessageSource(大多数框架组件都是这种情况)。
这Timer用于对消息通道进行发送作的计量具有以下名称或标记:
-
name:spring.integration.send -
tag:type:channel -
tag:name:<componentName> -
tag:result:(success|failure) -
tag:exception:(none|exception simple class name) -
description:Send processing time
(一个failure结果,并带有none异常表示通道的send()返回作false.)
这Counter用于对可轮询消息通道进行接收作的计量具有以下名称或标记:
-
name:spring.integration.receive -
tag:type:channel -
tag:name:<componentName> -
tag:result:(success|failure) -
tag:exception:(none|exception simple class name) -
description:Messages received
这Timer对消息处理程序进行作的计量具有以下名称或标记:
-
name:spring.integration.send -
tag:type:handler -
tag:name:<componentName> -
tag:result:(success|failure) -
tag:exception:(none|exception simple class name) -
description:Send processing time
这Counter消息源的计量具有以下名称/标记:
-
name:spring.integration.receive -
tag:type:source -
tag:name:<componentName> -
tag:result:success -
tag:exception:none -
description:Messages received
此外,还有三个Gauge米:
-
spring.integration.channels:数量MessageChannels在应用程序中。 -
spring.integration.handlers:数量MessageHandlers在应用程序中。 -
spring.integration.sources:数量MessageSources在应用程序中。
可以自定义的名称和标签Meters由集成组件通过提供MicrometerMetricsCaptor.
MicrometerCustomMetricsTests 测试用例显示了如何执行此作的简单示例。
您还可以通过重载build()构建器子类上的方法。
从版本 5.1.13 开始,QueueChannel显示队列大小和剩余容量的千分尺仪表:
-
name:spring.integration.channel.queue.size -
tag:type:channel -
tag:name:<componentName> -
description:The size of the queue channel
和
-
name:spring.integration.channel.queue.remaining.capacity -
tag:type:channel -
tag:name:<componentName> -
description:The remaining capacity of the queue channel
禁用仪表
默认情况下,所有仪表在首次使用时都会注册。
现在,使用 Micrometer,您可以添加MeterFilters 到MeterRegistry以防止部分或全部被注册。
您可以按提供的任何属性过滤掉(拒绝)计量,name,tag等。
有关更多信息,请参阅 Micrometer 文档中的 Meter Filters。
例如,给定:
@Bean
public QueueChannel noMeters() {
return new QueueChannel(10);
}
您可以使用以下命令禁止仅此通道的仪表注册:
registry.config().meterFilter(MeterFilter.deny(id ->
"channel".equals(id.getTag("type")) &&
"noMeters".equals(id.getTag("name"))));
千分尺观察
从版本 6.0 开始,Spring Integration 利用 Micrometer Observation 抽象,该抽象可以通过适当的方式处理指标以及跟踪ObservationHandler配置。
观察处理在IntegrationManagement每当ObservationRegistrybean 存在于应用程序上下文中,并且@EnableIntegrationManagement已配置。
要自定义应检测的组件集,请将observationPatterns()属性在@EnableIntegrationManagement注解。
有关模式匹配算法,请参阅其 javadocs。
默认情况下,没有IntegrationManagement组件使用ObservationRegistry豆。
可以配置为匹配所有组件。* |
在这种情况下,仪表不是独立收集的,而是委托给适当的ObservationHandler在提供的ObservationRegistry.
以下 Spring Integration 组件使用观察逻辑进行检测,每个逻辑都有各自的约定:
-
MessageProducerSupport,作为流的入站端点,被视为CONSUMERspan 类型,并使用IntegrationObservation.HANDLER应用程序接口; -
MessagingGatewaySupport' 是一个入站请求-回复端点,被视为
SERVERspan 类型。 它使用IntegrationObservation.GATEWAY应用程序接口; -
一
AbstractMessageChannel.send()作是唯一生成消息的 Spring Integration API。 因此,它被视为PRODUCERspan 类型,并使用IntegrationObservation.PRODCUER应用程序接口。 当通道是分布式实现时,这更有意义(例如PublishSubscribeKafkaChannel或ZeroMqChannel),并且必须将跟踪信息添加到消息中。 因此,IntegrationObservation.PRODUCER观察基于MessageSenderContext其中 Spring Integration 提供了一个MutableMessage以允许后续跟踪Propagator添加标头,以便消费者可以使用它们; -
一
AbstractMessageHandler是一个CONSUMERspan 类型,并使用IntegrationObservation.HANDLER应用程序接口。
对IntegrationManagement组件可以通过以下方式进行定制ObservationConvention配置。
例如,一个AbstractMessageHandler期望MessageReceiverObservationConvention通过其setObservationConvention()应用程序接口。
以下是 Observation API 支持的指标、跨度和约定:
可观测性 - 指标
您可以在下面找到此项目声明的所有指标的列表。
网关
入站消息网关的观察。
指标名称 spring.integration.gateway(由约定类定义o.s.i.support.management.observation.DefaultMessageRequestReplyReceiverObservationConvention).类型 timer.
指标名称 spring.integration.gateway.active(由约定类定义o.s.i.support.management.observation.DefaultMessageRequestReplyReceiverObservationConvention).类型 long task timer.
| 启动观察后添加的 KeyValues 可能在 *.active 指标中缺失。 |
千分尺内部使用nanoseconds用于基站。但是,每个后端都确定了实际的基数单元。(即普罗米修斯使用秒) |
封闭类的完全限定名称o.s.i.support.management.observation.IntegrationObservation.
所有标签必须以spring.integration.前缀! |
名称 |
描述 |
|
消息网关组件的名称。 |
|
请求/回复执行的结果。 |
|
组件类型 - “网关”。 |
处理器
消息处理程序的观察。
指标名称 spring.integration.handler(由约定类定义o.s.i.support.management.observation.DefaultMessageReceiverObservationConvention).类型 timer.
指标名称 spring.integration.handler.active(由约定类定义o.s.i.support.management.observation.DefaultMessageReceiverObservationConvention).类型 long task timer.
| 启动观察后添加的 KeyValues 可能在 *.active 指标中缺失。 |
千分尺内部使用nanoseconds用于基站。但是,每个后端都确定了实际的基数单元。(即普罗米修斯使用秒) |
封闭类的完全限定名称o.s.i.support.management.observation.IntegrationObservation.
所有标签必须以spring.integration.前缀! |
名称 |
描述 |
|
消息处理程序组件的名称。 |
|
组件类型 - 'handler'。 |
制作人
对消息生产者的观察,例如通道。
指标名称 spring.integration.producer(由约定类定义o.s.i.support.management.observation.DefaultMessageSenderObservationConvention).类型 timer.
指标名称 spring.integration.producer.active(由约定类定义o.s.i.support.management.observation.DefaultMessageSenderObservationConvention).类型 long task timer.
| 启动观察后添加的 KeyValues 可能在 *.active 指标中缺失。 |
千分尺内部使用nanoseconds用于基站。但是,每个后端都确定了实际的基数单元。(即普罗米修斯使用秒) |
封闭类的完全限定名称o.s.i.support.management.observation.IntegrationObservation.
所有标签必须以spring.integration.前缀! |
名称 |
描述 |
|
消息处理程序组件的名称。 |
|
组件类型 - 'producer'。 |
可观测性 - 跨度
您可以在下面找到此项目声明的所有跨度的列表。
网关跨度
入站消息网关的观察。
跨度名称 spring.integration.gateway(由约定类定义o.s.i.support.management.observation.DefaultMessageRequestReplyReceiverObservationConvention).
封闭类的完全限定名称o.s.i.support.management.observation.IntegrationObservation.
所有标签必须以spring.integration.前缀! |
名称 |
描述 |
|
消息网关组件的名称。 |
|
请求/回复执行的结果。 |
|
组件类型 - “网关”。 |
处理程序跨度
消息处理程序的观察。
跨度名称 spring.integration.handler(由约定类定义o.s.i.support.management.observation.DefaultMessageReceiverObservationConvention).
封闭类的完全限定名称o.s.i.support.management.observation.IntegrationObservation.
所有标签必须以spring.integration.前缀! |
名称 |
描述 |
|
消息处理程序组件的名称。 |
|
组件类型 - 'handler'。 |
生产者跨度
对消息生产者的观察,例如通道。
跨度名称 spring.integration.producer(由约定类定义o.s.i.support.management.observation.DefaultMessageSenderObservationConvention).
封闭类的完全限定名称o.s.i.support.management.observation.IntegrationObservation.
所有标签必须以spring.integration.前缀! |
名称 |
描述 |
|
消息处理程序组件的名称。 |
|
组件类型 - 'producer'。 |
可观测性 - 约定
您可以在下面找到所有列表GlobalObservationConvention和ObservationConvention由该项目声明。
ObservationConvention 类名称 |
适用的 ObservationContext 类名称 |
|
|
|
|
|
|
|
|
|
|
|
|
观测传播
在一个跟踪中提供连接的跨度链,与消息传递流的性质无关,即使MessageChannel是持久性和分布式的,则必须在此通道和此通道的使用者(订阅者)上启用观察。
这样,跟踪信息在传播到使用者线程或持久化到数据库之前存储在消息头中。
这是通过上面提到的MessageSenderContext.
消费者(MessageHandler) 端使用MessageReceiverContext并开始一个新孩子Observation.
Spring Integration JMX 支持
另请参阅 JMX 支持。