weighted()는 어떻게 동작하나요?

모든 메트릭 쿼리에는 표준 평가 순서가 있습니다(쿼리 상세 분석을 빠르게 검토하세요). 예를 들어 아래 쿼리는 다음과 같이 계산됩니다: sum:kubernetes.cpu.requests{*} by {kube_container_name}.rollup(avg, 10)

  1. 시간 집계 - 각 시계열(고유 태그 값 조합으로 정의)의 값을 10초 롤업반영) 간격마다 합산합니다. 고유 태그 값 조합의 수는 가장 변동성이 높고 세분화된 태그로 정의됩니다. 예를 들어, 메트릭에서는 container_id에 의해 결정됩니다.
  2. 그런 다음 kube_container_name(공간 집계)당 모든 평균값의 합계를 하나의 대표값으로 간주합니다. 개별 kube_container_name당 합산 값은 각 롤업(반영) 간격의 고유한 container_id의 수에 따라 달라집니다.

weighted() 함수는 본 게이지 메트릭에 대해 kube_container_name으로 합산 시 container_id 태그의 짧은 수명을 설명합니다.

예시

다음을 가정하여 쿼리를 고려합니다.
sum:kubernetes_state.pod.uptime{*} by {version}.rollup(avg, 10)

  • 게이지 메트릭의 제출 간격은 10초로 정의됩니다.
  • 데이터 포인트는 60초마다 그래프로 표시됩니다.
  • 항상 두 가지 버전이 존재하는 쿠버네티스(Kubernetes) 포드가 있습니다. 각 버전은 앱으로 레이블화되며 앱당 하나의 버전만 존재합니다.

60초 이상의 원시 데이터는 다음과 비슷할 수 있습니다.

시간0초10s20초30초40초50초
app:a, version:112NANNANNANNANNAN
app:b, version:1NAN121212NANNAN
app:c, version:1NANNANNANNAN1212
app:d, version:212NANNANNANNANNAN
app:e, version:2NAN161616NANNAN
app:f, version:2NANNANNANNAN1818
  1. 시간 집계 – 데이터 롤업하기 (Time Aggregation – Rolling up data) 시간 집계를 활용하여 avg(가중치 없음) 또는 제안된 weighted 평균으로 데이터를 롤업합니다.

    시간 집계.rollup(avg).weighted() 활용
    app:a, version:1122.0
    app:b, version:1126.0
    app:c, version:1124.0
    app:d, version:2122.0
    app:e, version:2168.0
    app:f, version:2186.0
  2. 공간 집계 (Space Aggregation ) 마지막으로 메트릭을 버전별로 집계하여 아래와 같이 최종 값을 얻습니다.

    버전별 공간 집계.rollup(avg).weighted() 활용
    version:13612
    version:24616

weighted() 함수는 제출률과 비교하여 값에 가중치를 부여함으로써 수명이 짧은 태그의 일관성 없는 동작을 수정합니다.

참고 자료

추가 유용한 문서, 링크 및 기사: