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

중첩 쿼리

원문 보기 위키 갱신

중첩 쿼리 (Nested Queries)

Datadog에서 모든 메트릭 쿼리는 기본적으로 두 개의 집계 레이어로 구성돼요 — 먼저 시간(time), 그다음 공간(space)으로 집계합니다. 중첩 쿼리(Nested Queries)는 이전 쿼리의 결과를 다음 쿼리에서 재사용할 수 있게 해 줍니다.

이를 통해 멀티레이어 집계, count/rate/gauge 메트릭의 백분위수·표준편차 계산, 과거 시간대에 대한 더 높은 해상도 쿼리 같은 강력한 기능을 사용할 수 있어요.

출처: 문서

본문

개요 (Overview)

기본적으로 Datadog의 모든 메트릭 쿼리는 두 개의 집계 레이어로 구성돼요. 중첩 쿼리는 이전 쿼리의 결과를 이후 쿼리에서 재사용할 수 있게 해 줍니다.

중첩 쿼리는 몇 가지 강력한 기능을 열어 줘요.

멀티레이어 집계 (Multilayer aggregation)

Datadog에서 각 메트릭 쿼리는 두 개의 집계 레이어로 평가돼요: 먼저 시간, 그다음 공간. 멀티레이어 집계는 추가적인 시간 또는 공간 집계 레이어를 적용할 수 있게 해 줍니다. 집계에 대한 자세한 내용은 메트릭 쿼리의 구조를 참고하세요.

멀티레이어 시간 집계 (Multilayer time aggregation)

rollup 함수로 멀티레이어 시간 집계에 접근할 수 있어요. 모든 메트릭 쿼리에는 이미 그래프에 표시되는 데이터 포인트의 세분화를 제어하는 초기 rollup(시간 집계)이 포함되어 있습니다. 자세한 내용은 Rollup 문서를 참고하세요.

후속 rollup으로 추가적인 시간 집계 레이어를 적용할 수 있어요.

첫 번째 rollup은 다음 애그리게이터를 지원합니다.

  • avg
  • sum
  • min
  • max
  • count

멀티레이어 시간 집계가 제공하는 추가 레이어는 다음 시간 애그리게이터를 지원합니다.

  • avg
  • sum
  • min
  • max
  • count
  • arbitrary percentile pxx (p78, p99, p99.99, 등)
  • stddev

멀티레이어 시간 집계는 다음 함수들과 함께 사용할 수 있어요.

지원 함수 설명
산술 연산자 +, -, *, /
타임시프트 함수 <METRIC_NAME>{*}, -<TIME_IN_SECOND>, hour_before(<METRIC_NAME>{*}), day_before(<METRIC_NAME>{*}), week_before(<METRIC_NAME>{*}), month_before(<METRIC_NAME>{*})
Top-k 선택 top(<METRIC_NAME>{*}, <LIMIT_TO>, '<BY>', '<DIR>')

위에 나열되지 않은 함수는 멀티레이어 시간 집계와 결합할 수 없어요.

시간 집계 예시 쿼리 (Time aggregation example query)

이 쿼리는 먼저 env와 team으로 그룹핑된 각 EC2 인스턴스의 평균 CPU 사용률을 계산해 5분 간격으로 롤업해요. 그다음 멀티레이어 시간 집계를 적용해 이 중첩 쿼리의 시간상 95번째 백분위수를 30분 간격으로 계산합니다.

멀티레이어 공간 집계 (Multilayer space aggregation)

첫 번째 공간 집계 레이어에서 그룹핑할 태그를 지정한 뒤, Group By 함수로 멀티레이어 공간 집계에 접근할 수 있어요.

후속 Group By로 추가적인 공간 집계 레이어를 적용할 수 있습니다. 참고: 초기 공간 집계 레이어에서 그룹핑할 태그를 지정하지 않으면 멀티레이어 공간 집계를 사용할 수 없어요.

첫 번째 공간 집계 레이어는 다음 애그리게이터를 지원합니다.

  • avg by
  • sum by
  • min by
  • max by

추가 공간 집계 레이어는 다음을 지원합니다.

  • avg by
  • sum by
  • min by
  • max by
  • arbitrary percentile pXX (p75, p99, p99.99, 등)
  • stddev by

멀티레이어 공간 집계는 다음 함수들과 함께 사용할 수 있어요.

지원 함수 설명
산술 연산자 +, -, *, /
타임시프트 함수 <METRIC_NAME>{*}, -<TIME_IN_SECOND>, hour_before(<METRIC_NAME>{*}), day_before(<METRIC_NAME>{*}), week_before(<METRIC_NAME>{*}), month_before(<METRIC_NAME>{*})
Top-k 선택 top(<METRIC_NAME>{*}, <LIMIT_TO>, '<BY>', '<DIR>')

위에 나열되지 않은 다른 함수는 멀티레이어 공간 집계와 결합할 수 없어요.

백분위수 공간 애그리게이터를 제외한 모든 공간 애그리게이터는 인수가 하나이며, 이는 그룹핑할 태그 키입니다. 백분위수 공간 애그리게이터는 두 개의 인수가 필요해요.

  • 임의 백분위수 pXX
  • 그룹핑할 태그
공간 집계 예시 쿼리 (Space aggregation example queries)

이 초기 쿼리 avg:aws.ec2.cpuutilization{*} by {env,host}.rollup(avg, 300)는 5분마다 env와 host로 그룹핑된 평균 CPU 사용률의 합을 계산해요. 그다음 멀티레이어 공간 집계를 적용해 env별 평균 CPU 사용률의 최댓값을 계산합니다.

UI나 JSON 탭에서는 다음과 같이 보입니다.

집계된 count·rate·gauge의 백분위수와 표준편차 (Percentiles and Standard Deviation for aggregated counts, rates, and gauges)

멀티레이어 집계(시간과 공간)를 사용해 count, rate, gauge에 대한 쿼리에서 백분위수와 표준편차를 조회할 수 있어요. 이를 통해 큰 데이터셋의 변동성과 분산을 더 잘 이해하고, 이상치(outlier)를 더 잘 식별할 수 있습니다.

참고: 중첩 쿼리의 백분위수 또는 표준편차 애그리게이터는 기존에 집계된 count, rate, gauge 메트릭의 결과를 사용해 계산돼요. 메트릭의 집계되지 않은 원시 값으로 전역적으로 정확한 백분위수가 필요하다면 distribution 메트릭을 대신 사용하세요.

멀티레이어 시간 집계에서의 백분위수 예시 쿼리 (Percentiles in Multilayer Time Aggregation example query)

멀티레이어 시간 집계에서 백분위수를 사용해 중첩 쿼리(env와 team별 5분마다의 평균 CPU 사용률)의 결과를 요약할 수 있어요. 이 중첩 쿼리의 p95 값을 30분마다 계산하는 식입니다.

멀티레이어 공간 집계에서의 백분위수 예시 쿼리 (Percentiles in Multilayer Space Aggregation example query)

멀티레이어 공간 집계에서 백분위수를 사용해 중첩 쿼리(env와 team별 5분마다의 평균 CPU 사용률)의 결과를 요약할 수 있어요. 고유한 각 env 값에 대해 이 중첩 쿼리의 p95 값을 계산합니다.

UI나 JSON 탭에서는 다음과 같이 보입니다.

표준편차 예시 쿼리 (Standard deviation example query)

표준편차는 데이터셋의 변동성 또는 분산을 측정하는 데 도움을 줘요. 다음 쿼리는 멀티레이어 시간 집계와 함께 표준편차를 사용해, 중첩 쿼리(4시간 동안 평균낸 API 요청 수의 합)의 표준편차를 더 긴 12시간 기간에 걸쳐 계산합니다.

UI나 JSON 탭에서는 다음과 같이 보입니다.

과거 시간대에 대한 더 높은 해상도 쿼리 (Higher resolution queries over historical time frames)

모든 메트릭 쿼리에는 표시되는 데이터포인트의 세분화를 제어하는 초기 시간 집계 레이어(rollup)가 포함되어 있어요. Datadog은 전체 쿼리 시간 프레임이 커질수록 증가하는 기본 rollup 시간 간격을 제공합니다. 중첩 쿼리를 사용하면 더 길고 과거적인 시간 프레임에서 더 세분화되고 고해상도인 데이터에 접근할 수 있어요.

고해상도 예시 쿼리 (Higher resolution example query)

과거에는 지난 한 달에 걸쳐 메트릭을 쿼리하면 기본적으로 4시간 세분화의 데이터를 볼 수 있었어요. 중첩 쿼리를 사용하면 이 과거 시간 프레임에서 더 높은 세분화의 데이터에 접근할 수 있습니다. 다음은 지난 한 달을 그래프로 그린 예시 쿼리로, 쿼리 배치 수(count)를 처음에 5분 간격으로 롤업합니다. 그다음 멀티레이어 시간 집계를 적용해 이 중첩 쿼리의 시간상 표준편차를 4시간 간격으로 계산해, 더 사람이 읽기 쉬운 그래프를 만듭니다.

참고: Datadog은 가장 세분화된 rollup 간격으로 초기 rollup을 정의하고, 더 거친 rollup 간격으로 멀티레이어 시간 집계를 사용해 더 읽기 쉬운 그래프를 얻을 것을 권장합니다.

UI나 JSON 탭에서는 다음과 같이 보입니다.

이동 롤업 (Moving rollup)

Datadog은 지정된 시간 창에 걸쳐 데이터포인트를 집계할 수 있게 해 주는 moving_rollup 함수를 제공해요. 자세한 내용은 moving-rollup을 참고하세요. 중첩 쿼리를 사용하면 그 기능을 확장해 lookback 모드를 포함할 수 있어요. 원래 쿼리 창을 넘어선 데이터포인트를 분석할 수 있게 되죠. 이렇게 하면 지정된 시간 창에 걸쳐 쿼리 추세와 패턴을 더 포괄적으로 볼 수 있습니다.

기존 버전의 moving_rollup 함수는 다음 애그리게이터만 지원해요.

  • avg
  • sum
  • min
  • max
  • median

쿼리를 중첩할 때는 lookback 모드 버전의 moving_rollup 함수만 사용할 수 있어요. 이 버전의 함수는 다음 애그리게이터를 지원합니다.

  • avg
  • sum
  • min
  • max
  • count
  • count by
  • arbitrary percentile pxx (p78, p99, p99.99, 등)
  • stddev

Lookback 모드가 활성화된 최대 이동 롤업 (Max Moving rollup with Lookback Mode Enabled)

이 moving_rollup들을 중첩할 때는 UI나 JSON 탭에 표시된 대로 제공되는 rollup 간격이 커져야 해요.

Lookback 모드가 활성화된 표준편차 이동 롤업 (Standard Deviation Moving Rollup with Lookback Mode Enabled)

새 이동 롤업 함수와 함께 백분위수와 표준편차를 사용할 수도 있어요. 이 함수는 lookback을 지원하며, lookback이 활성화된 이동 롤업의 중첩을 허용합니다.

UI나 JSON 탭에서는 다음과 같이 보입니다.

불리언 임계값 리매핑 함수 (Boolean threshold remapping functions)

리맵 함수는 특정 조건에 따라 쿼리 결과를 다듬고 변환할 수 있게 해 줘요. 모니터링과 분석 기능을 확장하죠. 중첩 쿼리는 다음 세 가지 새 함수를 열어 줍니다.

  • is_greater (<QUERY>, <THRESHOLD>)
  • is_less (<QUERY>, <THRESHOLD>)
  • is_between (<QUERY>, <LOWER THRESHOLD>, <UPPER THRESHOLD>)

is_greater() 예시 쿼리

is_greater()는 쿼리가 상수 30보다 큰 각 포인트에 대해 1.0을, 그 외에는 0.0을 반환해요.

UI나 JSON 탭에서는 다음과 같이 보입니다.

is_less() 예시 쿼리

is_less()는 쿼리가 상수 30보다 작은 각 포인트에 대해 1.0을, 그 외에는 0.0을 반환해요.

UI나 JSON 탭에서는 다음과 같이 보입니다.

is_between() 예시 쿼리

is_between()은 쿼리가 10과 30 사이(배타적)인 각 포인트에 대해 1.0을, 그 외에는 0.0을 반환해요.

UI나 JSON 탭에서는 다음과 같이 보입니다.

Datadog API에서 중첩 쿼리 사용하기 (Use nested queries with Datadog's API)

타임시리즈 데이터 쿼리 공개 API에서 중첩 쿼리 기능을 사용할 수 있어요. formula 객체의 내용을 변경하세요.

더 알아보기 (Learn more)