Wykrywanie i prognozowanie anomalii

Usługi w chmurze i urządzenia IoT generują dane telemetryczne, których można użyć do uzyskania szczegółowych informacji, takich jak monitorowanie kondycji usługi, fizycznych procesów produkcyjnych i trendów użycia. Przeprowadzanie analizy szeregów czasowych to jeden ze sposobów identyfikowania odchyleń we wzorcu tych metryk w porównaniu z typowym wzorcem punktu odniesienia.

język zapytań Kusto (KQL) zawiera natywną obsługę tworzenia, manipulowania i analizowania wielu szeregów czasowych. Za pomocą języka KQL można tworzyć i analizować tysiące szeregów czasowych w sekundach, umożliwiając rozwiązania do monitorowania niemal w czasie rzeczywistym i przepływy pracy.

W tym artykule szczegółowo przedstawiono możliwości wykrywania anomalii szeregów czasowych i prognozowania języka KQL. Odpowiednie funkcje szeregów czasowych są oparte na niezawodnym dobrze znanym modelu dekompozycji, w którym każdy oryginalny szereg czasowy jest rozłożony na składniki sezonowe, trendy i reszty. Anomalie są wykrywane przez wartości odstające w składniku reszty, podczas gdy prognozowanie odbywa się przez ekstrapolację składników sezonowych i trendów. Implementacja języka KQL znacznie zwiększa podstawowy model dekompozycji dzięki automatycznemu wykrywaniu sezonowości, niezawodnej analizie odstających i implementacji wektoryzowanej w celu przetwarzania tysięcy szeregów czasowych w sekundach.

Wymagania wstępne

  • Konto Microsoft lub tożsamość użytkownika Microsoft Entra. Subskrypcja platformy Azure nie jest wymagana.
  • Przeczytaj artykuł Analiza szeregów czasowych , aby zapoznać się z omówieniem możliwości szeregów czasowych.

Model dekompozycji szeregów czasowych

Natywna implementacja języka KQL na potrzeby przewidywania szeregów czasowych i wykrywania anomalii używa dobrze znanego modelu dekompozycji. Ten model jest stosowany do szeregów czasowych metryk, które powinny manifestować okresowe i trendy, takie jak ruch usługi, pulsy składników i okresowe pomiary IoT w celu prognozowania przyszłych wartości metryk i wykrywania nietypowych. Założeniem tego procesu regresji jest to, że poza wcześniej znanym zachowaniem sezonowym i trendowym szereg czasowy jest losowo rozłożony. Następnie można prognozować przyszłe wartości metryk ze składników sezonowych i trendów, zbiorczo nazwanych punktów odniesienia i ignorować część reszt. Można również wykrywać nietypowe wartości na podstawie analizy wartości odstających przy użyciu tylko części reszt. Aby utworzyć model dekompozycji, użyj funkcji series_decompose(). Funkcja series_decompose() przyjmuje zestaw szeregów czasowych i automatycznie rozkłada szeregi czasowe do składników sezonowych, trendów, reszt i linii bazowych.

Na przykład można rozkładać ruch wewnętrznej usługi internetowej przy użyciu następującego zapytania:

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)

Rozkład szeregów czasowych.

  • Oryginalny szereg czasowy ma etykietę num (na czerwono).
  • Proces rozpoczyna się od automatycznego wykrywania sezonowości przy użyciu funkcji series_periods_detect() i wyodrębnia wzorzec sezonowy (na fioletowo).
  • Wzorzec sezonowy jest odejmowany od oryginalnego szeregu czasowego, a regresja liniowa jest uruchamiana przy użyciu funkcji series_fit_line() w celu znalezienia składnika trendu (w kolorze jasnoniebieskim).
  • Funkcja odejmuje trend, a reszta jest składnikiem reszty (w kolorze zielonym).
  • Na koniec funkcja dodaje składniki sezonowe i trendu w celu wygenerowania punktu odniesienia (na niebiesko).

Wykrywanie anomalii szeregów czasowych

Funkcja series_decompose_anomalies() znajduje nietypowe punkty w zestawie szeregów czasowych. Ta funkcja wywołuje series_decompose() funkcję w celu skompilowania modelu dekompozycji, a następnie jest uruchamiana series_outliers() na składniku reszt. series_outliers() oblicza wyniki anomalii dla każdego punktu składnika reszt przy użyciu testu ogrodzenia Tukeya. Wyniki anomalii powyżej 1,5 lub niższej -1,5 wskazują odpowiednio na łagodny wzrost anomalii lub spadek. Wyniki anomalii powyżej 3,0 lub starszej niż -3,0 wskazują na silną anomalię.

Następujące zapytanie umożliwia wykrywanie anomalii w wewnętrznym ruchu usługi internetowej:

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.

Wykrywanie anomalii szeregów czasowych.

  • Oryginalny szereg czasowy (na czerwono).
  • Składnik linii bazowej (sezonowy + trend) (w kolorze niebieskim).
  • Nietypowe punkty (fioletowe) na początku oryginalnego szeregu czasowego. Nietypowe punkty znacznie odbiegają od oczekiwanych wartości punktu odniesienia.

Prognozowanie szeregów czasowych

Funkcja series_decompose_forecast() przewiduje przyszłe wartości zestawu szeregów czasowych. Ta funkcja wywołuje funkcję series_decompose() w celu skompilowania modelu dekompozycji, a następnie, dla każdego szeregu czasowego, ekstrapoluje składnik punktu odniesienia w przyszłości.

Następujące zapytanie umożliwia przewidywanie ruchu w usłudze internetowej w przyszłym tygodniu:

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')

Prognozowanie szeregów czasowych.

  • Oryginalna metryka (na czerwono). Brak przyszłych wartości i domyślnie ustawiono wartość 0.
  • Ekstrapoluj składnik punktu odniesienia (na niebiesko), aby przewidzieć wartości w przyszłym tygodniu.

Skalowalność

język zapytań Kusto składnia umożliwia pojedyncze wywołanie przetwarzania wielu szeregów czasowych. Jego unikatowa zoptymalizowana implementacja umożliwia szybką wydajność, co ma kluczowe znaczenie dla efektywnego wykrywania anomalii i prognozowania podczas monitorowania tysięcy liczników w scenariuszach niemal w czasie rzeczywistym.

Następujące zapytanie przedstawia przetwarzanie trzech szeregów czasowych jednocześnie:

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')

Skalowalność szeregów czasowych.

Podsumowanie

Ten dokument zawiera szczegółowe informacje o natywnych funkcjach KQL na potrzeby wykrywania anomalii szeregów czasowych i prognozowania. Każdy oryginalny szereg czasowy jest rozłożony na składniki sezonowe, trendu i reszt do wykrywania anomalii i/lub prognozowania. Te funkcje mogą być używane w scenariuszach monitorowania niemal w czasie rzeczywistym, takich jak wykrywanie błędów, konserwacja predykcyjna i prognozowanie zapotrzebowania i obciążenia.