보간(Interpolation)과 Fill 수정자
보간(Interpolation)과 Fill 수정자 (Interpolation and the Fill Modifier)
여러 시리즈를 하나의 그래프 라인으로 합치다 보면, 시리즈마다 데이터를 보내는 시점과 주기가 달라서 이상한 결과가 나올 때가 있어요. 보간(interpolation)은 이 문제를 푸는 Datadog의 방식이에요.
보간은 메트릭 시리즈의 큰 빈틈을 임의로 채우는 것이 아니라, 여러 시리즈를 서로 정렬해 소스 간 집계를 가능하게 만드는 기능입니다. 언제 보간이 일어나고 어떻게 제어하는지 이 글에서 정리해 드릴게요.
출처: 문서
본문
왜 보간을 하나요? (Why interpolation?)
보간은 메트릭 시리즈의 임의의 큰 공백을 채우는 것이 아니라, 여러 시리즈를 서로 정렬해 소스 간 집계를 수행할 수 있게 만드는 것이에요.
Datadog에서 그래프를 그릴 때는 대부분 서로 다른 소스의 데이터를 하나의 그래프 라인으로 섞는 작업을 해요. 그런데 서로 다른 소스가 항상 같은 시점에 같은 주기로 데이터를 보내지는 않죠.
net.bytes_rcvd | 3:00:00 3:00:10 3:00:20 3:00:30 3:00:40 ...
------------------+-------------------------------------------------
1: host:A,env:prod| 15 25
2: host:B,env:test| 10 40
------------------+-------------------------------------------------
sum (1+2) | 15? 10? 25? 40?
위 예시는 소스들이 자연스럽게 정렬되어 있지 않아, 소스를 그대로 합치면 터무니없는 결과가 나온다는 걸 보여 줍니다. 보간은 계산을 위한 관련 값만 제공해 이 문제를 해결해요.
net.bytes_rcvd | 3:00:00 3:00:10 3:00:20 3:00:30 3:00:40 ...
------------------+-------------------------------------------------
1: host:A,env:prod| 15 18.3 25 X
2: host:B,env:test| Y 10 30 40
------------------+-------------------------------------------------
sum (1+2) | 15 + Y 28.3 55 40 + X
여기서 X와 Y는 표시된 구간 이후와 이전의 데이터를 사용해 보간된 값입니다.
어떤 경우에 보간이 일어나나요? (In which cases does interpolation occur?)
그래프 쿼리에 둘 이상의 소스가 해당할 때 보간이 일어나요. 예를 들어:
- 공간 집계(
avg:system.cpu.user{env:prod})에서env:prod태그를 가진 호스트가 둘 이상이면, Datadog은 보간을 사용해 시간에 따른 평균을 계산해요. - 그룹 쿼리(
net.bytes_rcvd{*} by {host})에서는 소스 간 계산이 수행되지 않지만, 정렬된 시리즈를 제공하면 그래프 라인 마우스오버와 비교가 수월해집니다.
avg:net.bytes_rcvd{host:a}처럼 한 소스에서 제출되는 메트릭 하나를 그래프로 그릴 때는(host:a가 항상 같은 태그로 net.bytes_rcvd를 제출한다고 가정) 보간이 필요하지 않아요.
avg:system.cpu.user{env:prod},avg:system.cpu.user{env:dev} 같은 멀티파트 쿼리에는 보간이 수행되지 않습니다.
보간을 어떻게 제어하나요? (How to control interpolation?)
모든 메트릭 유형의 기본 보간은 선형(linear)이며, 실제 샘플 이후 최대 5분 동안 수행돼요. .as_count()와 .as_rate() 수정자는 Gauge 유형 메트릭을 제외한 모든 메트릭 유형에서 보간을 비활성화합니다. 자세한 내용은 메트릭 유형 수정자를 참고하세요.
.fill() 수정자는 보간 파라미터를 제어해요:
| 수정자 | 설명 |
|---|---|
fill(linear, X) |
실제 샘플 이후 X초까지 선형 보간을 제공해요. |
fill(last, X) |
마지막 샘플 값을 X초까지 복제합니다. |
fill(zero, X) |
보간이 필요한 곳에 X초까지 0을 삽입해요. |
fill(null, X) |
보간을 비활성화하며, X 값은 중요하지 않습니다. |
FAQ
메트릭 공백이 있는데 fill(zero)가 동작하지 않아요. 그래프에 여전히 긴 직선이 있어요.
그래프는 데이터 포인트들이 선으로 이어진 것일 뿐이어서, 데이터가 없는 긴 기간은 긴 직선으로 나타나요. 값을 채울 보간이 필요하지 않죠. 보간은 집계와 멀티라인 그래프를 가능하게 하기 위해 시리즈를 정렬하는 것이에요.
반면에 모니터는 시간 범위의 롤업(rollup)을 사용해 보간된 값을 평가하고 평균을 계산합니다.
보간 방법 선택하기 (Choose the interpolation method)
메트릭 유형에 따라 선택되는 기본 보간 방법이 보통은 충분하지만, 이런 기본값을 덮어쓰고 싶을 때도 있어요.
선형 보간은 같은 소스에서 꾸준히 보고되는 메트릭에 아주 잘 맞아요. 드물게 보고되거나 시간에 따라 다양한 소스에서 보고되는 메트릭에는 보간을 비활성화하는 쪽이 종종 더 나아요. 측정 대상의 값이 변할 때만 데이터 포인트를 보내는 경우라면 이 방식이 합리적이죠.
null은 마지막 실제 값 5분 후에 그래프가 보간된 값을 표시하지 못하게 합니다.