Idősorozat-elemzések
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. Ebből a cikkből megtudhatja, hogyan használható a KQL több ezer idősor másodpercek alatt történő létrehozására és elemzésére, közel valós idejű monitorozási megoldások és munkafolyamatok engedélyezéséhez.
Idősor létrehozása
Ebben a szakaszban egyszerű és intuitív módon hozunk létre egy nagy rendszeres idősort az operátor használatával, és szükség szerint kitöltjük a make-series
hiányzó értékeket.
Az idősor-elemzés első lépése az eredeti telemetriai tábla particionálása és átalakítása idősorok halmazává. A táblázat általában tartalmaz időbélyegoszlopot, környezetfüggő dimenziókat és választható metrikákat. A dimenziók az adatok particionálására szolgálnak. A cél az, hogy partíciónként több ezer idősort hozzon létre rendszeres időközönként.
A bemeneti tábla demo_make_series1 600 000 rekordot tartalmaz tetszőleges webszolgáltatás-forgalomról. A következő paranccsal 10 rekordot mintázhat:
demo_make_series1 | take 10
Az eredményként kapott tábla egy időbélyegoszlopot, három környezeti dimenzióoszlopot tartalmaz, és nincsenek metrikák:
TimeStamp | BrowserVer | OsVer | Ország/régió |
---|---|---|---|
2016-08-25 09:12:35.4020000 | Chrome 51.0 | Windows 7 | Egyesült Királyság |
2016-08-25 09:12:41.1120000 | Chrome 52.0 | Windows 10 | |
2016-08-25 09:12:46.2300000 | Chrome 52.0 | Windows 7 | Egyesült Királyság |
2016-08-25 09:12:46.5100000 | Chrome 52.0 | Windows 10 | Egyesült Királyság |
2016-08-25 09:12:46.5570000 | Chrome 52.0 | Windows 10 | Litván Köztársaság |
2016-08-25 09:12:47.0470000 | Chrome 52.0 | Windows 8.1 | India |
2016-08-25 09:12:51.3600000 | Chrome 52.0 | Windows 10 | Egyesült Királyság |
2016-08-25 09:12:51.6930000 | Chrome 52.0 | Windows 7 | Hollandia |
2016-08-25 09:12:56.4240000 | Chrome 52.0 | Windows 10 | Egyesült Királyság |
2016-08-25 09:13:08.7230000 | Chrome 52.0 | Windows 10 | India |
Mivel nincsenek metrikák, csak a forgalom számát képviselő idősorokat hozhatunk létre, amelyeket az operációs rendszer particionált az alábbi lekérdezéssel:
let min_t = toscalar(demo_make_series1 | summarize min(TimeStamp));
let max_t = toscalar(demo_make_series1 | summarize max(TimeStamp));
demo_make_series1
| make-series num=count() default=0 on TimeStamp from min_t to max_t step 1h by OsVer
| render timechart
make-series
Az operátorral három idősorból álló készletet hozhat létre, ahol:num=count()
: forgalom idősorozatafrom min_t to max_t step 1h
: az idősorok 1 órás intervallumokban jönnek létre az időtartományban (a táblarekordok legrégebbi és legújabb időbélyegei)default=0
: adja meg a hiányzó tárolók kitöltési módját a rendszeres idősorok létrehozásához. Másik lehetőségként a ,series_fill_forward()
,series_fill_backward()
ésseries_fill_linear()
a módosításokat is használhatjaseries_fill_const()
by OsVer
: partíció operációs rendszer szerint
- A tényleges idősor-adatstruktúra az egyes időhelyek összesített értékének numerikus tömbje. Vizualizációhoz használjuk
render timechart
.
A fenti táblázatban három partíció található. Létrehozhatunk egy külön idősort: Windows 10 (piros), 7 (kék) és 8.1 (zöld) az operációs rendszer minden verziójához a grafikonon látható módon:
Idősor-elemzési függvények
Ebben a szakaszban tipikus adatsor-feldolgozási függvényeket fogunk végrehajtani. Az idősorok létrehozása után a KQL támogatja a függvények egyre bővülő listáját a feldolgozásukhoz és elemzésükhöz. Bemutatunk néhány jellemző függvényt az idősorok feldolgozásához és elemzéséhez.
Szűrés
A szűrés gyakori gyakorlat a jelfeldolgozásban, és hasznos az idősorok feldolgozási feladataihoz (például zajos jel simításához, változásészleléshez).
- Két általános szűrési függvény létezik:
series_fir()
: FIR-szűrő alkalmazása. A változásészlelési idősor mozgóátlagának és különbségének egyszerű kiszámítására szolgál.series_iir()
: IIR-szűrő alkalmazása. Exponenciális simításhoz és összegző összeghez használatos.
Extend
az idősor úgy van beállítva, hogy hozzáad egy új, 5-ös méretű ( ma_num nevű) mozgó átlagos adatsort a lekérdezéshez:
let min_t = toscalar(demo_make_series1 | summarize min(TimeStamp));
let max_t = toscalar(demo_make_series1 | summarize max(TimeStamp));
demo_make_series1
| make-series num=count() default=0 on TimeStamp from min_t to max_t step 1h by OsVer
| extend ma_num=series_fir(num, repeat(1, 5), true, true)
| render timechart
Regresszióelemzés
Az Azure Data Explorer támogatja a szegmentált lineáris regresszióelemzést az idősor trendjének becsléséhez.
- A series_fit_line() használatával a legjobb vonalat illesztheti egy idősorhoz az általános trendészleléshez.
- A series_fit_2lines() használatával észlelheti a monitorozási forgatókönyvekben hasznos trendváltozásokat az alapkonfigurációhoz képest.
series_fit_line()
Példa és series_fit_2lines()
függvények egy idősoros lekérdezésben:
demo_series2
| extend series_fit_2lines(y), series_fit_line(y)
| render linechart with(xcolumn=x)
- Kék: eredeti idősor
- Zöld: beszerelt vonal
- Piros: két szerelt vonal
Megjegyzés
A függvény pontosan észlelte az ugrási (szintváltozási) pontot.
Szezonalitás észlelése
Számos metrika szezonális (időszakos) mintákat követ. A felhőszolgáltatások felhasználói forgalma általában napi és heti mintákat tartalmaz, amelyek a munkanap közepén a legmagasabbak, éjszaka és hétvégén pedig a legalacsonyabbak. Az IoT-érzékelők rendszeres időközönként mérnek. A fizikai mérések, például a hőmérséklet, a nyomás vagy a páratartalom is szezonális viselkedést mutathatnak.
Az alábbi példa egy webszolgáltatás (2 órás tárolók) egy hónapos forgalmára alkalmazza a szezonalitás észlelését:
demo_series3
| render timechart
- A series_periods_detect() használatával automatikusan észlelheti az idősorok időszakait.
- Használjon series_periods_validate() akkor, ha tudjuk, hogy egy metrika adott különböző időszak(ok)ból áll, és ellenőrizni szeretnénk, hogy léteznek-e.
Megjegyzés
Anomália, ha nem léteznek meghatározott különböző időszakok.
demo_series3
| project (periods, scores) = series_periods_detect(num, 0., 14d/2h, 2) //to detect the periods in the time series
| mv-expand periods, scores
| extend days=2h*todouble(periods)/1d
Időszakok | Pontszámok | nap |
---|---|---|
84 | 0.820622786055595 | 7 |
12 | 0.764601405803502 | 1 |
A függvény napi és heti szezonalitást észlel. A napi pontszámok kisebbek, mint a heti, mert a hétvégi napok eltérnek a hétköznapoktól.
Elemalapú függvények
Az aritmetikai és logikai műveletek idősorokon végezhetők el. A series_subtract() használatával kiszámíthatjuk a reziduális idősort, azaz az eredeti nyers és a simított metrika közötti különbséget, és megkereshetjük a reziduális jel rendellenességeit:
let min_t = toscalar(demo_make_series1 | summarize min(TimeStamp));
let max_t = toscalar(demo_make_series1 | summarize max(TimeStamp));
demo_make_series1
| make-series num=count() default=0 on TimeStamp in from min_t to max_t step 1h by OsVer
| extend ma_num=series_fir(num, repeat(1, 5), true, true)
| extend residual_num=series_subtract(num, ma_num) //to calculate residual time series
| where OsVer == "Windows 10" // filter on Win 10 to visualize a cleaner chart
| render timechart
- Kék: eredeti idősor
- Piros: simított idősor
- Zöld: maradék idősor
Idősoros munkafolyamat nagy léptékben
Az alábbi példa bemutatja, hogyan futtathatók ezek a függvények több ezer idősoron másodpercek alatt az anomáliadetektáláshoz. Ha egy DB-szolgáltatás olvasási számmetrikáinak négy napon keresztüli minta telemetriai rekordjait szeretné megtekinteni, futtassa a következő lekérdezést:
demo_many_series1
| take 4
IDŐBÉLYEGZŐ | Loc | Op | DB | DataRead |
---|---|---|---|---|
2016-09-11 21:00:00.0000000 | 9. hely | 5117853934049630089 | 262 | 0 |
2016-09-11 21:00:00.0000000 | 9. hely | 5117853934049630089 | 241 | 0 |
2016-09-11 21:00:00.0000000 | 9. hely | -865998331941149874 | 262 | 279862 |
2016-09-11 21:00:00.0000000 | 9. hely | 371921734563783410 | 255 | 0 |
És egyszerű statisztikák:
demo_many_series1
| summarize num=count(), min_t=min(TIMESTAMP), max_t=max(TIMESTAMP)
num | min_t | max_t |
---|---|---|
2177472 | 2016-09-08 00:00:00.0000000 | 2016-09-11 23:00:00.0000000 |
Egy idősor összeállítása az olvasási metrika 1 órás rekeszeibe (összesen négy nap * 24 óra = 96 pont) normál mintaingadozást eredményez:
let min_t = toscalar(demo_many_series1 | summarize min(TIMESTAMP));
let max_t = toscalar(demo_many_series1 | summarize max(TIMESTAMP));
demo_many_series1
| make-series reads=avg(DataRead) on TIMESTAMP from min_t to max_t step 1h
| render timechart with(ymin=0)
A fenti viselkedés félrevezető, mivel az egyetlen normál idősor több ezer különböző, rendellenes mintával rendelkező példányból van összesítve. Ezért példányonként létrehozunk egy idősort. A példányokat a Loc (hely), az Op (művelet) és a DB (adott gép) határozza meg.
Hány idősort hozhatunk létre?
demo_many_series1
| summarize by Loc, Op, DB
| count
Darabszám |
---|
18339 |
Most létrehozunk egy 18339-es idősort az olvasási szám metrikáiból. Hozzáadjuk a záradékot a by
make-series utasításhoz, lineáris regressziót alkalmazunk, és kiválasztjuk az első két idősort, amely a legjelentősebb csökkenő trendet tartalmazta:
let min_t = toscalar(demo_many_series1 | summarize min(TIMESTAMP));
let max_t = toscalar(demo_many_series1 | summarize max(TIMESTAMP));
demo_many_series1
| make-series reads=avg(DataRead) on TIMESTAMP from min_t to max_t step 1h by Loc, Op, DB
| extend (rsquare, slope) = series_fit_line(reads)
| top 2 by slope asc
| render timechart with(title='Service Traffic Outage for 2 instances (out of 18339)')
A példányok megjelenítése:
let min_t = toscalar(demo_many_series1 | summarize min(TIMESTAMP));
let max_t = toscalar(demo_many_series1 | summarize max(TIMESTAMP));
demo_many_series1
| make-series reads=avg(DataRead) on TIMESTAMP from min_t to max_t step 1h by Loc, Op, DB
| extend (rsquare, slope) = series_fit_line(reads)
| top 2 by slope asc
| project Loc, Op, DB, slope
Loc | Op | DB | Lejtőn |
---|---|---|---|
Loc 15 | 37 | 1151 | -102743.910227889 |
Loc 13 | 37 | 1249 | -86303.2334644601 |
Kevesebb mint két perc alatt közel 20 000 idősort elemeztek, és két rendellenes idősort észleltek, amelyekben az olvasási szám hirtelen csökkent.
Ezek a fejlett képességek a gyors teljesítménnyel kombinálva egyedi és hatékony megoldást biztosítanak az idősorok elemzéséhez.
Kapcsolódó tartalom
- Ismerje meg az Anomáliák észlelését és előrejelzését a KQL-vel.
- További információ a gépi tanulási képességekről a KQL használatával.
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: