2.3. 사용자 정의 Camel K 통합 지표 추가

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 특성 및 Maven 종속 항목을 자동으로 구성
    2
    Error: 처리되지 않은 이벤트 수에 해당하는 오류 수에 대한 메트릭
    3
    생성 됨 : 처리할 이벤트 수에 대한 메트릭
    4
    attempt: 들어오는 이벤트를 처리하기 위해 서비스 빈에 수행된 호출 수를 나타냅니다.
    5
    redelivery: 이벤트를 처리하기 위해 발생한 재시도 횟수를 나타냅니다.
    6
    Success (ucce) : 성공적으로 처리된 이벤트 수에 대한 메트릭
  2. 필요에 따라 모든 구현 파일에 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
          }
       }
     }
    1
    @Metered MicroProfile Metrics 주석은 측정을 선언하고 지표 메서드 이름(이 경우 시도 )을 기반으로 이름이 자동으로 생성됩니다.
    2
    이 예제는 메트릭에 대한 오류를 생성하기 위해 임의로 실패합니다.
  3. Camel K 통합 메트릭 구성 단계에 따라 통합을 실행하고 Prometheus에서 사용자 지정 Camel K 지표를 확인합니다.

    이 경우 예제에서는 이미 Metrics.java 의 Camel K 모드를 사용하여 Service.java 에 Prometheus 및 필수 Maven 종속성을 자동으로 구성합니다.