Prometheus에서 데이터를 쿼리하는 방식으로는 크게 두 가지가 있다.
이 두가지 방식에 대해 공부해보자.
PromQL | HTTP API | |
---|---|---|
문법 | metric + 함수 + 레이블 | URL 파라미터로 PromQL 전달 |
출력 | UI 또는 텍스트 | JSON |
사용 | 웹 UI, Grafana 등 | 외부코드, 자동화, Custom Tool 등 |
PromQL(Prometheus Query Language)은 Prometheus의 내장 쿼리 언어이다.
시계열데이터(Time Series Data)를 질의, 집계, 필터링, 변환 등의 작업을 수행할 수 있다.
※ 시계열 데이터(Time Series Data) : 시간의 흐름에 따라 수집된 데이터로, 특정 시간 간격을 두고 연속적으로 관측된 값을 의미
sum()
, rate()
, avg()
, max()
, min()
등 다양한 함수 및 연산자를 사용해서 복잡한 질의를 구성할 수 있다.
http_request_total 메트릭의 현재 시계열을 모두 가져옴
http_requests_total
최근 5분동안 api-server에서 발생한 HTTP 요청수의 GET 요청 계산
http_requests_total{job="api-server", method="GET"}
최근 5분 동안의 HTTP 요청 수의 초당 증가율을 계산
rate(http_requests_total{job="api-server"}[5m])
job 별 HTTP 요청수의 증가율을 합산
sum(rate(http_requests_total[5m])) by (job)
메모리 사용률 계산(백분율)
node_memory_MemFree / node_memory_MemTotal * 100
up 메트릭이 0인 (즉 다운된 대상만 선택)
up == 0
Prometheus가 제공하는 REST API를 사용하여 데이터를 조회하거나 자동화할 때 사용한다.
현재 Target이 살아있는지(UP 상태인지) 확인아있는지(UP 상태인지) 확인
GET /api/v1/query?query=up
응답예시
{
"status": "success", // 쿼리성공여부
"data": {
"resultType": "vector", // 단일 시점의 시계열 결과 (스냅샷)
"result": [
{
"metric": {"job": "node", "instance": "localhost:9100"}, // 해당 시계열의 메타정보{prometheus에서 수집한 job 이름, 해당 타깃의 주소와 포트}
"value": [1627645327.182, "1"] // 이 시계열 데이터가 수집된 시점의 타임스탬프, up 상태(1:정상, 0:비정상)
}
]
}
}
Endpoint | 설명 |
---|---|
/api/v1/query | 현재 시점의 상태 쿼리 |
/api/v1/query_range | 범위 데이터(시간 간격) 쿼리 |
/api/v1/series | 존재하는 시계열 메타데이터 조회 |
/api/v1/label/{name}/values | 특정 레이블의 모든 값 조회 |
최근 5분동안 api-server에서 발생한 HTTP 요청수의 증가율 계산
GET /api/v1/query?query=rate(http_requests_total{job="api-server"}[5m])