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와 함께 사용하면 시각화를 통해 더욱 직관적으로 데이터를 분석 가능함.