向 prometheus 公开 spring 集成 amqp/jms 通道消息指标

Posted

技术标签:

【中文标题】向 prometheus 公开 spring 集成 amqp/jms 通道消息指标【英文标题】:Expose spring integration amqp/jms channel messages metrics to prometheus 【发布时间】:2022-01-07 23:33:01 【问题描述】:

我正在尝试启用指标以将消息统计信息从 spring-integration RabbitMq MqSeries 网关提供给 Prometheus。

documentation 声明通道必须扩展 AbstractMessageChannel 才能应用指标。因为我对namespaces 很不适应,所以我不确定这里是否是这种情况。 另外,我不明白如何添加 MeterRegistryBean(以及哪个!)以触发指标。 最终,我不明白如何使用它。 基本上,由于我对这里暗示的大多数框架都是新手,所以这里的文档缺少一个可以帮助我更好地理解它的示例。

这是我如何定义频道(“xml”方式不是一种选择:它已经以这种方式实现,我无法更改它):

    <!--    *** MQseries  ***       -->
    <!-- ========================== -->
    
    <bean id="jmsConnectionFactory" class="com.ibm.mq.jms.MQConnectionFactory" >
          <property...>
    </bean>
    
    <bean id="jmsConnectionFactory_cred"
        class="org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter">
        <property name="targetConnectionFactory" ref="jmsConnectionFactory" />
        <property...>
    </bean> 

    <bean id="connectionFactoryCaching" class="org.springframework.jms.connection.CachingConnectionFactory">
          <property name="targetConnectionFactory" ref="jmsConnectionFactory_cred" />
          <property...>
    </bean> 
    
    <bean id="jmsQueue" class="com.ibm.mq.jms.MQQueue" depends-on="jmsConnectionFactory">
          <property...>
    </bean>
    
    <bean id="fixedBackOff" class="org.springframework.util.backoff.FixedBackOff">
          <property...>
    </bean>
    
    
    <bean id="myListener" class="org.springframework.jms.listener.DefaultMessageListenerContainer" >
        <property...>
        <property name="connectionFactory" ref="connectionFactoryCaching" />
        <property name="destination" ref="jmsQueue" />
    </bean>
    
    <int-jms:message-driven-channel-adapter id="jmsIn" container="myListener" channel="channelMQ_RMQ" error-channel="processChannel1"/>

    <!--    *** Rabbit  ***     -->
    <!-- ====================== -->

    <bean id="connectionAmqpFactoryDest" class="com.rabbitmq.client.ConnectionFactory">
          <property...>
    </bean>

    <!-- Attribute : addresses = List of addresses; e.g. host1,host2:4567,host3 - overrides host/port if supplied. -->
    <rabbit:connection-factory id="rabbitConnectionFactory" 
            connection-factory="connectionAmqpFactoryDest"
            addresses="..." ... />

    <bean id="simpleMessageConverter" class="org.springframework.amqp.support.converter.SimpleMessageConverter">
          <property...>
    </bean>     
    <rabbit:template    id="rabbitTemplate" 
                        connection-factory="rabbitConnectionFactory"  
                        mandatory="true" 
                        channel-transacted="true" 
                        message-converter="simpleMessageConverter"/>

    <int-amqp:outbound-channel-adapter  channel="channelMQ_RMQ" 
                                        ...
                                        amqp-template="rabbitTemplate" />
    

知道我该怎么做吗?

【问题讨论】:

【参考方案1】:

Spring 集成指标(以及 Spring JMS 和 Spring AMQP)完全基于 Micrometer 实现:https://docs.spring.io/spring-integration/docs/current/reference/html/system-management.html#micrometer-integration。如果您使用一些最新的、受支持的 Spring Integration 版本,那就太好了:https://spring.io/projects/spring-integration#learn。

如果你不使用 Spring Boot,那么你需要在应用程序上下文中声明一个MeterRegistry bean。并且可能正是为 Prometheus 准备的:https://micrometer.io/docs/registry/prometheus。

如果您是该框架的新手,请考虑放弃 XML 配置以支持 Java DSL:https://docs.spring.io/spring-integration/docs/current/reference/html/dsl.html#java-dsl。

还要让自己熟悉 Spring Boot,它可以为我们自动配置很多东西,甚至是 Prometheus 的 MeterRegistry:https://spring.io/projects/spring-boot

【讨论】:

我的主要问题是所有这些都缺乏示例。如果我对所有这些框架都有经验,这里的文档将非常明显。但我喜欢关于微米内普罗米修斯部分的文档;谢谢

以上是关于向 prometheus 公开 spring 集成 amqp/jms 通道消息指标的主要内容,如果未能解决你的问题,请参考以下文章

将从 AWS Fargate Task 公开的自定义应用程序指标集成到 prometheus

与 Redis 和 Prometheus 集成

如何从使用 Spring Cloud Eureka 服务器注册的 Spring Boot 应用程序中公开 Prometheus 指标

在不使用 spring-boot 执行器的情况下将来自 spring 应用程序的指标公开给 prometheus

如何通过 JMX 将 Spring Boot 应用程序中的 Kafka 指标公开给 Prometheus?

在 Spring Boot Camel 应用程序公开的 Micrometer / Prometheus 信息中包含其他 JMX 指标