본문 바로가기
WIKI 기술 지식 베이스

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

원문 보기 위키 갱신

모든 메트릭 쿼리에는 표준 평가 순서가 있어요(빠른 복습은 쿼리의 구조 참고). 예를 들어 다음 쿼리는 이렇게 계산돼요: sum:kubernetes.cpu.requests{*} by {kube_container_name}.rollup(avg, 10)

출처: 문서

본문

모든 메트릭 쿼리에는 표준 평가 순서가 있어요(빠른 복습은 쿼리의 구조를 참고하세요). 예를 들어 다음 쿼리는 다음과 같이 계산됩니다: sum:kubernetes.cpu.requests{*} by {kube_container_name}.rollup(avg, 10)

  1. 시간 집계(Time aggregation) – 각 10초 롤업 시간 간격 동안, 각 timeseries(고유한 태그 값 조합으로 정의)의 값을 시간에 따라 평균낸다. 고유 태그 값 조합의 수는 이 메트릭에서 가장 변동이 크고/입도(granularity)가 높은 태그(예: container_id)에 의해 결정돼요.
  2. 그다음 kube_container_name별(공간 집계, space aggregation)로, 평균낸 모든 값의 합을 단일 대표 값으로 취한다. 각 kube_container_name에 대한 합산 값은 각 롤업 간격에 존재하는 고유 container_id의 수에 따라 달라져요.

weighted() 함수는 이 gauge 메트릭을 kube_container_name으로 합산할 때 container_id 태그 값의 짧은 수명을 고려해 줘요.

예시

다음 쿼리를 가정해 봅시다: sum:kubernetes_state.pod.uptime{*} by {version}.rollup(avg, 10)

  • gauge 메트릭의 제출 간격은 10초로 정의된다.
  • 데이터포인트는 시간상 60초마다 그래프로 그려진다.
  • 어느 시점에든 2개 버전을 가진 Kubernetes 파드가 있다. 각 버전은 앱으로 라벨링되고, 앱당 버전은 항상 1개뿐이다.

60초 동안의 원시 데이터는 다음과 같을 수 있어요:

Time 0s 10s 20s 30s 40s 50s
app:a, version:1 12 NAN NAN NAN NAN NAN
app:b, version:1 NAN 12 12 12 NAN NAN
app:c, version:1 NAN NAN NAN NAN 12 12
app:d, version:2 12 NAN NAN NAN NAN NAN
app:e, version:2 NAN 16 16 16 NAN NAN
app:f, version:2 NAN NAN NAN NAN 18 18
  1. 시간 집계 – 데이터 롤업 시간 집계에서는 데이터를 avg(weighted 없음) 또는 제안된 weighted 평균으로 롤업해요:
Time aggregation .rollup(avg) With .weighted()
app:a, version:1 12 2.0
app:b, version:1 12 6.0
app:c, version:1 12 4.0
app:d, version:2 12 2.0
app:e, version:2 16 8.0
app:f, version:2 18 6.0
  1. 공간 집계 마지막으로 메트릭을 version으로 집계해 아래 최종 값을 얻어요:
Space aggregation by version .rollup(avg) With .weighted()
version:1 36 12
version:2 46 16

weighted() 함수는 값들을 제출률(submission rate)에 대해 가중치를 부여함으로써 단기 수명 태그에서 발생하는 비일관적인 동작을 해결해 줘요.

더 알아보기 (Learn more)

도움이 되는 추가 문서, 링크, 아티클이에요: