PromQL

PromQL은 "메트릭 타입의 의미를 이해하지 않으면 결과가 잘못 나온다"는 점이 핵심이다. Counter를 그대로 쓰면 누적값만 보이므로 rate()가 필수이고, Histogram 퍼센타일은 histogram_quantile 없이는 구할 수 없다. 따라서 PromQL 작성 전에 "이 메트릭이 Counter/Gauge/Histogram 중 무엇인가?"를 먼저 확인하는 습관이 안전하다고 보인다.

메트릭 타입마다 쿼리 패턴이 갈린다

PromQL의 기본 단위는 메트릭 시계열이다. 메트릭 타입: Counter(단조 증가 누적 값), Gauge(현재 값, 오르내림), Histogram/Summary(분포)이며, 선택자는 metric{label="v",label!=...} 형태다.[1]

메트릭 타입 의미 대표 쿼리 패턴
Counter 단조 증가 누적 값 rate(counter[5m])로 속도 변환
Gauge 현재 값 (오르내림) 그대로 metric 사용 또는 avg_over_time
Histogram 분포 (bucket 단위) histogram_quantile(0.95, ...)로 퍼센타일
Summary 분포 (클라이언트측 quantile) metric{quantile="0.95"} 직접 선택

선택자, 범위 벡터, 집계, 퍼센타일

벡터 매칭·라벨 조작·시간 윈도우·부재 감지

자주 쓰는 스니펫

호스트 메트릭 (node-exporter)

# CPU 사용률 (%)
100 - (avg by (instance)(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)

# 메모리 사용률 (%)
(1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100

# 디스크 사용률 (%)
(1 - node_filesystem_avail_bytes{fstype!~"tmpfs|overlay"}
      / node_filesystem_size_bytes{fstype!~"tmpfs|overlay"}) * 100

# NIC 수신/송신 (bytes/s)
sum by(instance)(rate(node_network_receive_bytes_total{device!~"lo"}[5m]))

컨테이너 메트릭 (cAdvisor)

# 컨테이너 CPU (% of 1 CPU)
sum by (container)(rate(container_cpu_usage_seconds_total{container!=""}[5m])) * 100

# 컨테이너 메모리 (MiB)
container_memory_working_set_bytes{container!=""} / 1024^2

API 가용성 및 레이턴시 (blackbox + app)

# API 가용성 (1/0)
probe_success{instance="api"}

# API P95 레이턴시 (Histogram)
histogram_quantile(0.95, sum by (le)(
  rate(http_request_duration_seconds_bucket[5m])
))

실전 팁

쿼리 예시의 경계

실패 모드

관련

출처

테스트 질문


  1. PromQL.md — 0) 핵심 개념 요약 (메트릭 타입, 선택자, 범위 벡터, 증분/속도, 집계, 퍼센타일) ↩︎ ↩︎ ↩︎ ↩︎

  2. PromQL.md — 1) 선택자 & 필터 템플릿 ↩︎

  3. PromQL.md — 7.3) 벡터 매칭 (조인) ↩︎

  4. PromQL.md — 7.2) 라벨 조작 (label_replace) ↩︎

  5. PromQL.md — 8) 시간 윈도우 함수 ↩︎

  6. PromQL.md — 9) 이상 징후/부재 감지 ↩︎

  7. PromQL.md — 11) 실전 팁, "Blackbox는 metrics_path: /probe + relabel_configs 패턴 필수" ↩︎