Anomáliadetektálás és -előrejelzés

A felhőszolgáltatások és az IoT-eszközök telemetriai adatokat hoznak létre, amelyek olyan megállapítások megszerzésére használhatók, mint a szolgáltatás állapotának monitorozása, a fizikai éles folyamatok és a használati trendek. Az idősorelemzés egyik módja ezeknek a metrikáknak a mintájában szereplő eltérések azonosításának a tipikus alapkonfigurációs mintához képest.

Kusto lekérdezésnyelv (KQL) natív támogatást tartalmaz több idősor létrehozásához, módosításához és elemzéséhez. A KQL használatával másodpercek alatt több ezer idősort hozhat létre és elemezhet, így közel valós idejű monitorozási megoldásokat és munkafolyamatokat tehet lehetővé.

Ez a cikk a KQL idősoros anomáliadetektálási és előrejelzési képességeit ismerteti. Az alkalmazható idősorfüggvények egy robusztus, jól ismert felbontási modellen alapulnak, ahol minden egyes eredeti idősor szezonális, trendi és reziduális összetevőkre oszlik. Az anomáliákat a reziduális összetevőn lévő kiugró értékek észlelik, míg az előrejelzés a szezonális és trendösszetevők extrapolálásával történik. A KQL-implementáció jelentősen javítja az alapszintű felbontási modellt az automatikus szezonalitás-észleléssel, a robusztus kiugró elemzéssel és a vektoros implementációval, hogy másodpercek alatt több ezer idősort dolgozzanak fel.

Előfeltételek

  • Microsoft-fiók vagy Microsoft Entra felhasználói identitás. Nincs szükség Azure-előfizetésre.
  • Az idősorok képességeinek áttekintéséhez olvassa el az idősorelemzést.

Idősorozat felbontási modellje

Az idősorok előrejelzéséhez és anomáliadetektálásához használt KQL natív implementáció egy jól ismert felbontási modellt használ. Ez a modell olyan metrikák idősorára van alkalmazva, amelyek várhatóan időszakos és trendszerű viselkedést jeleznek, mint például a szolgáltatásforgalom, az összetevők szívverései és az IoT rendszeres mérései a jövőbeli metrikaértékek előrejelzéséhez és a rendellenes értékek észleléséhez. Ennek a regressziós folyamatnak az a feltételezése, hogy a korábban ismert szezonális és trendi viselkedésen kívül az idősor véletlenszerűen oszlik el. Ezután előre jelezheti a jövőbeli metrikaértékeket a szezonális és trendösszetevőkből, együttesen elnevezve az alapkonfigurációt, és figyelmen kívül hagyhatja a reziduális részt. A rendellenes értékeket a kiugró elemzés alapján is észlelheti, csak a reziduális rész használatával. Felbontási modell létrehozásához használja a függvényt series_decompose(). A series_decompose() függvény idősorokat vesz igénybe, és automatikusan lebontja az egyes idősorokat a szezonális, trendi, reziduális és alapösszetevőkre.

Egy belső webszolgáltatás forgalmát például a következő lekérdezéssel bonthatja fel:

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)

Idősorok felbontása.

  • Az eredeti idősor szám (piros) címkével van ellátva.
  • A folyamat a szezonalitás automatikus észlelésével kezdődik a függvény series_periods_detect() használatával, és kinyeri a szezonális mintát (lila színnel).
  • A szezonális mintát kivonjuk az eredeti idősorból, és a függvény series_fit_line() használatával lineáris regressziót futtatunk a trendösszetevő megkereséséhez (világoskék színnel).
  • A függvény kivonja a trendet, a maradék pedig a reziduális összetevő (zöld színnel).
  • Végül a függvény hozzáadja a szezonális és trendi összetevőket az alapkonfiguráció létrehozásához (kék színnel).

Idősor anomáliadetektálása

A függvény series_decompose_anomalies() rendellenes pontokat keres egy idősoron. Ez a függvény meghívja series_decompose() a felbontási modell összeállítását, majd futtatja series_outliers() a maradék összetevőt. series_outliers() a Reziduális összetevő minden pontjára kiszámítja az anomáliák pontszámait a Tukey kerítéstesztjének használatával. Az 1,5 feletti vagy -1,5 alatti anomáliák enyhe emelkedést vagy csökkenést jeleznek. A 3,0 vagy -3,0 alatti anomáliák erős anomáliát jeleznek.

A következő lekérdezés lehetővé teszi a belső webszolgáltatás-forgalom rendellenességeinek észlelését:

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.

Idősor anomáliadetektálása.

  • Az eredeti idősor (piros).
  • Az alapkonfiguráció (szezonális + trend) összetevő (kék színnel).
  • A rendellenes pontok (lila színnel) az eredeti idősor tetején. A rendellenes pontok jelentősen eltérnek a várt alapértékektől.

Idősoros előrejelzés

A függvény series_decompose_forecast() előrejelzi az idősorok jövőbeli értékeit. Ez a függvény meghívja series_decompose() a felbontási modell összeállítását, majd minden idősor esetében extrapolálja az alapösszetevőt a jövőbe.

A következő lekérdezéssel előrejelezheti a jövő heti webszolgáltatás-forgalmat:

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

Idősorok előrejelzése.

  • Eredeti metrika (piros). A jövőbeli értékek hiányoznak, és alapértelmezés szerint 0-ra vannak állítva.
  • Extrapolálja az alapösszetevőt (kék színnel) a jövő heti értékek előrejelzéséhez.

Méretezhetőség

Kusto lekérdezésnyelv szintaxissal egyetlen hívás több idősort is feldolgozhat. Egyedi optimalizált implementációja gyors teljesítményt tesz lehetővé, ami kritikus fontosságú a hatékony anomáliadetektáláshoz és előrejelzéshez, amikor közel valós idejű forgatókönyvekben több ezer számlálót figyel.

A következő lekérdezés három idősor egyidejű feldolgozását mutatja be:

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

Idősorok méretezhetősége.

Összefoglalás

Ez a dokumentum az idősorok anomáliadetektálásához és előrejelzéséhez használható natív KQL-függvényeket ismerteti. Minden eredeti idősor szezonális, trendi és reziduális összetevőkre oszlik az anomáliák és/vagy előrejelzés észleléséhez. Ezek a funkciók közel valós idejű monitorozási forgatókönyvekhez használhatók, például hibaészleléshez, prediktív karbantartáshoz, valamint igény- és terhelés-előrejelzéshez.