2.3. 사용자 정의 Camel K 통합 지표 추가
Java 코드에서 Camel MicroProfile Metrics 구성 요소와 주석을 사용하여 Camel K 통합에 사용자 지정 지표를 추가할 수 있습니다. 그러면 이러한 사용자 지정 지표가 Prometheus에서 자동으로 검색 및 표시됩니다.
이 섹션에서는 Camel K 통합 및 서비스 구현 코드에 Camel MicroProfile Metrics 주석을 추가하는 예를 보여줍니다.
사전 요구 사항
- OpenShift에서 자체 서비스 모니터링을 이미 활성화해야 합니다. OpenShift에서 사용자 워크로드 모니터링 활성화를 참조하십시오.
절차
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 } }
필요에 따라 모든 구현 파일에 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) { 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 모드를 사용하여Service.java에 Prometheus 및 필수 Maven 종속성을 자동으로 구성합니다.