【问题标题】:Send Apache Camel Actuator Metrics to Prometheus将 Apache Camel 执行器指标发送到 Prometheus
【发布时间】:2019-10-24 07:24:20
【问题描述】:

我正在尝试将来自 /actuator/camelroutes 的 Actuator Camel 指标(路由指标,如交换/交易数量)转发/添加到 Prometheus Actuator 端点。我有没有办法配置 Camel 以将这些指标添加到 PrometheusMeterRegistry?

我已经尝试添加:

camel.component.metrics.metric-registry=io.micrometer.prometheus.PrometheusMeterRegistry

在我的application.properties 中,根据此处的文档:https://camel.apache.org/components/latest/metrics-component.html

但在actuator/prometheus 中仍然没有显示任何与 Apache Camel 相关的内容

以下是我在 Spring Boot 2.1.9Apache Camel 2.24.2 中使用的依赖项:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
        <groupId>org.apache.camel</groupId>
            <artifactId>camel-metrics-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>io.micrometer</groupId>
            <artifactId>micrometer-registry-prometheus</artifactId>
        </dependency>

【问题讨论】:

    标签: java spring-boot apache-camel prometheus


    【解决方案1】:

    让 Camel Routes 指标在 /actuator/prometheus 端点中工作。

    使用 @claus-ibsen 的评论中所述的 camel-micrometer-starter 依赖项。

            <dependency>
                <groupId>org.apache.camel</groupId>
                <artifactId>camel-metrics-starter</artifactId>
            </dependency>
    

    在您的属性文件中设置以下内容:

    camel.component.metrics.metric-registry=prometheusMeterRegistry
    

    然后添加设置 Camel 上下文以使用 MicrometerRouterPolicyFactory 和 MicrometerMessageHistoryFactory。下面看到的代码是配置类中的位置:

    @Configuration
    public class AppConfig {
    
        @Bean
        public CamelContextConfiguration camelContextConfiguration() {
    
            return new CamelContextConfiguration() {
                @Override
                public void beforeApplicationStart(CamelContext camelContext) {
                    camelContext.addRoutePolicyFactory(new MicrometerRoutePolicyFactory());
                    camelContext.setMessageHistoryFactory(new MicrometerMessageHistoryFactory());
                }
    
                @Override
                public void afterApplicationStart(CamelContext camelContext) {
    
                }
            };
        }
    
    }
    
    

    您需要在路由中触发交换,指标才会出现在 /actuator/prometheus 中。

    以下是 Prometheus 可用的指标:

    1. CamelMessageHistory_seconds_count
    2. CamelMessageHistory_seconds_max
    3. CamelRoutePolicy_seconds_max
    4. CamelRoutePolicy_seconds_count
    5. CamelRoutePolicy_seconds_sum

    您可以使用 Prometheus 的 JMX Exporter jar 从 Camel 的 JMX 中获取更详细的指标。我想避免这种方法,因为这意味着对于我拥有的每个 Camel Spring Boot App将使用 2 个端口; 1 个用于 JMX 指标,1 个用于执行器指标。

    【讨论】:

    • 我也在尝试实现这一点,感谢您的帖子,我能够看到您发布的上述指标。只是想知道,在您的实施中,这些是您监控的唯一骆驼指标吗?您是否能够实现自己的 PrometheusMeterRegistry bean?
    • 能否分享一下 MicrometerRouterPolicyFactory 和 MicrometerMessageHistoryFactory 的 pom 依赖关系。
    • @prashant.kr.mod 它是&lt;dependency&gt; &lt;groupId&gt;org.apache.camel&lt;/groupId&gt; &lt;artifactId&gt;camel-micrometer&lt;/artifactId&gt; &lt;/dependency&gt;
    【解决方案2】:

    您应该使用 camel-micrometer-starter 依赖项来代替与千分尺集成。然后您可以使用该依赖项中的 micrometer 路由策略来监控您的所有路由。请参阅文档:https://camel.apache.org/components/2.x/micrometer-component.html

    【讨论】:

    • 我已经添加了这个,但是我遇到了骆驼指标出现在 /actutator/prometheus 页面中的问题。我尝试将camel.component.micrometer.metrics-registry 设置为metricsRegistryio.micrometer.prometheus.PrometheusRegistryprometheusRegistry,但仍然不行。我是否需要在配置类中定义一个 bean 才能让指标出现在 Prometheus Actuator 端点中?
    • 我尝试将其添加到我的配置类中,但 /actuator/prometheus 页面变为空白:@Bean(MicrometerConstants.METRICS_REGISTRY_NAME) public PrometheusMeterRegistry meterRegistry() { return new PrometheusMeterRegistry(PrometheusConfig.DEFAULT); }
    • 我尝试设置 camel.component.micrometer.metrics-registry=prometheusMeterRegistry 并让 Prometheus Actuator 端点再次工作,但似乎没有添加与 Camel 相关的任何内容。
    • 你还需要路由策略工厂让它监控 Camel 路由
    • 添加了我的配置类但仍然没有变化:@Bean public CamelContextConfiguration contextConfiguration() { return new CamelContextConfiguration() { @Override public void beforeApplicationStart(CamelContext camelContext) { camelContext.addRoutePolicyFactory(new MicrometerRoutePolicyFactory()); camelContext.setMessageHistoryFactory(new MicrometerMessageHistoryFactory()); } @Override public void afterApplicationStart(CamelContext camelContext) { } }; }
    【解决方案3】:

    我可以通过保持这些依赖关系完整来查看指标

    <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-management</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-metrics</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.camel.springboot</groupId>
      <artifactId>camel-micrometer-starter</artifactId>
    </dependency>
    <dependency>
      <groupId>io.micrometer</groupId>
      <artifactId>micrometer-registry-prometheus</artifactId>
    </dependency>
    

    为什么我看不到实际的进程和 bean 名称,而不是像 process3、bean1 等??

        CamelMessageHistory_seconds_sum{camelContext="AppName",nodeId="process3",routeId="AppNameRoute",serviceName="MicrometerMessageHistoryService",} 0.041466
        CamelMessageHistory_seconds_count{camelContext="AppName",nodeId="bean1",routeId="AppNameRoute",serviceName="MicrometerMessageHistoryService",} 100.0
        CamelMessageHistory_seconds_sum{camelContext="AppName",nodeId="bean1",routeId="AppNameRoute",serviceName="MicrometerMessageHistoryService",} 4.8417576
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-17
      • 1970-01-01
      • 2013-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多