메트릭 플러그인

메트릭 플러그인 (Metrics Plugin)

Pinot가 내부 메트릭을 수집·노출하는 데 사용할 메트릭 라이브러리를 제어하는 메트릭 플러그인에 대한 문서예요. 모든 Pinot 컴포넌트(broker, server, controller, minion)는 PinotMetricsFactory SPI를 사용해 메트릭 레지스트리, 카운터, 게이지, 미터, 타이머, JMX 리포터를 만든다.

출처: 문서

본문

메트릭 플러그인은 Pinot가 내부 메트릭을 수집·노출하는 데 사용할 메트릭 라이브러리를 제어해요. 모든 Pinot 컴포넌트(broker, server, controller, minion)는 PinotMetricsFactory SPI를 사용해 메트릭 레지스트리, 카운터, 게이지, 미터, 타이머, JMX 리포터를 만들어요.

Pinot는 세 가지 메트릭 구현과 함께 제공돼요:

구현 클래스 설명
Dropwizard DropwizardMetricsFactory Dropwizard Metrics(이전 Codahale) 기반. 이게 기본이에요.
Yammer YammerMetricsFactory Yammer Metrics 기반, 예전 Pinot 버전에서 사용됨.
Compound CompoundPinotMetricsFactory 여러 레지스트리에 동시에 메트릭을 팬아웃하는 메타 구현. 메트릭 라이브러리 비교·마이그레이션에 유용.

구성 (Configuration)

Pinot가 사용할 메트릭 팩토리를 구성하려면 컴포넌트 구성(broker, server, controller, minion)에 다음 속성을 설정해요:

pinot.<component>.metrics.factory.className=org.apache.pinot.plugin.metrics.dropwizard.DropwizardMetricsFactory

<component>를 broker, server, controller, minion으로 교체해요.

Dropwizard 구성 (Dropwizard Configuration)

Dropwizard 메트릭 플러그인은 선택적 JMX 도메인 속성을 지원해요:

pinot.metrics.dropwizard.domain=org.apache.pinot.common.metrics

설정하지 않으면 기본 도메인 org.apache.pinot.common.metrics가 사용돼요.

Yammer 구성 (Yammer Configuration)

Yammer 메트릭 플러그인은 팩토리 클래스 이름 설정 외에 추가 구성이 필요 없어요.

Compound 메트릭 구성 (Compound Metrics Configuration)

Compound 메트릭 팩토리는 여러 메트릭 레지스트리에 한 번에 보고해요. 마이그레이션 중 서로 다른 구현 간 동작 비교에 유용해요.

pinot.<component>.metrics.factory.className=org.apache.pinot.plugin.metrics.compound.CompoundPinotMetricsFactory

다음 추가 속성이 Compound 팩토리가 하위 팩토리를 발견하는 방식을 제어해요:

속성 접미사 값 설명
compound.algorithm CLASSPATH (기본), SERVICE_LOADER, LIST 하위 팩토리를 발견하는 방법
compound.ignored 쉼표 구분 클래스 이름 제외할 메트릭 팩토리 클래스
compound.list 쉼표 구분 클래스 이름 팩토리 클래스의 명시적 목록 (LIST 알고리즘과 함께 사용)

SPI 인터페이스 (SPI Interface)

커스텀 메트릭 플러그인을 작성하려면 PinotMetricsFactory 인터페이스를 구현해요:

public interface PinotMetricsFactory {
  void init(PinotConfiguration metricsConfiguration);
  PinotMetricsRegistry getPinotMetricsRegistry();
  PinotMetricName makePinotMetricName(Class<?> klass, String name);
  <T> PinotGauge<T> makePinotGauge(Function<Void, T> condition);
  PinotJmxReporter makePinotJmxReporter(PinotMetricsRegistry metricsRegistry);
  String getMetricsFactoryName();
}

주요 메서드 (Key Methods)

메서드 설명
init(PinotConfiguration) Pinot 구성으로 팩토리를 초기화.
getPinotMetricsRegistry() 싱글턴 메트릭 레지스트리 인스턴스 반환.
makePinotMetricName(Class, String) 클래스로 스코프된 메트릭 이름 생성.
makePinotGauge(Function) 제공된 함수로 백업된 게이지 메트릭 생성.
makePinotJmxReporter(PinotMetricsRegistry) 주어진 레지스트리에 대한 JMX 리포터 생성.
getMetricsFactoryName() 팩토리의 사람이 읽을 수 있는 이름 반환.

커스텀 메트릭 플러그인 작성 (Writing a Custom Metrics Plugin)

커스텀 메트릭 플러그인을 구현하려면:

  1. PinotMetricsFactory를 구현하는 클래스를 만들어요.
  2. @AutoService(PinotMetricsFactory.class)와 @MetricsFactory로 어노테이션해요.
  3. Pinot 메트릭 타입(PinotCounter, PinotGauge, PinotMeter, PinotTimer, PinotMetricsRegistry, PinotJmxReporter)용 래퍼 클래스를 구현해요.
  4. Pinot 플러그인으로 패키징해요 (커스텀 플러그인 작성 참고).
  5. 플러그인 JAR을 Pinot /plugins 디렉토리에 넣어요.

커스텀 메트릭 플러그인은 Prometheus, Micrometer, OpenTelemetry 같은 모니터링 시스템 통합에 유용할 수 있어요.

더 알아보기 (Learn more)