Prometheus(P8s)의 Query(PromQL 이라고도 함)은 SQL과는 차이가 있어 기본문법과 Metric Join에 대해 설명하고자 합니다.
P8s에서 Metric을 출력하는 형태를 보면,
http_requests_total{container=”A”} 1000
**<메트릭 이름="">{<레이블키>=<레이블값>,<레이블 키="">=<레이블값>...}레이블값>레이블>레이블값>레이블키>메트릭>
P8s의 Data Type은 4가지로 분류하고 사용하는 값의 타입은 오로지 float64 입니다.
(참고 1) https://prometheus.io/docs/prometheus/latest/querying/basics/#expression-language-data-types
가장 기본이 되는 문법으로, label을 조건으로 원하는 Instant vector를 검색할 수 있다.
http_requests_total
- =~ 는 regex를 이용할 수 있는 operator이며
- environment label 값이 staging 혹은 testing 혹은 development 이고
- method가 GET이 아닌 http_requests_total 이름의 instant vector를 검색함
모든 Label 값을 검색하고자 할때는 .* 보다는 .+를 사용해야 합니다. Metric 이름은 name 이란 Label로 저장되어 여러 metric의 이름이나 패턴으로 검색하고 싶다면 metric 이름은 비우고 name label로 검색하면 됩니다.
검색된 metric 결과를 합산하거나 평균내는 등의 수학적인 계산이 필요할 때 아래와 같은 Operator들을 이용합니다. (SQL에서의 Group by와 같음)
(참고 2) https://prometheus.io/docs/prometheus/latest/querying/operators/#aggregation-operators
([parameter,] ) [without|by (
by 와 without 은 group by 와 같은 역할이지만 without은 by의 반대 관계입니다. 즉, without을 사용하면 해당 label은 제외하고 나머지로 group by를 해야 합니다.
sum(http_requests_total) by (method)
http_requests_total을 method 로 group by 로 합산합니다. (결과값) 2000 3000
sum by (method) (http_requests_total)
by 를 앞으로 이동해 사용할 수 있다.
궁극의 목표인 Join 쿼리는 다음 블로그에서 이어가겠습니다.