OpenTelemetry와 Prometheus

OpenTelemetry와 Prometheus (OpenTelemetry)

이 문서는 OpenTelemetry(OTel)와 Prometheus를 통합하는 방법을 설명해요. OpenTelemetry는 트레이스·메트릭·로그를 위한 벤더 중립적인 오픈 표준이에요. Prometheus 3.0부터는 OTLP(OpenTelemetry Protocol)로 메트릭을 직접 수신할 수 있고, Prometheus 엑스포터는 OTel 지표를 Prometheus 형식으로 변환해 노출할 수 있습니다.

Prometheus는 OpenTelemetry 메트릭을 네이티브로 스크레이프할 수 있는 익스포저(expoter)와, OTLP를 직접 받아들이는 remote write 수신 옵션을 제공해요. 이 문서는 그 연결 고리와 설정 방법을 정리합니다.

출처: 문서

본문

통합 방식

OpenTelemetry는 데이터 수집·처리를 위한 표준이며, Prometheus는 메트릭 저장·조회·알림을 담당합니다. 둘을 연결하는 주요 경로는 두 가지입니다:

  1. Prometheus가 OTel 메트릭을 스크레이프 — OpenTelemetry Collector가 Prometheus 익스포터를 사용해 OTel 지표를 Prometheus 형식 텍스트로 노출하고, Prometheus가 이를 스크레이프.
  2. Prometheus가 OTLP를 직접 수신 — Prometheus를 OTLP remote write 수신기로 구성해, OTel Collector(또는 SDK)가 /api/v1/otlp/v1/metrics로 메트릭을 전송.

OpenTelemetry Collector → Prometheus

OpenTelemetry Collector 구성에서 Prometheus 익스포터 익스포트:

exporters:
  prometheus:
    endpoint: "0.0.0.0:9090"
    namespace: otelcol

service:
  pipelines:
    metrics:
      receivers: [otlp]
      processors: []
      exporters: [prometheus]

이러면 Collector가 :9090에서 Prometheus 형식 메트릭을 노출하고, Prometheus가 그 주소를 스크레이프합니다.

Prometheus에서 OTLP 수신

Prometheus는 실험적으로 OTLP remote write를 지원합니다. Prometheus 설정에서 수신을 활성화하면, Collector가 Prometheus remote write 익스포터를 사용해 OTLP 메트릭을 보낼 수 있습니다:

# prometheus.yml (OTLP remote write 수신 활성화 예시)

이렇게 하면 OTel SDK/Collector가 수집한 메트릭이 Prometheus의 시계열로 저장되고, 기존 PromQL로 조회할 수 있습니다.

스크레이프 대상으로서의 OTel exporter

각 애플리케이션에서 OpenTelemetry SDK로 지표를 만들고 Collector의 Prometheus 익스포터를 통해 /metrics로 노출하면, Prometheus는 다른 엑스포터처럼 scrape_config로 스크레이프합니다.

단위·형식 주의

OTel의 단위/이름 규칙과 Prometheus의 단위 접미사 규칙이 다를 수 있으므로, 변환 시 메트릭 이름과 단위(_seconds, _bytes 등)를 확인하세요.

더 알아보기 (Learn more)