搜索

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

download PDF

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

本节介绍在 Camel K 集成和服务实施代码中添加 Camel MicroProfile Metrics 注释的示例。

先决条件

流程

  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
        }
    }
    1
    使用 Camel K modeline 来自动配置 Prometheus trait 和 Maven 依赖项
    2
    错误 :指标与尚未处理的事件数对应的错误数
    3
    generated :指标要处理的事件数量
    4
    attempt:指标为服务 bean 发出的调用数,以处理传入的事件
    5
    redelivery :指标为处理事件的重试次数
    6
    success:指标成功处理的事件数
  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
          }
       }
     }
    1
    @Metered MicroProfile Metrics 注释声明量表,名称会根据指标方法名称自动生成,本例中为 attempt
    2
    本例随机失败,以帮助生成指标的错误。
  3. 按照 配置 Camel K 集成指标 中的步骤运行集成,并在 Prometheus 中查看自定义 Camel K 指标。

    在这种情况下,示例已在 Metrics.java 中使用 Camel K 模式行来自动配置 Prometheus 和 Service.java 所需的 Maven 依赖项。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.