Skip to content

basic-promql

PromQL 기초 문법 정리

TL;DR

  • PromQL은 Prometheus에서 시계열 데이터를 조회하는 쿼리 언어임.
  • 기본적인 쿼리 패턴으로 인스턴스 상태 조회, 레이블 필터링, 집계 함수 등을 제공함.
  • rate(), sum(), avg(), increase() 등의 집계 및 함수 활용이 중요함.

기본 문법

  • {} 중괄호를 사용해 특정 메트릭을 필터링할 수 있음.
  • metric_name{label="value"} 형태로 레이블을 지정하여 원하는 데이터만 조회 가능함.
  • rate(metric[5m])처럼 시간 기반 함수 사용 가능.
# CPU 사용량 조회
node_cpu_seconds_total{mode="idle"}

레이블 필터링

  • = : 특정 값과 일치하는 레이블 선택.
  • != : 특정 값과 일치하지 않는 레이블 선택.
  • =~ : 정규 표현식 사용 가능.
  • !~ : 정규 표현식과 일치하지 않는 레이블 선택.
# 특정 인스턴스의 메모리 사용량 조회
node_memory_Active_bytes{instance="server1:9100"}

# 특정 모드를 제외한 CPU 사용량 조회
node_cpu_seconds_total{mode!="idle"}

집계 함수 활용

  • sum(): 전체 합을 구함.
  • avg(): 평균을 계산함.
  • min(), max(): 최소/최대값을 찾음.
  • count(): 데이터 개수를 셈.
# 모든 노드의 CPU 사용량 합계
sum(node_cpu_seconds_total)

# 특정 모드를 제외한 평균 CPU 사용량
avg(node_cpu_seconds_total{mode!="idle"})

시간 기반 함수

  • rate(metric[5m]): 5분 동안의 평균 증가율을 계산.
  • increase(metric[1h]): 1시간 동안 증가한 값 계산.
  • irate(metric[1m]): 1분 동안의 순간 증가율 계산.
# 5분 간 평균 HTTP 요청 속도
rate(http_requests_total[5m])

# 1시간 동안 증가한 메모리 사용량
increase(node_memory_Active_bytes[1h])

비교 연산자와 조건

  • > : 크다, < : 작다, >= : 크거나 같다, <= : 작거나 같다.
  • == : 같음, != : 다름.
  • and, or, unless 등의 논리 연산 사용 가능.
# CPU 사용량이 80% 이상인 인스턴스 찾기
node_cpu_seconds_total / node_cpu_seconds_total{mode="idle"} > 0.8

조인과 그룹화

  • on(label): 특정 레이블 기준으로 조인.
  • group_left, group_right를 사용하여 레이블 개수를 맞출 수 있음.
# HTTP 요청 수 대비 에러 비율 계산
sum(rate(http_requests_total{status="500"}[5m]))
/
sum(rate(http_requests_total[5m]))

마무리

  • PromQL은 Prometheus 환경에서 데이터를 분석하는 필수 도구임.
  • 기본 문법과 함수들을 조합하여 원하는 데이터를 쉽게 조회할 수 있음.
  • 실전에서는 Grafana와 함께 사용하면 시각화를 통해 더욱 직관적으로 데이터를 분석 가능함.