2.3. 添加自定义 Camel K 集成指标


您可以使用 Camel MicroProfile Metrics 组件和 Java 代码中的注解将自定义指标添加到 Camel K 集成中。然后 Prometheus 将自动发现和显示这些自定义指标。

本节演示了将 Camel MicroProfile 指标注释添加到 Camel K 集成和服务实施代码的示例。

先决条件

流程

  1. 使用 Camel MicroProfile Metrics 组件注释,在您的 Camel 集成代码中注册自定义指标。以下示例显示了 Metrics.java 集成:

    // camel-k: language=java trait=prometheus.enabled=true dependency=mvn:org.my/app:1.0 
    1
    
    
    import org.apache.camel.Exchange;
    import org.apache.camel.LoggingLevel;
    import org.apache.camel.builder.RouteBuilder;
    import org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants;
    
    import javax.enterprise.context.ApplicationScoped;
    
    @ApplicationScoped
    public class Metrics extends RouteBuilder {
    
       @Override
       public void configure() {
            onException()
                .handled(true)
                .maximumRedeliveries(2)
                .logStackTrace(false)
                .logExhausted(false)
                .log(LoggingLevel.ERROR, "Failed processing ${body}")
                // Register the 'redelivery' meter
                .to("microprofile-metrics:meter:redelivery?mark=2")
                // Register the 'error' meter
                .to("microprofile-metrics:meter:error"); 
    2
    
    
            from("timer:stream?period=1000")
                .routeId("unreliable-service")
                .setBody(header(Exchange.TIMER_COUNTER).prepend("event #"))
                .log("Processing ${body}...")
                // Register the 'generated' meter
                .to("microprofile-metrics:meter:generated") 
    3
    
                // Register the 'attempt' meter via @Metered in Service.java
                .bean("service") 
    4
    
                .filter(header(Exchange.REDELIVERED))
                    .log(LoggingLevel.WARN, "Processed ${body} after ${header.CamelRedeliveryCounter} retries")
                    .setHeader(MicroProfileMetricsConstants.HEADER_METER_MARK, header(Exchange.REDELIVERY_COUNTER))
                    // Register the 'redelivery' meter
                    .to("microprofile-metrics:meter:redelivery") 
    5
    
                .end()
                .log("Successfully processed ${body}")
                // Register the 'success' meter
                .to("microprofile-metrics:meter:success"); 
    6
    
        }
    }
    Copy to Clipboard Toggle word wrap
    1
    使用 Camel K modeline 自动配置 Prometheus trait 和 Maven 依赖项
    2
    错误 :指标与未处理的事件数对应的错误数
    3
    生成的 :指标要处理的事件数
    4
    尝试 :指标对服务 bean 发出的调用数,以处理传入的事件
    5
    重新传送 :指标为处理事件而重试的重试次数
    6
    成功 :考虑成功处理的事件数量
  2. 根据需要将 Camel MicroProfile 指标注释添加到任何实施文件中。以下示例显示了 Camel K 集成调用 的服务 bean,这会产生随机失败:

    package com.redhat.integration;
    
    import java.util.Random;
    
    import org.apache.camel.Exchange;
    import org.apache.camel.RuntimeExchangeException;
    
    import org.eclipse.microprofile.metrics.Meter;
    import org.eclipse.microprofile.metrics.annotation.Metered;
    import org.eclipse.microprofile.metrics.annotation.Metric;
    
    import javax.inject.Named;
    import javax.enterprise.context.ApplicationScoped;
    
    @Named("service")
    @ApplicationScoped
    @io.quarkus.arc.Unremovable
    
    public class Service {
    
       //Register the attempt meter
       @Metered(absolute = true)
       public void attempt(Exchange exchange) { 
    1
    
          Random rand = new Random();
             if (rand.nextDouble() < 0.5) {
                 throw new RuntimeExchangeException("Random failure", exchange); 
    2
    
          }
       }
     }
    Copy to Clipboard Toggle word wrap
    1
    @Metered MicroProfile Metrics 注释声明了计量,并根据指标方法名称自动生成名称,在这种情况下,尝试
    2
    这个示例没有随机失败,以帮助生成指标的错误。
  3. 按照以下步骤配置 Camel K 集成指标,以运行集成并在 Prometheus 中查看自定义 Camel K 指标。

    在本例中,示例已经使用 Metrics.java 中的 Camel K modeline 自动配置 Prometheus 和 Service.java 所需的 Maven 依赖项。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat