Red Hat Camel K is no longer supported.
As of June 30, 2025, Red Hat build of Camel K has reached End of Life. The suggested replacements is Red Hat build of Apache Camel. For details about moving, see the Camel K to Camel Quarkus migration guide.2.3. 사용자 정의 Camel K 통합 메트릭 추가
Java 코드에서 Camel MicroProfile Metrics 구성 요소 및 주석을 사용하여 Camel K 통합에 사용자 지정 지표를 추가할 수 있습니다. 그러면 이러한 사용자 정의 지표가 Prometheus에서 자동으로 검색되고 표시됩니다.
이 섹션에서는 Camel MicroProfile Metrics 주석을 Camel K 통합 및 서비스 구현 코드에 추가하는 예를 보여줍니다.
사전 요구 사항
- OpenShift에서 자체 서비스에 대한 모니터링을 이미 활성화해야 합니다. OpenShift에서 사용자 워크로드 모니터링 활성화를 참조하십시오.
프로세스
Camel MicroProfile Metrics 구성 요소 주석을 사용하여 Camel 통합 코드에 사용자 지정 지표를 등록합니다. 다음 예제에서는
Metrics.java
통합을 보여줍니다.// camel-k: language=java trait=prometheus.enabled=true dependency=mvn:org.my/app:1.0 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"); 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") // Register the 'attempt' meter via @Metered in Service.java .bean("service") .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") .end() .log("Successfully processed ${body}") // Register the 'success' meter .to("microprofile-metrics:meter:success"); } }
// 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 Copied! 필요에 따라 Camel MicroProfile Metrics 주석을 구현 파일에 추가합니다. 다음 예제에서는 임의의 오류를 생성하는 Camel K 통합에서 호출하는
서비스
빈을 보여줍니다.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) { Random rand = new Random(); if (rand.nextDouble() < 0.5) { throw new RuntimeExchangeException("Random failure", exchange); } } }
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 Copied! Camel K 통합 메트릭 구성 단계에 따라 통합을 실행하고 Prometheus에서 사용자 지정 Camel K 지표를 확인합니다.
이 경우 예제에서는
Metrics.java
에서 Camel K 모드를 사용하여 Prometheus 및Service.java
에 필요한 Maven 종속성을 자동으로 구성합니다.