본문 바로가기

Prometheus

PromQL without 과 by 의 차이점

  • 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