2.3. 添加自定义 Camel K 集成指标
您可以使用 Camel MicroProfile Metrics 组件和 Java 代码中的注解将自定义指标添加到 Camel K 集成中。然后 Prometheus 将自动发现和显示这些自定义指标。
本节演示了将 Camel MicroProfile 指标注释添加到 Camel K 集成和服务实施代码的示例。
前提条件
- 您必须在 OpenShift 中启用对您自己的服务的监控。请参阅 在 OpenShift 中启用用户工作负载监控。
流程
使用 Camel MicroProfile Metrics 组件注释,在您的 Camel 集成代码中注册自定义指标。以下示例显示了
Metrics.java集成:// camel-k: language=java trait=prometheus.enabled=true dependency=mvn:org.my/app:1.01 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 } }根据需要将 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 } } }按照以下步骤配置 Camel K 集成指标,以运行集成并在 Prometheus 中查看自定义 Camel K 指标。
在本例中,示例已经使用
Metrics.java中的 Camel K modeline 自动配置 Prometheus 和Service.java所需的 Maven 依赖项。