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