Sdílet prostřednictvím


Diagnostika anomálií pro analýzu původní příčiny

Přepněte služby pomocí rozevíracího seznamu Verze . Přečtěte si další informace o navigaci.
Platí pro: ✅ Microsoft Fabric ✅ Azure Data Explorer ✅ Azure Monitor ✅ Microsoft Sentinel

Jazyk Kusto Query Language (KQL) má integrované funkce detekce anomálií a prognózy , které umožňují kontrolovat neobvyklé chování. Když zjistíte neobvyklý vzor, spusťte analýzu původní příčiny (RCA) a zmírňte nebo vyřešte anomálii.

Proces diagnostiky je složitý a zdlouhavý a odborníci na doménu ho obvykle provádějí. Proces zahrnuje:

  • Načítání a spojování více dat z různých zdrojů pro stejný časový rámec
  • Hledání změn v rozdělení hodnot ve více dimenzích
  • Vytváření grafů dalších proměnných
  • Další techniky založené na znalostech domény a intuitivně

Vzhledem k tomu, že tyto scénáře diagnostiky jsou běžné, jsou k dispozici moduly plug-in strojového učení, které usnadňují fázi diagnostiky a zkracují dobu trvání analýzy RCA.

Všechny tři z následujících modulů plug-in strojového učení implementují algoritmy clusteringu: autocluster, basketa diffpatterns. autocluster a basket pluginy clusterují jednu sadu záznamů. Modul diffpatterns plug-in clusteruje rozdíly mezi dvěma sadami záznamů.

Clustering jedné sady záznamů

Běžný scénář zahrnuje datovou sadu vybranou konkrétními kritérii, například:

  • Časové okno zobrazující neobvyklé chování
  • Čtení zařízení s vysokou teplotou
  • Příkazy dlouhé doby trvání
  • Uživatelé s nejvyšší útratou

Chcete rychle a snadno najít běžné vzory (segmenty) v datech. Vzory jsou podmnožinou datové sady, jejíž záznamy sdílejí stejné hodnoty ve více dimenzích (sloupce kategorií).

Následující dotaz sestaví a zobrazí v desetiminutových intervalech časové řady výjimek služby za období týdne:

let min_t = toscalar(demo_clustering1 | summarize min(PreciseTimeStamp));  
let max_t = toscalar(demo_clustering1 | summarize max(PreciseTimeStamp));  
demo_clustering1
| make-series num=count() on PreciseTimeStamp from min_t to max_t step 10m
| render timechart with(title="Service exceptions over a week, 10 minutes resolution")

Časové diagramy výjimek služby

Počet výjimek služby koreluje s celkovým provozem služby. Můžete jasně vidět denní vzor pro pracovní dny, pondělí až pátek. V polovině dne dochází k nárůstu počtu výjimek služby a pokles počtu během noci. Během víkendu se zobrazují ploché nízké počty. Nárůsty výjimek lze detekovat pomocí detekce anomálií časových řad.

K druhému prudkému nárůstu dat dochází v úterý odpoledne. Následující dotaz slouží k další diagnostice a ověření, jestli se jedná o ostrou špičku. Dotaz překreslí graf kolem špičky ve vyšším rozlišení osmi hodin v minutových intervalech. Pak si můžete prostudovat jeho hranice.

let min_t=datetime(2016-08-23 11:00);
demo_clustering1
| make-series num=count() on PreciseTimeStamp from min_t to min_t+8h step 1m
| render timechart with(title="Zoom on the 2nd spike, 1 minute resolution")

Zaměřte se na časový diagram špičky.

Vidíte úzkou dvouminutovou špičku od 15:00 do 15:02. V následujícím dotazu spočítejte výjimky v tomto dvouminutovém okně:

let min_peak_t=datetime(2016-08-23 15:00);
let max_peak_t=datetime(2016-08-23 15:02);
demo_clustering1
| where PreciseTimeStamp between(min_peak_t..max_peak_t)
| count
Počet
972

V následujícím dotazu ukázka 20 výjimek z 972:

let min_peak_t=datetime(2016-08-23 15:00);
let max_peak_t=datetime(2016-08-23 15:02);
demo_clustering1
| where PreciseTimeStamp between(min_peak_t..max_peak_t)
| take 20
Přesné časové razítko Región ScaleUnit Identifikátor nasazení Bod sledování ServiceHost
2016-08-23 15:00:08.7302460 scus su5 9dbd1b161d5b4779a73cf19a7836ebd6 100005 00000000-0000-0000-0000-000000000000
2016-08-23 15:00:09.9496584 scus su5 9dbd1b161d5b4779a73cf19a7836ebd6 10007006 8d257da1-7a1c-44f5-9acd-f9e02ff507fd
2016-08-23 15:00:10.5911748 scus su5 9dbd1b161d5b4779a73cf19a7836ebd6 100005 00000000-0000-0000-0000-000000000000
2016-08-23 15:00:12.2957912 scus su5 9dbd1b161d5b4779a73cf19a7836ebd6 10007007 f855fcef-ebfe-405d-aaf8-9c5e2e43d862
2016-08-23 15:00:18.5955357 scus su5 9dbd1b161d5b4779a73cf19a7836ebd6 10007006 9d390e07-417d-42eb-bebd-793965189a28
2016-08-23 15:00:20.7444854 scus su5 9dbd1b161d5b4779a73cf19a7836ebd6 10007006 6e54c1c8-42d3-4e4e-8b79-9bb076ca71f1
2016-08-23 15:00:23.8694999 eus2 su2 89e2f62a73bb4efd8f545ae40d7e51 36109 19422243-19b9-4d85-9ca6-bc961861d287
2016-08-23 15:00:26.4271786 ncus su1 e24ef436e02b4823ac5d5b1465a9401e 36109 3271bae4-1c5b-4f73-98ef-cc117e9be914
2016-08-23 15:00:27.8958124 scus su3 90d3d2fc7ecc430c9621ece335651a01 904498 8cf38575-fca9-48ca-bd7c-21196f6d6765
2016-08-23 15:00:32.9884969 scus su3 90d3d2fc7ecc430c9621ece335651a01 10007007 d5c7c825-9d46-4ab7-a0c1-8e2ac1d83ddb
2016-08-23 15:00:34.5061623 scus su5 9dbd1b161d5b4779a73cf19a7836ebd6 1002110 55a71811-5ec4-497a-a058-140fb0d611ad
2016-08-23 15:00:37.4490273 scus su3 90d3d2fc7ecc430c9621ece335651a01 10007006 f2ee8254-173c-477d-a1de-4902150ea50d
2016-08-23 15:00:41.2431223 scus su3 90d3d2fc7ecc430c9621ece335651a01 103200 8cf38575-fca9-48ca-bd7c-21196f6d6765
2016-08-23 15:00:47.2983975 ncus su1 e24ef436e02b4823ac5d5b1465a9401e 423690590 00000000-0000-0000-0000-000000000000
2016-08-23 15:00:50.5932834 scus su5 9dbd1b161d5b4779a73cf19a7836ebd6 10007006 2a41b552-aa19-4987-8cdd-410a3af016ac
2016-08-23 15:00:50.8259021 scus su5 9dbd1b161d5b4779a73cf19a7836ebd6 1002110 0d56b8e3-470d-4213-91da-97405f8d005e
2016-08-23 15:00:53.2490731 scus su5 9dbd1b161d5b4779a73cf19a7836ebd6 36109 55a71811-5ec4-497a-a058-140fb0d611ad
2016-08-23 15:00:57.0000946 eus2 su2 89e2f62a73bb4efd8f545ae40d7e51 64038 cb55739e-4afe-46a3-970f-1b49d8ee7564
2016-08-23 15:00:58.2222707 scus su5 9dbd1b161d5b4779a73cf19a7836ebd6 10007007 8215dcf6-2de0-42bd-9c90-181c70486c9c
2016-08-23 15:00:59.9382620 scus su3 90d3d2fc7ecc430c9621ece335651a01 10007006 451e3c4c-0808-4566-a64d-84d85cf30978

I když existuje méně než tisíc výjimek, je stále obtížné najít běžné segmenty, protože v každém sloupci je více hodnot. Pomocí modulu autocluster() plug-in můžete okamžitě extrahovat krátký seznam běžných segmentů a najít zajímavé clustery během dvou minut špičky, jak je vidět v následujícím dotazu:

let min_peak_t=datetime(2016-08-23 15:00);
let max_peak_t=datetime(2016-08-23 15:02);
demo_clustering1
| where PreciseTimeStamp between(min_peak_t..max_peak_t)
| evaluate autocluster()
Identifikátor segmentu Počet Procento Región ScaleUnit Identifikátor nasazení ServiceHost
0 639 65.7407407407407 voda su7 b5d1d4df547d4a04ac15885617edba57 e7f60c5d-4944-42b3-922a-92e98a8e7dec
1 94 9.67078189300411 scus su5 9dbd1b161d5b4779a73cf19a7836ebd6
2 82 8.43621399176955 ncus su1 e24ef436e02b4823ac5d5b1465a9401e
3 68 6.99588477366255 scus su3 90d3d2fc7ecc430c9621ece335651a01
4 55 5,65843621399177 Zeu su4 be1d6d7ac9574cbc9a22cb8ee20f16fc

Z výše uvedených výsledků můžete vidět, že nejvíce dominantní segment obsahuje 65,74% z celkového počtu záznamů výjimek a sdílí čtyři dimenze. Další segment je mnohem méně běžný. Obsahuje pouze 9,67% záznamů a sdílí tři dimenze. Ostatní segmenty jsou ještě méně běžné.

Autocluster používá proprietární algoritmus pro dolování více dimenzí a extrakci zajímavých segmentů. "Zajímavé" znamená, že každý segment významně pokrývá jak sadu záznamů, tak sadu funkcí. Segmenty se odlišují, což znamená, že každý z nich se liší od ostatních. Jeden nebo více z těchto segmentů může být relevantní pro proces RCA. Pokud chcete minimalizovat kontrolu a hodnocení segmentů, autocluster extrahuje jenom malý seznam segmentů.

Modul plug-in basket() můžete použít také v následujícím dotazu:

let min_peak_t=datetime(2016-08-23 15:00);
let max_peak_t=datetime(2016-08-23 15:02);
demo_clustering1
| where PreciseTimeStamp between(min_peak_t..max_peak_t)
| evaluate basket()
Identifikátor segmentu Počet Procento Región ScaleUnit Identifikátor nasazení Bod sledování ServiceHost
0 639 65.7407407407407 voda su7 b5d1d4df547d4a04ac15885617edba57 e7f60c5d-4944-42b3-922a-92e98a8e7dec
1 642 66.0493827160494 voda su7 b5d1d4df547d4a04ac15885617edba57
2 324 33.3333333333333 voda su7 b5d1d4df547d4a04ac15885617edba57 0 e7f60c5d-4944-42b3-922a-92e98a8e7dec
3 315 32.4074074074074 voda su7 b5d1d4df547d4a04ac15885617edba57 16108 e7f60c5d-4944-42b3-922a-92e98a8e7dec
4 328 33.7448559670782 0
5 94 9.67078189300411 scus su5 9dbd1b161d5b4779a73cf19a7836ebd6
6 82 8.43621399176955 ncus su1 e24ef436e02b4823ac5d5b1465a9401e
7 68 6.99588477366255 scus su3 90d3d2fc7ecc430c9621ece335651a01
8 167 17.1810699588477 scus
9 55 5,65843621399177 Zeu su4 be1d6d7ac9574cbc9a22cb8ee20f16fc
10 92 9.46502057613169 10007007
11 90 9,25925925925926 10007006
12 57 5.8641975308642 00000000-0000-0000-0000-000000000000

Košík implementuje algoritmus "Apriori" pro dolování sady položek. Extrahuje všechny segmenty, jejichž pokrytí sady záznamů je nad prahovou hodnotou (výchozí 5%). Můžete vidět, že byly extrahovány další segmenty podobné těm, jako jsou segmenty 0, 1 nebo 2, 3.

Oba moduly plug-in jsou výkonné a snadno použitelné. Jejich omezení spočívá v tom, že bez dohledu skupinově seskupí jednu sadu záznamů naprosto bez popisků. Není jasné, jestli extrahované vzory charakterizují vybranou sadu záznamů, neobvyklé záznamy nebo globální sadu záznamů.

Klasifikace rozdílu mezi dvěma sadami záznamů

Plugin diffpatterns() překonává omezení autocluster a basket. Diffpatterns přebírá dvě sady záznamů a extrahuje hlavní segmenty, které se liší. Jedna sada obvykle obsahuje prošetřovanou neobvyklou sadu záznamů. Jedna je analyzována pomocí autocluster a basket. Druhá sada obsahuje referenční sadu záznamů, směrný plán.

V následujícím dotazu diffpatterns vyhledá zajímavé clustery během dvou minut, které patří k výkyvu, a ty se liší od clusterů v rámci základny. Základní okno je definováno jako osm minut před 15:00, kdy začal nárůst. Rozšíříte binární sloupec (AB) a určíte, jestli konkrétní záznam patří do základního souboru nebo do anomálního souboru. Diffpatterns implementuje algoritmus učení pod dohledem, kde byly dva popisky tříd generovány anomálním a referenčním příznakem (AB).

let min_peak_t=datetime(2016-08-23 15:00);
let max_peak_t=datetime(2016-08-23 15:02);
let min_baseline_t=datetime(2016-08-23 14:50);
let max_baseline_t=datetime(2016-08-23 14:58); // Leave a gap between the baseline and the spike to avoid the transition zone.
let splitime=(max_baseline_t+min_peak_t)/2.0;
demo_clustering1
| where (PreciseTimeStamp between(min_baseline_t..max_baseline_t)) or
        (PreciseTimeStamp between(min_peak_t..max_peak_t))
| extend AB=iff(PreciseTimeStamp > splitime, 'Anomaly', 'Baseline')
| evaluate diffpatterns(AB, 'Anomaly', 'Baseline')
Identifikátor segmentu PočetA CountB Procenta PercentB percentuální rozdíl AB Región ScaleUnit Identifikátor nasazení Bod sledování
0 639 21 65.74 1,7 64.04 voda su7 b5d1d4df547d4a04ac15885617edba57
1 167 544 17.18 44.16 26.97 scus
2 92 356 9.47 28.9 19,43 10007007
3 90 336 9.26 27.27 18.01 10007006
4 82 318 8.44 25,81 17.38 ncus su1 e24ef436e02b4823ac5d5b1465a9401e
5 55 252 5.66 20.45 14.8 Zeu su4 be1d6d7ac9574cbc9a22cb8ee20f16fc
6 57 204 5,86 16.56 10.69

Nejdominantnější segment je stejný segment, který autocluster extrahoval. Pokrytí dvouminutového neobvyklého okna je také 65,74%. Pokrytí v osmiminutovém standardním intervalu je však pouze 1,7%. Rozdíl je 64,04%. Zdá se, že tento rozdíl souvisí s neobvyklým nárůstem. Pro ověření tohoto předpokladu následující dotaz rozdělí původní graf na záznamy, které patří do tohoto problematického segmentu, a záznamy z ostatních segmentů.

let min_t = toscalar(demo_clustering1 | summarize min(PreciseTimeStamp));  
let max_t = toscalar(demo_clustering1 | summarize max(PreciseTimeStamp));  
demo_clustering1
| extend seg = iff(Region == "eau" and ScaleUnit == "su7" and DeploymentId == "b5d1d4df547d4a04ac15885617edba57"
and ServiceHost == "e7f60c5d-4944-42b3-922a-92e98a8e7dec", "Problem", "Normal")
| make-series num=count() on PreciseTimeStamp from min_t to max_t step 10m by seg
| render timechart

Ověřování časového grafu segmentu vzoru změn.

Tento graf ukazuje, že špička v úterý odpoledne byla způsobená výjimkami z tohoto konkrétního segmentu zjištěného pomocí modulu plug-in diffpatterns .

Shrnutí

Moduly plug-in Machine Learning jsou užitečné pro mnoho scénářů. Plug-iny autocluster a basket implementují algoritmus učení bez dohledu a snadno se používají. Modul diffpatterns plug-in implementuje algoritmus učení pod dohledem a i když je složitější, je výkonnější pro extrakci segmentů diferenciace pro RCA.

Tyto moduly plug-in používejte interaktivně ve scénářích ad hoc a v automatických monitorovacích službách téměř v reálném čase. Za detekcí anomálií časových řad následuje proces diagnostiky. Proces je vysoce optimalizovaný tak, aby splňoval nezbytné standardy výkonu.