320x100
320x100

PromQL

프로메테우스에 저장된 시계열 데이터를 필터링, 집계, 계산하는 쿼리 언어

 

- 프로메테우스 메트릭 구조

메트릭이름{label_key="value"} value @ timestamp

# 예시
http_requests_total{method="GET", status="200", instance="10.0.0.1:8080"}

 

- ProQL 기본 타입

Instant Vector (현재 시점 값)

Range Vector (구간 데이터) 

Scalar (숫자)

String (문자열)

 

 

 

 

라벨 필터링 문법

http_requests_total{method="GET"}
http_requests_total{status!="500"}
http_requests_total{instance=~"10\\.0\\.0\\..*"}

 

- 기호

`=` 일치

`!=` 불일치

`=~` 정규식

`!~` 정규식 제외

 

 

 

 

Range 함수

- rate (증가율 - Counter 전용)

rate(http_requests_total[5m])

 

- increase (기간 누적 증가량)

increase(http_requests_total[10m])

 

- irate (순간 증가율)

irate(node_cpu_seconds_total[1m])

 

 

 

 

집계 함수

- 기본 집계

sum(rate(http_requests_total[5m]))
avg(node_memory_Active_bytes)
max(node_load1)
count(node_cpu_seconds_total)

 

- 라벨 유지 / 제거

sum by (instance) (rate(http_requests_total[5m]))
sum without (pod) (rate(container_cpu_usage_seconds_total[5m]))

 

 

 

 

리소스

- 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_free_bytes / node_filesystem_size_bytes)

 

 

 

 

 

HTTP 응답 코드 비율

sum(rate(http_requests_total{status=~"5.."}[5m]))
/
sum(rate(http_requests_total[5m])) * 100

 

 

 

 

 

알람용 표현식

- 3분 이상 CPU 80%

100 - avg(rate(node_cpu_seconds_total{mod="idle"}[5m])) * 100 > 80

 

 

 

 

 

Vector 매칭

- instance 기준 계산

node_memory_MemAvailable_bytes
/
on(instance)
node_memory_MemTotal_bytes

 

- 다대일 조인

rate(http_requests_total[5m])
  * on (instance)
  group_left (node)
node_info

 

 

 

 

 

중요

PromQL은 Exporter가 노출한 메트릭 구조 그대로 쿼리

즉, Exporter를 어떻게 만들었냐가 PRomQL로 무엇을 할 수 있는지 결정됨

프로메테우스는 메트릭을 가공하지 않고 그대로 저장

PromQL은 그걸 읽기만 하는 것임

 

=> 고로 속성명을 커스텀하여 PromQL에서 사용가능하다

300x250
728x90