[Prometheus] PromQL, HTTP API 데이터 쿼리 방법 정리

duck-ach·2일 전
0

Mornitoring

목록 보기
1/1

Prometheus 데이터 쿼리 방법

Prometheus에서 데이터를 쿼리하는 방식으로는 크게 두 가지가 있다.

  • PromQL(Prometheus Query Language)
  • HTTP API

이 두가지 방식에 대해 공부해보자.

PromQLHTTP API
문법metric + 함수 + 레이블URL 파라미터로 PromQL 전달
출력UI 또는 텍스트JSON
사용웹 UI, Grafana 등외부코드, 자동화, Custom Tool 등

PromQA

PromQL(Prometheus Query Language)은 Prometheus의 내장 쿼리 언어이다.
시계열데이터(Time Series Data)를 질의, 집계, 필터링, 변환 등의 작업을 수행할 수 있다.

※ 시계열 데이터(Time Series Data) : 시간의 흐름에 따라 수집된 데이터로, 특정 시간 간격을 두고 연속적으로 관측된 값을 의미

sum(), rate(), avg(), max(), min() 등 다양한 함수 및 연산자를 사용해서 복잡한 질의를 구성할 수 있다.

PromQA 예제

단일 메트릭 조회

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

HTTP API

Prometheus가 제공하는 REST API를 사용하여 데이터를 조회하거나 자동화할 때 사용한다.

PromQA 예제

현재 상태조회 쿼리

현재 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:비정상)
      }
    ]
  }
}

HTTP API 예시

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])
profile
자몽 허니 블랙티와 아메리카노 사이 그 어딘가

0개의 댓글