내 그래프의 세분화(granularity)는 무엇인가요? 그래프에서 원본 데이터를 보는 건가요, 집계를 보는 건가요?
Datadog 그래프는 보통 원래 제출된 값이 아니라 로컬 집계(local aggregates) 를 표시해요. 처음엔 그래프 값이 실제 데이터와 안 맞는 것처럼 보일 수 있는데, 그래프가 그려지는 방식 때문입니다.
데이터 자체는 1초 세분화로 저장되지만, 화면에 표시할 때는 집계돼요. 이 글에서는 왜 그런지, 그리고 집계를 어떻게 제어하는지 설명해 드릴게요.
출처: 문서
본문
Datadog 그래프는 일반적으로 원래 제출된 값 대신 로컬 집계를 표시해요.
왜 그런가요? (Why?)
데이터는 1초 세분화로 저장되지만, 표시할 때는 집계될 수 있어요.
1주일 시간 창의 그래프라면 수십만 개의 값을 브라우저로 보내야 해요. 그런데 화면의 작은 부분을 차지하는 위젯에 이 모든 포인트를 그릴 수는 없죠. 그래서 그래프를 렌더링하기 위해 제한된 수의 포인트만 브라우저로 보내도록 데이터를 집계합니다.
예를 들어 'lines' 표시가 있는 하루 보기에서는 5분마다 데이터 포인트가 하나 있어요. Datadog 백엔드는 1일 구간을 5분 단위의 버킷 288개로 잘라요. 각 버킷에서 모든 데이터는 단일 값으로 롤업됩니다. 예를 들어 타임스탬프 07:00에 그래프에 렌더링되는 데이터 포인트는 실제로 그날 07:00:00과 07:05:00 사이에 제출된 모든 실제 데이터 포인트의 집계죠.
기본적으로 롤업 집계는 모든 실제 값을 평균하여 계산되며, 그래서 확대를 줄이면 그래프가 부드러워지는 경향이 있어요.
무엇을 할 수 있나요? (What can you do?)
큰 시간 창을 보는 한, 소스가 1개든 1000개든 데이터 집계는 일어나야 해요.
다만 rollup 함수를 사용해 이 집계가 수행되는 방식을 제어할 수 있습니다.
.rollup(max)/.rollup(min)— 각 포인트가 나타내는 X분 데이터의 로컬 최댓값/최솟값이 됩니다..rollup(avg)— 기본값으로, 그래프의 각 포인트가 나타내는 X분 데이터의 평균값이에요..rollup(sum)— X분 기간 동안 제출된 모든 값의 합을 계산합니다..rollup(avg,60)— 그래프 포인트가 1분 평균이 되도록 정의해요.
참고: Datadog 백엔드는 구간 수를 약 300개 이하로 유지하려고 해요. 그래서 2개월 시간 창에 rollup(60)을 하면 요청한 1분 세분화를 얻을 수 없습니다.
예시 (Example)
위 그래프는 지난 2시간의 막대 그래프예요. 그래프는 분당 데이터 포인트 하나를 표시합니다. 이 값들은 실제 제출된 값이 아니라 로컬 집계이며, 각각 메트릭 데이터의 1분을 나타냅니다.
실제 제출된 데이터를 볼 수 있나요? (Is it possible to see the real data submitted?)
네, 충분히 확대하면 그래프가 원래 값을 표시해요. 예를 들어 Datadog 에이전트는 약 15초마다 데이터를 제출합니다. 45분(이하)의 시간 창을 보면 값이 집계되지 않은 상태입니다.