对于最新的稳定版本,请使用 Spring Integration 6.3.4! |
对于最新的稳定版本,请使用 Spring Integration 6.3.4! |
本节介绍如何捕获 Spring Integration 的指标。 在最近的版本中,我们更加依赖 Micrometer(参见 micrometer.io),我们计划在未来的版本中更多地使用 Micrometer。
在高容量环境中禁用日志记录
您可以在主消息流中控制调试日志记录。
在非常大容量的应用程序中,对于某些日志记录子系统,调用 to 可能非常昂贵。
您可以禁用所有此类日志记录以避免此开销。
异常日志记录 (debug 或其他) 不受此设置的影响。isDebugEnabled()
以下清单显示了用于控制日志记录的可用选项:
-
Java
-
XML
@Configuration
@EnableIntegration
@EnableIntegrationManagement(
defaultLoggingEnabled = "true" <1>)
public static class ContextConfiguration {
...
}
<int:management default-logging-enabled="true"/> (1)
1 | 设置为 以禁用主消息流中的所有日志记录,而不管日志系统类别设置如何。
设置为 'true' 以启用调试日志记录(如果日志记录子系统也启用了)。
仅在未在 Bean 定义中显式配置设置时应用。
默认值为 .false true |
defaultLoggingEnabled 仅当尚未在 Bean 定义中显式配置相应的设置时,才适用。 |
1 | 设置为 以禁用主消息流中的所有日志记录,而不管日志系统类别设置如何。
设置为 'true' 以启用调试日志记录(如果日志记录子系统也启用了)。
仅在未在 Bean 定义中显式配置设置时应用。
默认值为 .false true |
defaultLoggingEnabled 仅当尚未在 Bean 定义中显式配置相应的设置时,才适用。 |
千分尺集成
概述
从版本 5.0.3 开始,应用程序上下文中存在的 Micrometer 会触发对 Micrometer 度量的支持。MeterRegistry
要使用 Micrometer,请将其中一个 bean 添加到应用程序上下文中。MeterRegistry
对于每个 和 ,都会注册计时器。
对于每个 ,都会注册一个计数器。MessageHandler
MessageChannel
MessageSource
这仅适用于扩展 、 、 和 的对象(大多数框架组件都是这种情况)。AbstractMessageHandler
AbstractMessageChannel
AbstractMessageSource
消息通道上发送操作的 Meter 具有以下名称或标签: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
用于轮询消息通道上的接收操作的 Meters 具有以下名称或标签: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
此外,还有三个 Meter:Gauge
-
spring.integration.channels
:应用程序中的 数量。MessageChannels
-
spring.integration.handlers
:应用程序中的 数量。MessageHandlers
-
spring.integration.sources
:应用程序中的 数量。MessageSources
通过提供 的子类,可以自定义由集成组件创建的名称和标记。
MicrometerCustomMetricsTests 测试用例显示了如何执行此操作的简单示例。
您还可以通过重载 builder 子类上的方法来进一步自定义计量器。Meters
MicrometerMetricsCaptor
build()
从版本 5.1.13 开始,公开了队列大小和剩余容量的 Micrometer 仪表: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,您可以向 中添加 s 以防止部分或全部被注册。
您可以按提供的任何属性、 、 等过滤 (拒绝) 仪表。
有关更多信息,请参阅 Micrometer 文档中的 Meter Filters。MeterFilter
MeterRegistry
name
tag
例如,给定:
@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 集成利用了千分尺观察抽象,它可以通过适当的配置来处理度量和跟踪。ObservationHandler
只要应用程序上下文中存在 bean 并且配置了 ,就会在组件上启用观察处理。
要自定义应检测的组件集,需要在 Comments 上公开一个属性。
有关模式匹配算法,请参阅其 javadocs。IntegrationManagement
ObservationRegistry
@EnableIntegrationManagement
observationPatterns()
@EnableIntegrationManagement
默认情况下,没有组件使用 Bean 进行检测。
可以配置为匹配所有组件。IntegrationManagement ObservationRegistry * |
在这种情况下,计量不是独立收集的,而是委托给提供的 .ObservationHandler
ObservationRegistry
以下 Spring 集成组件使用 observe logic 进行检测,每个组件都有各自的约定:
-
MessageProducerSupport
作为流的入站终端节点,被视为 span 类型并使用 API;CONSUMER
IntegrationObservation.HANDLER
-
MessagingGatewaySupport' 是入站请求-回复终端节点,被视为 span 类型。 它使用 API;
SERVER
IntegrationObservation.GATEWAY
-
操作是它生成消息的唯一 Spring 集成 API。 因此,它被视为 span 类型并使用 API。 当通道是分布式实现时(例如 或 ),并且必须将跟踪信息添加到消息中。 因此,观察是基于 Spring Integration 提供 a 以允许后续跟踪添加 Headers,以便它们可供消费者使用;
AbstractMessageChannel.send()
PRODUCER
IntegrationObservation.PRODCUER
PublishSubscribeKafkaChannel
ZeroMqChannel
IntegrationObservation.PRODUCER
MessageSenderContext
MutableMessage
Propagator
-
An 是 span 类型,使用 API。
AbstractMessageHandler
CONSUMER
IntegrationObservation.HANDLER
组件的观察生产可以通过配置进行定制。
例如,an 期望通过其 API.IntegrationManagement
ObservationConvention
AbstractMessageHandler
MessageReceiverObservationConvention
setObservationConvention()
以下是观察 API 支持的指标、跨度和约定:
可观测性 - 指标
您可以在下面找到此项目声明的所有指标的列表。
网关
对入站消息网关的观察。
度量名称(由 convention class 定义)。键入 。spring.integration.gateway
o.s.i.support.management.observation.DefaultMessageRequestReplyReceiverObservationConvention
timer
度量名称(由 convention class 定义)。键入 。spring.integration.gateway.active
o.s.i.support.management.observation.DefaultMessageRequestReplyReceiverObservationConvention
long task timer
*.active 指标中可能缺少在开始观察后添加的 KeyValue。 |
Micrometer 内部用于 baseunit。但是,每个后端都决定了实际的 baseunit。(即 Prometheus 使用秒)nanoseconds |
封闭类 的完全限定名称 。o.s.i.support.management.observation.IntegrationObservation
所有标签都必须以 prefix 为前缀!spring.integration. |
名字 |
描述 |
|
消息网关组件的名称。 |
|
请求/回复执行的结果。 |
|
组件类型 - 'gateway'。 |
处理器
消息处理程序的观察。
度量名称(由 convention class 定义)。键入 。spring.integration.handler
o.s.i.support.management.observation.DefaultMessageReceiverObservationConvention
timer
度量名称(由 convention class 定义)。键入 。spring.integration.handler.active
o.s.i.support.management.observation.DefaultMessageReceiverObservationConvention
long task timer
*.active 指标中可能缺少在开始观察后添加的 KeyValue。 |
Micrometer 内部用于 baseunit。但是,每个后端都决定了实际的 baseunit。(即 Prometheus 使用秒)nanoseconds |
封闭类 的完全限定名称 。o.s.i.support.management.observation.IntegrationObservation
所有标签都必须以 prefix 为前缀!spring.integration. |
名字 |
描述 |
|
消息处理程序组件的名称。 |
|
组件的类型 - 'handler'。 |
制作人
对消息生产者(例如通道)的观察。
度量名称(由 convention class 定义)。键入 。spring.integration.producer
o.s.i.support.management.observation.DefaultMessageSenderObservationConvention
timer
度量名称(由 convention class 定义)。键入 。spring.integration.producer.active
o.s.i.support.management.observation.DefaultMessageSenderObservationConvention
long task timer
*.active 指标中可能缺少在开始观察后添加的 KeyValue。 |
Micrometer 内部用于 baseunit。但是,每个后端都决定了实际的 baseunit。(即 Prometheus 使用秒)nanoseconds |
封闭类 的完全限定名称 。o.s.i.support.management.observation.IntegrationObservation
所有标签都必须以 prefix 为前缀!spring.integration. |
名字 |
描述 |
|
消息处理程序组件的名称。 |
|
组件的类型 - 'producer'。 |
可观测性 - Span
您可以在下面找到此项目声明的所有 span 的列表。
网关跨度
对入站消息网关的观察。
Span name (由 convention class 定义)。spring.integration.gateway
o.s.i.support.management.observation.DefaultMessageRequestReplyReceiverObservationConvention
封闭类 的完全限定名称 。o.s.i.support.management.observation.IntegrationObservation
所有标签都必须以 prefix 为前缀!spring.integration. |
名字 |
描述 |
|
消息网关组件的名称。 |
|
请求/回复执行的结果。 |
|
组件类型 - 'gateway'。 |
处理程序 Span
消息处理程序的观察。
Span name (由 convention class 定义)。spring.integration.handler
o.s.i.support.management.observation.DefaultMessageReceiverObservationConvention
封闭类 的完全限定名称 。o.s.i.support.management.observation.IntegrationObservation
所有标签都必须以 prefix 为前缀!spring.integration. |
名字 |
描述 |
|
消息处理程序组件的名称。 |
|
组件的类型 - 'handler'。 |
生产者跨度
对消息生产者(例如通道)的观察。
Span name (由 convention class 定义)。spring.integration.producer
o.s.i.support.management.observation.DefaultMessageSenderObservationConvention
封闭类 的完全限定名称 。o.s.i.support.management.observation.IntegrationObservation
所有标签都必须以 prefix 为前缀!spring.integration. |
名字 |
描述 |
|
消息处理程序组件的名称。 |
|
组件的类型 - 'producer'。 |
可观测性 - 约定
您可以在下面找到该项目声明的所有列表。GlobalObservationConvention
ObservationConvention
ObservationConvention 类名 |
适用的 ObservationContext 类名 |
|
|
|
|
|
|
|
|
|
|
|
|
默认情况下,没有组件使用 Bean 进行检测。
可以配置为匹配所有组件。IntegrationManagement ObservationRegistry * |
*.active 指标中可能缺少在开始观察后添加的 KeyValue。 |
Micrometer 内部用于 baseunit。但是,每个后端都决定了实际的 baseunit。(即 Prometheus 使用秒)nanoseconds |
所有标签都必须以 prefix 为前缀!spring.integration. |
名字 |
描述 |
|
消息网关组件的名称。 |
|
请求/回复执行的结果。 |
|
组件类型 - 'gateway'。 |
*.active 指标中可能缺少在开始观察后添加的 KeyValue。 |
Micrometer 内部用于 baseunit。但是,每个后端都决定了实际的 baseunit。(即 Prometheus 使用秒)nanoseconds |
所有标签都必须以 prefix 为前缀!spring.integration. |
名字 |
描述 |
|
消息处理程序组件的名称。 |
|
组件的类型 - 'handler'。 |
*.active 指标中可能缺少在开始观察后添加的 KeyValue。 |
Micrometer 内部用于 baseunit。但是,每个后端都决定了实际的 baseunit。(即 Prometheus 使用秒)nanoseconds |
所有标签都必须以 prefix 为前缀!spring.integration. |
名字 |
描述 |
|
消息处理程序组件的名称。 |
|
组件的类型 - 'producer'。 |
所有标签都必须以 prefix 为前缀!spring.integration. |
名字 |
描述 |
|
消息网关组件的名称。 |
|
请求/回复执行的结果。 |
|
组件类型 - 'gateway'。 |
所有标签都必须以 prefix 为前缀!spring.integration. |
名字 |
描述 |
|
消息处理程序组件的名称。 |
|
组件的类型 - 'handler'。 |
所有标签都必须以 prefix 为前缀!spring.integration. |
名字 |
描述 |
|
消息处理程序组件的名称。 |
|
组件的类型 - 'producer'。 |
ObservationConvention 类名 |
适用的 ObservationContext 类名 |
|
|
|
|
|
|
|
|
|
|
|
|
观测传播
要在一个跟踪中提供连接的 span 链,而与消息传递流的性质无关,即使 a 是持久的和分布式的,也必须在此通道和此通道的使用者(订阅者)上启用观察。
这样,跟踪信息在传播到使用者线程或持久化到数据库中之前,会先存储在消息标头中。
这是通过上述方式完成的。
使用者 (a ) 端使用 a 从这些标头中恢复跟踪信息,并启动一个新的子项。MessageChannel
MessageSenderContext
MessageHandler
MessageReceiverContext
Observation
Spring 集成 JMX 支持
另请参阅 JMX 支持。