변칙 검색 및 예측

클라우드 서비스 및 IoT 디바이스는 서비스 상태 모니터링, 물리적 프로덕션 프로세스 및 사용 추세와 같은 인사이트를 얻는 데 사용할 수 있는 원격 분석 데이터를 생성합니다. 시계열 분석을 수행하는 것은 일반적인 기준 패턴과 비교하여 이러한 메트릭 패턴의 편차를 식별하는 한 가지 방법입니다.

KQL(Kusto 쿼리 언어)에는 여러 시계열의 생성, 조작 및 분석에 대한 기본 지원이 포함되어 있습니다. KQL을 사용하면 몇 초 만에 수천 개의 시계열을 만들고 분석하여 거의 실시간으로 솔루션 및 워크플로를 모니터링할 수 있습니다.

이 문서에서는 KQL의 시계열 변칙 검색 및 예측 기능에 대해 자세히 설명합니다. 적용 가능한 시계열 함수는 잘 알려진 강력한 분해 모델을 기반으로 하며, 각각의 원래 시계열이 계절, 추세 및 잔차 구성 요소로 분해됩니다. 변칙은 잔차 구성 요소의 이상값으로 검색되는 반면, 예측은 계절 및 추세 구성 요소를 추정하여 수행됩니다. KQL 구현은 자동 계절성 검색, 강력한 이상값 분석 및 벡터화된 구현을 통해 기본 분해 모델을 크게 향상시켜 수천 개의 시계열을 초 단위로 처리합니다.

사전 요구 사항

  • Microsoft 계정 또는 Microsoft Entra 사용자 ID. Azure 구독이 필요하지 않습니다.
  • 시계열 기능에 대한 개요는 시계열 분석을 참조하세요.

시계열 분해 모델

시계열 예측 및 변칙 검색을 위한 KQL 네이티브 구현은 잘 알려진 분해 모델을 사용합니다. 이 모델은 서비스 트래픽, 구성 요소 하트비트 및 IoT 주기적 측정값과 같은 주기적 및 추세 동작을 매니페스트하는 데 필요한 메트릭의 시계열에 적용되어 미래 메트릭 값을 예측하고 비정상적인 메트릭을 검색합니다. 이 회귀 프로세스의 가정은 이전에 알려진 계절 및 추세 동작 외에도 시계열이 임의로 분산된다는 것입니다. 그런 다음, 계절 및 추세 구성 요소에서 미래 메트릭 값을 예측하고(전체적으로 기준선으로 명명됨), 잔차 부분을 무시할 수 있습니다. 또한 잔차 부분만 사용하여 이상값 분석에 따라 비정상적인 값을 검색할 수 있습니다. 분해 모델을 만들려면 series_decompose() 함수를 사용합니다. series_decompose() 함수는 일단의 시계열을 사용하여 각 시계열을 해당 계절, 추세, 잔차 및 기준선 구성 요소로 자동으로 분해합니다.

예를 들어 다음 쿼리를 사용하여 내부 웹 서비스의 트래픽을 분해할 수 있습니다.

let min_t = datetime(2017-01-05);
let max_t = datetime(2017-02-03 22:00);
let dt = 2h;
demo_make_series2
| make-series num=avg(num) on TimeStamp from min_t to max_t step dt by sid 
| where sid == 'TS1'   //  select a single time series for a cleaner visualization
| extend (baseline, seasonal, trend, residual) = series_decompose(num, -1, 'linefit')  //  decomposition of a set of time series to seasonal, trend, residual, and baseline (seasonal+trend)
| render timechart with(title='Web app. traffic of a month, decomposition', ysplit=panels)

시계열 분해

  • 원래 시계열은 num이라는 레이블(빨간색)로 지정됩니다.
  • 프로세스에서 series_periods_detect() 함수를 사용하여 계절성을 자동으로 검색하여 시작하고 계절 패턴(자주색)을 추출합니다.
  • 원래 시계열에서 계절 패턴을 빼고 series_fit_line() 함수를 사용하여 선형 회귀를 실행하여 추세 구성 요소(연한 파란색)를 찾습니다.
  • 함수에서 추세를 빼고, 나머지는 잔차 구성 요소(녹색)입니다.
  • 마지막으로, 함수에서 계절 및 추세 구성 요소를 추가하여 기준선(파란색)을 생성합니다.

시계열 변칙 검색

series_decompose_anomalies() 함수는 일단의 시계열에서 비정상적인 점을 찾습니다. 이 함수는 series_decompose()를 호출하여 분해 모델을 빌드한 다음, 잔차 구성 요소에서 series_outliers()를 실행합니다. series_outliers()는 Tukey의 펜스 테스트를 사용하여 잔차 구성 요소의 각 점에 대한 변칙 점수를 계산합니다. 1\.5보다 높거나 -1.5보다 낮은 변칙 점수는 각각 약한 변칙 증가 또는 감소가 있음을 나타냅니다. 3\.0보다 높거나 3.0보다 낮은 변칙 점수는 강한 변칙을 나타냅니다.

다음 쿼리를 사용하면 내부 웹 서비스 트래픽에서 변칙을 검색할 수 있습니다.

let min_t = datetime(2017-01-05);
let max_t = datetime(2017-02-03 22:00);
let dt = 2h;
demo_make_series2
| make-series num=avg(num) on TimeStamp from min_t to max_t step dt by sid 
| where sid == 'TS1'   //  select a single time series for a cleaner visualization
| extend (anomalies, score, baseline) = series_decompose_anomalies(num, 1.5, -1, 'linefit')
| render anomalychart with(anomalycolumns=anomalies, title='Web app. traffic of a month, anomalies') //use "| render anomalychart with anomalycolumns=anomalies" to render the anomalies as bold points on the series charts.

시계열 변칙 검색

  • 원래 시계열(빨간색)
  • 기준선(계절 + 추세) 구성 요소(파란색)
  • 원래 시계열에 기반한 비정상적인 점(자주색). 비정상적인 점은 예상 기준선 값에서 크게 벗어납니다.

시계열 예측

series_decompose_forecast() 함수는 일단의 시계열에 대한 미래 값을 예측합니다. 이 함수는 series_decompose()를 호출하여 분해 모델을 빌드한 다음, 각 시계열에 대해 기준선 구성 요소를 미래로 추정합니다.

다음 쿼리를 사용하면 다음 주의 웹 서비스 트래픽을 예측할 수 있습니다.

let min_t = datetime(2017-01-05);
let max_t = datetime(2017-02-03 22:00);
let dt = 2h;
let horizon=7d;
demo_make_series2
| make-series num=avg(num) on TimeStamp from min_t to max_t+horizon step dt by sid 
| where sid == 'TS1'   //  select a single time series for a cleaner visualization
| extend forecast = series_decompose_forecast(num, toint(horizon/dt))
| render timechart with(title='Web app. traffic of a month, forecasting the next week by Time Series Decomposition')

시계열 예측

  • 원래 메트릭(빨간색). 미래 값이 누락되어 기본적으로 0으로 설정됩니다.
  • 기준선 구성 요소(파란색)를 추정하여 다음 주의 값을 예측합니다.

확장성

Kusto 쿼리 언어 구문을 사용하면 단일 호출을 통해 여러 시계열을 처리할 수 있습니다. 고유하게 최적화된 구현은 빠른 성능을 허용하며, 이는 거의 실시간 시나리오에서 수천 개의 카운터를 모니터링할 때 효과적인 변칙 검색 및 예측에 매우 중요합니다.

다음 쿼리는 세 개의 시계열을 동시에 처리하는 방법을 보여 줍니다.

let min_t = datetime(2017-01-05);
let max_t = datetime(2017-02-03 22:00);
let dt = 2h;
let horizon=7d;
demo_make_series2
| make-series num=avg(num) on TimeStamp from min_t to max_t+horizon step dt by sid
| extend offset=case(sid=='TS3', 4000000, sid=='TS2', 2000000, 0)   //  add artificial offset for easy visualization of multiple time series
| extend num=series_add(num, offset)
| extend forecast = series_decompose_forecast(num, toint(horizon/dt))
| render timechart with(title='Web app. traffic of a month, forecasting the next week for 3 time series')

시계열 확장성

요약

이 문서에서는 시계열 변칙 검색 및 예측을 위한 네이티브 KQL 함수에 대해 자세히 설명합니다. 각각의 원래 시계열은 변칙 검색 및/또는 예측을 위해 계절, 추세 및 잔차 구성 요소로 분해됩니다. 이러한 기능은 오류 검색, 예측 유지 관리, 수요 및 부하 예측과 같은 거의 실시간 모니터링 시나리오에 사용할 수 있습니다.