피드로 돌아가기
Prometheus at Scale: Surviving the Cardinality Cliff
Dev.toDev.to
Infrastructure

High Cardinality로 인한 OOM 해결 및 Thanos 기반 확장 구조 설계

Prometheus at Scale: Surviving the Cardinality Cliff

Samson Tanimawo2026년 4월 22일3intermediate

Context

request_path 라벨 추가로 인한 Time Series 급증으로 Prometheus 메모리가 8GB에서 32GB로 폭증하며 OOM 발생. 무분별한 라벨 생성으로 인한 Cardinality Cliff 현상이 모니터링 시스템 전체의 가용성을 저해하는 구조적 한계 노출.

Technical Solution

  • Unbounded 라벨(user_id, ip_address 등) 사용을 금지하는 Label Policy 수립을 통한 Cardinality 제어
  • Relabeling Rules를 활용하여 유입 단계에서 High-Cardinality 라벨을 Drop하거나 정규식을 통한 카테고리화 수행
  • Prometheus의 로컬 보관 주기를 6시간으로 단축하고 Thanos Sidecar를 도입하여 Object Storage 기반의 장기 저장 구조로 전환
  • Thanos Query를 통한 다중 Prometheus 인스턴스의 통합 뷰 구현 및 쿼리 분산 처리
  • Recording Rules를 적용하여 고비용 집계 쿼리를 사전에 계산함으로써 대시보드 응답 속도 최적화

1. Metric 라벨 정의 시 Unbounded 값(ID, Email, Path) 포함 여부 검토

2. `topk` 쿼리를 활용한 High-Cardinality Metric 주기적 모니터링

3. 복잡한 집계 쿼리는 Raw Metric 대신 Recording Rules로 사전 계산

4. 로컬 저장소 한계 극복을 위한 Thanos 또는 Cortex 도입 검토

원문 읽기