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

쿼리에서 그래프까지

원문 보기 위키 갱신

쿼리에서 그래프까지 (Query to the Graph)

이 페이지는 Datadog 그래프 시스템이 쿼리에서 그래프까지 수행하는 단계를 설명해서, 그래프 설정을 어떻게 고를지 감을 잡을 수 있게 도와줘요. 쿼리 파라미터 하나하나가 각 단계에서 어떤 영향을 주는지 함께 살펴볼게요.

출처: 문서

본문

이 페이지는 Datadog 그래프 시스템이 쿼리에서 그래프까지 수행하는 단계를 설명해서, 그래프 설정을 어떻게 골라야 할지 잘 감을 잡을 수 있게 돼요.

타임보드나 스크린보드에서 그래프를 만들 때, 편집기 또는 JSON 탭을 사용해 고급 쿼리를 설정할 수 있어요. 아래 예시는 특정 서버(host:bubs)에서 오는 메트릭 system.disk.total을 사용해요.

{% image source="https://docs.dd-static.net/images/dashboards/faq/graph_metric.6e871c1e5beb26de59e6cd7651c671b8.png?auto=format&fit=max&w=850 1x, https://docs.dd-static.net/images/dashboards/faq/graph_metric.6e871c1e5beb26de59e6cd7651c671b8.png?auto=format&fit=max&w=850&dpr=2 2x" alt="graph_metric" /%}

이제 Datadog 백엔드가 쿼리를 수행하고 대시보드에 그래프 선을 렌더링하기 위해 실행하는 각 단계를 따라가 볼게요.

이 문서는 각 단계에서 쿼리 각 파라미터의 효과를 짚어줘요. 쿼리 이전, 저장: 데이터는 태그에 따라 별도로 저장된다

메트릭 system.disk.total(datadog-agent가 기본적으로 수집)은 서로 다른 소스에서 나타나요.

이 메트릭은 다른 호스트들이 보고하기도 하고, 각 datadog-agent가 장치별로 이 메트릭을 수집하기 때문이에요. 같은 이름의 디스크와 연관된 데이터를 보낼 때 메트릭 system.disk.total에 태그 device:tmpfs 등을 추가하죠.

따라서 이 메트릭은 서로 다른 {host, device} 태그 조합으로 나타나요.

각 소스(호스트와 태그 집합으로 정의)마다 데이터는 별도로 저장돼요. 이 예시에서 host:bubs에 5개의 장치가 있다고 가정해 봅시다. 따라서 Datadog은 다음에 대해 5개의 timeseries(소스에 대해 시간에 따라 제출된 모든 데이터포인트)를 저장해요:

  • {host:bubs, device:tmpfs}
  • {host:bubs, device:cgroup_root}
  • {host:bubs, device:/dev/vda1}
  • {host:bubs, device:overlay}
  • {host:bubs, device:shm}

이제 위에서 제시한 쿼리에 대해 백엔드가 따르는 연속된 단계를 살펴봅시다.

쿼리에 필요한 timeseries 찾기

이 쿼리에서는 host:bubs와 연관된 데이터만 요청했어요. 따라서 Datadog 백엔드의 첫 단계는 모든 소스(이 경우 메트릭 system.disk.total이 제출되는 모든 {host, device} 조합)를 스캔해서 쿼리 범위에 해당하는 것만 남기는 거예요.

아마 짐작했겠지만, 백엔드는 5개의 일치하는 소스를 찾아요(이전 문단 참고).

{% image source="https://docs.dd-static.net/images/dashboards/faq/metrics_graph_2.a6c86eec0ace1203241f167aa7b33923.png?auto=format&fit=max&w=850 1x, https://docs.dd-static.net/images/dashboards/faq/metrics_graph_2.a6c86eec0ace1203241f167aa7b33923.png?auto=format&fit=max&w=850&dpr=2 2x" alt="metrics_graph_2" /%}

그다음 이 소스들의 데이터를 함께 집계해 호스트에 대한 system.disk.total을 나타내는 메트릭을 만들어 주는 게 핵심이에요. 이 작업은 3단계에서 이루어져요.

참고: Datadog이 채택한 태깅 시스템은 단순하면서도 강력해요. 결합할 소스를 알거나 지정할 필요 없이, ID 같은 태그만 주면 Datadog이 이 ID를 가진 모든 데이터를 결합하고 나머지는 제외해요. 예를 들어 system.disk.total{*}를 쿼리할 때 보유한 호스트나 장치 수를 알 필요가 없어요. Datadog이 모든 소스의 데이터를 대신 집계해 주거든요.

timeseries와 태그 카디널리티에 대해 더 알아보기

관련 파라미터: scope 두 태그에 해당하는 데이터를 가져오고 싶다면 {host:bubs, device:udev}처럼 여러 태그를 사용할 수 있어요.

시간 집계 진행

Datadog 백엔드는 그래프의 시간 기간에 해당하는 모든 데이터를 선택해요.

하지만 서로 다른 소스의 모든 데이터를 결합하기 전에(3단계), Datadog은 시간 집계를 먼저 진행해야 해요.

왜 그럴까요?

Datadog이 1초 입도로 데이터를 저장하기 때문에, 그래프에 모든 실제 데이터를 표시할 수 없어요. 자세한 내용은 메트릭 집계를 참고하세요.

1주일 시간 윈도우의 그래프라면 수십만 개의 값을 브라우저로 보내야 하고, 게다가 화면의 작은 부분을 차지하는 위젯에 그 모든 포인트를 그래프로 그릴 수도 없어요. 이런 이유로 Datadog은 데이터 집계를 진행하고 그래프를 렌더링하기 위해 제한된 수의 포인트만 브라우저로 보낼 수밖에 없어요.

어떤 입도로?

예를 들어 'lines' 표시로 하루 단위 보기를 하면 5분마다 하나의 데이터포인트가 있어요. Datadog 백엔드는 1일 간격을 5분짜리 288개 버킷으로 자르고, 각 버킷에 대해 모든 데이터를 단일 값으로 롤업해요. 예를 들어 타임스탬프 07:00에 그래프에 렌더링된 데이터포인트는 실제로 그날 07:00:00에서 07:05:00 사이에 제출된 모든 실제 데이터포인트의 집계예요.

어떻게?

기본적으로 Datadog 백엔드는 모든 실제 값의 평균을 내서 롤업 집계를 계산하는데, 이는 줌아웃할수록 그래프를 평활화하는 경향이 있어요. 타임프레임을 줌아웃하면 그래프도 평활화되는 이유에 대해 더 알아보세요. 큰 시간 윈도우를 볼 때는 소스가 1개든 1000개든 데이터 집계가 일어나야 해요. 그래프에서 일반적으로 보는 것은 실제 제출된 값이 아니라 로컬 집계(local aggregate)예요.

{% image source="https://docs.dd-static.net/images/dashboards/faq/metrics_graph_3.6ac87fe50b69eb856247d1c1fc3ce706.png?auto=format&fit=max&w=850 1x, https://docs.dd-static.net/images/dashboards/faq/metrics_graph_3.6ac87fe50b69eb856247d1c1fc3ce706.png?auto=format&fit=max&w=850&dpr=2 2x" alt="metrics_graph_3" /%}

Datadog 백엔드는 쿼리에 해당하는 각 소스에 대해 일련의 로컬 집계를 계산해요.

하지만 이 집계가 수행되는 방식을 제어할 수 있어요.

관련 파라미터: rollup (선택 사항) 'rollup' 함수는 어떻게 사용하나요?

이 예시에서 rollup(avg,60)은 60초의 집계 기간을 정의해요. 따라서 X분 간격은 각각 1분인 Y개 간격으로 잘리고, 특정 분 안의 데이터는 (3단계 공간 집계 후) 그래프에 표시되는 단일 포인트로 집계돼요.

참고: Datadog 백엔드는 간격 수를 ~300개 미만으로 유지하려고 해요. 따라서 2개월 시간 윈도우에 rollup(60)을 하면 요청한 1분 입도를 얻지 못할 수 있어요.

공간 집계 진행

이제 서로 다른 소스의 데이터를 단일 선으로 섞을 수 있어요.

각 소스에 대해 ~300개의 포인트가 있고, 각각은 1분을 나타내요. 이 예시에서 Datadog은 매 분마다 모든 소스의 평균을 계산해 다음 그래프를 만들어요:

{% image source="https://docs.dd-static.net/images/dashboards/faq/metrics_graph_4.ea1f39c44c3c60e66167360abc5aa1e0.png?auto=format&fit=max&w=850 1x, https://docs.dd-static.net/images/dashboards/faq/metrics_graph_4.ea1f39c44c3c60e66167360abc5aa1e0.png?auto=format&fit=max&w=850&dpr=2 2x" alt="metrics_graph_4" /%}

얻어진 값(25.74GB)은 모든 소스가 보고한 값의 평균이에요(이전 이미지 참고).

참고: 소스가 하나뿐이라면(예: 쿼리 범위로 {host:bubs, device:/dev/disk}를 선택한 경우) 공간 집계를 수행할 필요가 없으므로 sum/avg/max/min을 사용해도 효과가 없어요. sum/min/max/avg 집계기 사이 전환 FAQ를 참고하세요.

관련 파라미터: space aggregator(공간 집계기)

Datadog은 4가지 공간 집계기를 제공해요:

  • max
  • min
  • avg
  • sum

함수 적용 (선택 사항)

데이터를 그래프로 그릴 때 Formula 상자에서 함수를 산술에 적용할 수 있어요. 대부분의 함수는 마지막 단계에서 적용돼요. 시간(2단계) 및 공간(3단계) 집계 후 얻은 ~300개의 포인트로부터 함수가 그래프에서 볼 수 있는 새 값을 계산해요.

이 예시에서 함수 abs는 결과가 양수임을 보장해요.

관련 파라미터: function(함수)

함수 유형을 선택하세요

그룹화된 쿼리, 산술, as_count/rate

그룹화된 쿼리

{% image source="https://docs.dd-static.net/images/dashboards/faq/metric_graph_6.d9206e9d030e09d787b60360fe381723.png?auto=format&fit=max&w=850 1x, https://docs.dd-static.net/images/dashboards/faq/metric_graph_6.d9206e9d030e09d787b60360fe381723.png?auto=format&fit=max&w=850&dpr=2 2x" alt="metric_graph_6" /%}

로직은 동일해요:

  1. Datadog 백엔드가 선택된 소스와 연관된 모든 다른 장치를 찾아요.
  2. 각 장치에 대해 백엔드는 이 문서에서 설명한 대로 쿼리 system.disk.total{host:example, device:<DEVICE>}를 수행해요.
  3. 모든 최종 결과가 같은 그래프에 그려져요.

{% image source="https://docs.dd-static.net/images/dashboards/faq/metric_graph_7.85ac8015380f22e8402bea6001f2680d.png?auto=format&fit=max&w=850 1x, https://docs.dd-static.net/images/dashboards/faq/metric_graph_7.85ac8015380f22e8402bea6001f2680d.png?auto=format&fit=max&w=850&dpr=2 2x" alt="metric_graph_2" /%}

참고: rollup 또는 as_count 수정자는 by {device} 언급 뒤에 위치해야 해요.

참고2: system.disk.in_use{*} by {host,device}처럼 여러 태그를 사용할 수 있어요.

산술

산술도 시간 및 공간 집계 후에 적용돼요—(4단계: 함수 적용).

{% image source="https://docs.dd-static.net/images/dashboards/faq/metric_graph_8.33147df118c8bc2b0296c26f2fa67ae5.png?auto=format&fit=max&w=850 1x, https://docs.dd-static.net/images/dashboards/faq/metric_graph_8.33147df118c8bc2b0296c26f2fa67ae5.png?auto=format&fit=max&w=850&dpr=2 2x" alt="metric_graph_8" /%}

Count와 rate

as_count와 as_rate는 StatsD 또는 DogStatsD로 제출된 rate와 counter에 특화된 시간 집계기예요. 이들은 메트릭을 초당 rate로 보거나 원시 counts로 볼 수 있게 해 줘요. 구문: rollup을 추가하는 대신 .as_count() 또는 .as_rate()를 사용할 수 있어요.

자세한 내용은 Counts Graphing으로 StatsD 메트릭 시각화를 참고하세요. StatsD/DogStatsD에 대한 문서도 있습니다.

더 알아보기 (Learn more)