[promQL] 연산자

강민경·2024년 11월 19일

산술 이진 연산자

  • + (덧셈)
  • - (빼기)
  • * (곱셈)
  • / (나누기)
  • % (나머지)
  • ^ (제곱/지수)

이진 산술 연산자는 스칼라/스칼라, 벡터/스칼라, 벡터/벡터 값 쌍 사이에 정의됩니다.

두 스칼라 사이에서 동작은 명확합니다. 즉, 두 스칼라 피연산자에 모두 연산자를 적용할 결과인 다른 스칼라로 평가됩니다.

인스턴트 벡터와 스칼라 사이에서 연산자는 벡터의 모든 데이터 샘플 값에 적용됩니다. 예를 들어, 시계열 인스턴스 벡터가 2로 곱해지면 결과는 원래 벡터의 모든 샘플 값이 2로 곱해진 또 다른 벡터입니다. 메트릭 이름이 삭제됩니다.

두 개의 인스턴스 벡터 사이에서 이진 산술 연산자가 왼쪽 벡터의 각 항목과 오른쪽 벡터의 일치하는 요소에 적용됩니다. 결과는 결과 벡터로 전파되며 그룹화 레이블이 출력 레이블 지합이 됩니다. 메트릭 이름이 삭제됩니다. 오른쪽 벡터에서 일치하는 항목을 찾을 수 없는 항목은 결과의 일부가 아닙니다.





비교 이진 연산자

  • == (같다)
  • != (같지 않다)
  • > (~보다 크다)
  • < (~보다 작다)
  • >= (크거나 같다)
  • <= (작거나 같다)

비교 연산자는 스칼라/스칼라, 벡터/스칼라, 벡터/벡터 값 쌍 사이에 정의됩니다. 기본적으로 필터링합니다. 연산자 뒤에 bool을 입력하면 동작을 수정할 수 있으며, 필터링이 아닌 값에 대해 0 또는 1을 반환합니다.

두 스칼라 사이에는 bool 수식어가 제공되어야 하며, 이러한 연산자는 비교 결과에 따라 0 (false) 또는 1 (true)인 다른 스칼라를 생성합니다.

인스턴스 벡터와 스칼라 사이에서 이러한 연산자는 벡터의 모든 데이터 샘플 값에 적용되며, 비교 결과가 false인 벡터 요소는 결과 벡터에서 삭됩니다. bool 수식어가 제공되면 대신 삭제되는 벡터 요소는 0 값을 가지며, 유지되는 벡터 요소는 1 값을 갖습니다. bool 수식어가 제공되면 메트릭 이름이 삭제됩니다.

두 개의 인스턴스 벡터 사이에서 이러한 연사자는 기본적으로 필터 역할을 하며 일치하는 항목에 적용됩니다. 표현식이 true가 아니거나 표현식의 다른 쪽에서 일치하는 것을 찾지 못하는 벡터 요소는 결과에서 삭제되고, 다른 요소는 그룹화 레이블이 출력 레이블 세트가 되는 결과 벡터로 전파됩니다. bool 수식어가 제고되면 대신 삭제되었을 벡터 요소의 값은 0이고, 유지되었을 벡터 요소의 값은 1이며, 그룹화 레이블은 다시 출력 레이블 집합이 됩니다. bool 수식어가 제공되면 메트릭 이름이 삭제됩니다.





논리 / 집합 이진 연산자

  • and (교집합)
  • or (합집합)
  • unless (보완)

vector1 and vector2vector2에 정확히 일치하는 레이블 집합을 가진 요소가 있는 vector1의 요소로 구성된 벡터를 생성합니다. 다른 요소는 삭제됩니다. 메트릭 이름과 값은 왼쪽 벡터에서 이어집니다.

vector1 or vector2vector의 모든 원래 요소 (라벨 세트 + 값)와 vector1의 일치하는 라벨 세트가 없는 vector2의 모든 요소를 포함하는 벡터를 생성합니다.

vector1 unless vector2vector2에 정확히 일치하는 레이블 집합을 가진 요소가 없는 vector1 요소로 구성된 벡터를 생성합니다. 두 벡터의 모든 일치하는 요소가 삭제됩니다.





집계 연산자

서론

  • promQL에서는 11개의 집계 연산자와 2개의 선택적 구문 without과 by를 제공한다.
  • 집계 연산자는 인스턴스 벡터에서 동작하며 결과물 역시 인스턴스 벡터다.




without

  • without은 결과 벡터에서 나열된 레이블을 제거하는 반면, 다른 모든 레이블은 결과 벡터에 보존됩니다.
sum (node_filesystem_size_bytes) without(fstype, mountpoint)
  • 위 표현식과 아래 표현식은 동일하다.
  • vector expression이 길 경우, without / by 절은 아래와 같이 앞에 기재할 수 있다.
sum without(fstype, mountpoint)(node_filesystem_size_bytes)
  • group by와 유사한데, 해당 라벨만 제외하고 group by를 수행한다.




by

  • by는 벡터의 모든 요소 간에 레이블 값이 동일하더라도 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)
  • 기존에 사용하던 group by와 동일하다.




참고 사이트:
https://prometheus.io/docs/prometheus/latest/querying/operators/#aggregation-operators
https://blog.voidmainvoid.net/448
https://beanstation.tistory.com/7

profile
간단한 기록

0개의 댓글