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:

[Kliknutím spustíte dotaz]

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:

[Kliknutím spustíte dotaz]

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-series operátoru vytvořte sadu tří časových řad, kde:
    • num=count(): časová řada provozu
    • range(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ěny series_fill_const()series_fill_forward() použít , a series_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 timechart pro 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:

Oddíl časové řady.

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ázvem Extend) do dotazu:

[Kliknutím spustíte dotaz]

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

Filtrování časových řad.

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:

[Kliknutím spustíte dotaz]

demo_series2
| extend series_fit_2lines(y), series_fit_line(y)
| render linechart with(xcolumn=x)

Regrese časových řad.

  • 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):

[Kliknutím spustíte dotaz]

demo_series3
| render timechart 

Time Series sezónnost.

Poznámka

Je to anomálie, pokud konkrétní odlišná období neexistují.

[Kliknutím spustíte dotaz]

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:

[Kliknutím spustíte dotaz]

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

Operace s časovou řadou

  • 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:

[Kliknutím spustíte 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:

[Kliknutím spustíte dotaz]

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:

[Kliknutím spustíte dotaz]

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) 

Časová řada ve velkém měřítku.

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?

[Kliknutím spustíte dotaz]

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:

[Kliknutím spustíte dotaz]

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

Časové řady: horních dvou.

Zobrazit instance:

[Kliknutím spustíte dotaz]

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