Analýza časových řad v Azure Data Explorer
Azure Data Explorer (ADX) provádí další shromažďování telemetrických dat z cloudových služeb nebo zařízení IoT. Tato data je možné analyzovat z různých přehledů, jako je monitorování stavu služeb, procesů fyzické produkce a trendů využití. Analýza se provádí na základě časových řad vybraných metrik, aby se zjistila odchylka vzoru v porovnání s jeho typickým standardním vzorem. ADX obsahuje nativní podporu pro vytváření, manipulaci a analýzu více časových řad. V tomto tématu se dozvíte, Azure Data Explorer se používá k vytváření a analýze tisíců časových řad v sekundách, což umožňuje řešení a pracovní postupy monitorování v reálném čase.
Vytvoření časové řady
V této části jednoduše a intuitivně vytvoříme velkou sadu běžných časových řad a podle potřeby vyplníme make-series chybějící hodnoty.
Prvním krokem při analýze časových řad je rozdělení a transformace původní tabulky telemetrie na sadu časových řad. Tabulka obvykle obsahuje sloupec časového razítka, kontextové dimenze a volitelné metriky. Dimenze se používají k rozdělení dat. Cílem je vytvořit tisíce časových řad na oddíl v pravidelných časových intervalech.
Vstupní tabulka obsahuje demo_make_series1 600 tisíc záznamů libovolného provozu webové služby. K ukázce 10 záznamů použijte následující příkaz:
demo_make_series1 | take 10
Výsledná tabulka obsahuje sloupec časového razítka, tři sloupce kontextových dimenzí a žádné metriky:
| Časové razítko | BrowserVer | OsVer | Země/oblast |
|---|---|---|---|
| 2016-08-25 09:12:35.4020000 | Chrome 51.0 | Windows 7 | Spojené království |
| 2016-08-25 09:12:41.1120000 | Chrome 52.0 | Windows 10 | |
| 2016-08-25 09:12:46.2300000 | Chrome 52.0 | Windows 7 | Spojené království |
| 2016-08-25 09:12:46.5100000 | Chrome 52.0 | Windows 10 | Spojené království |
| 2016-08-25 09:12:46.5570000 | Chrome 52.0 | Windows 10 | Litevská republika |
| 2016-08-25 09:12:47.0470000 | Chrome 52.0 | Windows 8.1 | Indie |
| 2016-08-25 09:12:51.3600000 | Chrome 52.0 | Windows 10 | Spojené království |
| 2016-08-25 09:12:51.6930000 | Chrome 52.0 | Windows 7 | Nizozemsko |
| 2016-08-25 09:12:56.4240000 | Chrome 52.0 | Windows 10 | Spojené království |
| 2016-08-25 09:13:08.7230000 | Chrome 52.0 | Windows 10 | Indie |
Vzhledem k tomu, že neexistují žádné metriky, můžeme pomocí následujícího dotazu vytvořit pouze sadu časových řad představujících samotný počet přenosů rozdělených podle operačního systému:
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 range(min_t, max_t, 1h) by OsVer
| render timechart
- Pomocí
make-seriesoperátoru vytvořte sadu tří časových řad, kde:num=count(): časová řada provozurange(min_t, max_t, 1h): Časová řada se vytvoří v hodinových přihrádkách v časovém rozsahu (nejstarší a nejnovější časová razítka záznamů tabulky).default=0: Zadejte metodu výplně pro chybějící intervaly, aby se vytvořila běžná časová řada. Případně můžete pro změnyseries_fill_const()series_fill_forward()použít , aseries_fill_backward()series_fill_linear().byOsVer: dělení podle operačního systému
- Skutečná datová struktura časové řady je číselné pole agregované hodnoty pro každý časový bin. Používáme
render timechartpro vizualizaci.
V tabulce výše máme tři oddíly. Pro každou verzi operačního systému můžeme vytvořit samostatnou časovou řadu: Windows 10 (červená), 7 (modrá) a 8,1 (zelená), jak je vidět v grafu:

Funkce analýzy časových řad
V této části provedeme typické funkce zpracování řad. Po vytvoření sady časových řad podporuje Azure Data Explorer seznam funkcí pro jejich zpracování a analýzu, který najdete v dokumentaci k časové řadě. Popíšeme několik reprezentativních funkcí pro zpracování a analýzu časových řad.
Filtrování
Filtrování je běžným postupem při zpracování signálů a je užitečné pro úlohy zpracování časových řad (například vyhlazení signálu s šumem, detekce změn).
- Existují dvě obecné filtrovací funkce:
series_fir(): Použití filtru FIR. Slouží k jednoduchému výpočtu klouzavým průměrem a rozlišení časové řady pro detekci změn.series_iir(): Použití filtru IIR. Používá se pro exponenciální vyhlazování a kumulativní součet.
ExtendČasová řada nastavená přidáním nové klouzavých průměrů o velikosti 5 přihrádek (s názvemExtend) do dotazu:
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 range(min_t, max_t, 1h) by OsVer
| extend ma_num=series_fir(num, repeat(1, 5), true, true)
| render timechart

Regresní analýza
ADX podporuje segmentované lineární regresní analýzy pro odhad trendu časové řady.
- Pomocí series_fit_line() můžete přizpůsobit nejlepší čáru časové řadě pro obecnou detekci trendů.
- Pomocí series_fit_2lines() můžete detekovat změny trendu vzhledem ke standardním hodnotám, které jsou užitečné ve scénářích monitorování.
Příklad funkcí series_fit_line() a v dotazu časové series_fit_2lines() řady:
demo_series2
| extend series_fit_2lines(y), series_fit_line(y)
| render linechart with(xcolumn=x)

- Modrá: původní časová řada
- Zelená: ová čára
- Červená: dvě proucené čáry
Poznámka
Funkce přesně rozpoznala bod skoku (změny úrovně).
Detekce sezónnost
Mnoho metrik sleduje sezónní (pravidelné) vzory. Uživatelský provoz Cloud Services většinou obsahuje denní a týdenní vzory, které jsou nejnižšími středními částmi pracovního dne a nejnižší v noci a za víkend. Měření senzorů IoT v pravidelných intervalech. Fyzická měření, jako je teplota, tlak nebo vlhkost, mohou také ukazovat na sezónní chování.
Následující příklad aplikuje sezónnost detekci na jeden měsíc provozu webové služby (2 – hodiny přihrádky):
demo_series3
| render timechart

- K automatické detekci časových řad použijte series_periods_detect () .
- Pokud víme, že by měla metrika obsahovat konkrétní konkrétní tečky, použijte series_periods_validate () , aby bylo možné ověřit, že existují.
Poznámka
Je to anomálie, pokud konkrétní odlišná období neexistují.
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
| době | počty | denní |
|---|---|---|
| 84 | 0.820622786055595 | 7 |
| 12 | 0.764601405803502 | 1 |
Funkce detekuje denní a týdenní sezónnost. Denní skóre méně než týdně, protože víkendové dny se liší od pracovních dnů.
Funkce pro prvky
Aritmetické a logické operace lze provést v časové řadě. Pomocí series_subtract () můžeme vypočítat reziduální časovou řadu, tj. rozdíl mezi původní nezpracovaný metrikou a nahladkou a vyhledat anomálie v reziduálním signálu:
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 range(min_t, max_t, 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

- Blue: původní časová řada
- Red: hladká časová řada
- Zelená: zbytková časová řada
Pracovní postup ve škále časových řad
Níže uvedený příklad ukazuje, jak se tyto funkce můžou spouštět ve velkém měřítku na tisících časových řad v sekundách pro detekci anomálií. Pokud chcete zobrazit několik ukázkových záznamů telemetrie metriky počtu čtení služby DB za čtyři dny, spusťte následující dotaz:
demo_many_series1
| take 4
| ČASOVÉ RAZÍTKO | Loc | anonOp | DB | Čtení z |
|---|---|---|---|---|
| 2016-09-11 21:00:00.0000000 | Loc 9 | 5117853934049630089 | 262 | 0 |
| 2016-09-11 21:00:00.0000000 | Loc 9 | 5117853934049630089 | 241 | 0 |
| 2016-09-11 21:00:00.0000000 | Loc 9 | -865998331941149874 | 262 | 279862 |
| 2016-09-11 21:00:00.0000000 | Loc 9 | 371921734563783410 | 255 | 0 |
A jednoduché statistiky:
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 |
Výsledkem sestavování časové řady v rámci 1 hodinové přihrádky metriky čtení (celkem čtyři dny × 24 hodin = 96 bodů), výsledkem je normální kolísání vzoru:
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 in range(min_t, max_t, 1h)
| render timechart with(ymin=0)

Výše uvedené chování je zavádějící, protože jedna normální časová řada je agregována z tisíců různých instancí, které mohou mít neobvyklé vzory. Proto vytvoříme časovou řadu na instanci. Instance je definována v umístění (location), anonOp (operace) a DB (konkrétní počítač).
Kolik časových řad můžeme vytvořit?
demo_many_series1
| summarize by Loc, Op, DB
| count
| Počet |
|---|
| 18339 |
Nyní vytvoříme sadu 18339 časových řad metriky Count pro čtení. Přidáme by klauzuli do příkazu make-Series, aplikujete lineární regresi a vyberete horních dvou časových řad, které mají nejvýznamnější trend vývoje:
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 in range(min_t, max_t, 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)')

Zobrazit instance:
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 in range(min_t, max_t, 1h) by Loc, Op, DB
| extend (rsquare, slope) = series_fit_line(reads)
| top 2 by slope asc
| project Loc, Op, DB, slope
| Loc | Evřít | DB | sklon |
|---|---|---|---|
| Loc 15 | 37 | 1151 | -102743,910227889 |
| Loc 13 | 37 | 1249 | -86303.2334644601 |
Za méně než dvě minuty se Azure Průzkumník dat analyzoval až 20 000 časových řad a zjistila se dvě neobvyklé časové řady, ve kterých se počet čtení náhle vynechá.
Tyto pokročilé možnosti kombinované s Azure Průzkumník dat rychlého výkonu poskytují jedinečné a výkonné řešení pro analýzu časových řad.
Další kroky
- Seznamte se s detekcí anomálií a prognózou časových řad v Azure Průzkumník dat.
- Seznamte se s možnostmi strojového učení v Azure Průzkumník dat.