- PromQL 에서는 11개의 집계 연산자(aggregation operator) 와 2개의 선택적 구문 without 과 by 를 제공한다.
- 집계 연산자는 인스턴트 벡터에서 동작하며 결과물 역시 인스턴스 벡터다.
without (label, ..) : 삭제될 레이블을 지정
by (label, ...) : 보존할 레이블을 지정
without
- 프로메테우스에 수집된 메트릭에 사용 중인 모든 레이블을 알고 있을 수 없다.
- 일반적으로 메트릭을 집계할 때 대상 레이블은 보존되어야 하므로 without 절을 사용해 삭제할 레이블을 지정해준다.
sum (node_filesystem_size_bytes) without(fstype, mountpoint)
- 위 표현식과 아래 표현식은 동일하다.
- vector expression 이 길 경우, without/by 절은 아래와 같이 앞에 기재할 수 있다.
sum without(fstype, mountpoint)(node_filesystem_size_bytes)
by
- 알림을 통해 전달되거나 대시보드에 사용될 대상 레이블이 삭제되지 않게 하려면 by 절을 사용할 때 주의해야 한다.
- 동일한 집계에 by 절과 without 절을 함께 사용할 수 없다.
- by 절에 instance 나 job 레이블을 지정하지 않는다면, 그룹은 정의되지 않고 두 레이블이 출력에도 포함되지 않는다.
- 대체로 이런 이유로 인해 by 절보다는 without 절을 사용하는 편이 좋다.
sum by (job, instance, device) (node_filesystem_size_bytes)
sum (node_filesystem_size_bytes) by (job, instance, device)
by 절을 유용하게 사용하는 방법
1. without 절과 다르게 by 절은 자동으로 __name__ 레이블을 삭제하지 않는다.
- 아래와 같은 표현식을 통해 동일한 메트릭 이름을 갖는 시계열이 몇 개나 있는지 조사하는데 사용할 수 있다.
sort_desc(count by(__name__)({__name__=~".+"}))
2. 파악되지 않는 레이블을 삭제하려는 경우
'Prometheus' 카테고리의 다른 글
PromQL (0) | 2021.09.06 |
---|