Anomáliadegnózis a kiváltó okok elemzéséhez

Kusto lekérdezésnyelv (KQL) beépített anomáliadetektálási és előrejelzési függvényekkel rendelkezik a rendellenes viselkedés ellenőrzéséhez. Egy ilyen minta észlelése után futtatható egy alapvető okelemzés (RCA) az anomália mérséklése vagy megoldása érdekében.

A diagnosztikai folyamat összetett és hosszadalmas, és tartományi szakértők végzik el. A folyamat a következőket tartalmazza:

  • Több adat beolvasása és összekapcsolása különböző forrásokból ugyanabban az időkeretben
  • Értékek eloszlásának változásainak keresése több dimenzióban
  • További változók diagramozása
  • Egyéb technikák a tartomány ismeretén és az intuíción alapulnak

Mivel ezek a diagnosztikai forgatókönyvek gyakoriak, gépi tanulási beépülő modulok állnak rendelkezésre, amelyek megkönnyítik a diagnosztikai fázist, és lerövidítik az RCA időtartamát.

A következő Machine Learning beépülő modulok mindhároma fürtözési algoritmusokat implementál: autocluster, basketés diffpatterns. A autocluster és basket beépülő modul egyetlen rekordhalmazt fürtöz, a diffpatterns beépülő modul pedig a két rekordhalmaz közötti különbségeket.

Egyetlen rekordhalmaz fürtözése

A gyakori forgatókönyvek közé tartozik egy adott feltétel alapján kiválasztott adathalmaz, például:

  • Rendellenes viselkedést megjelenítő időablak
  • Magas hőmérsékletű eszközolvasások
  • Hosszú időtartamú parancsok
  • Leggyakoribb költségfelhasználók: Gyorsan és egyszerűen megtalálhatja az adatok gyakori mintáit (szegmenseit). A minták az adathalmaz olyan részhalmazai, amelyek rekordjai több dimenzión (kategorikus oszlopokon) osztoznak.

A következő lekérdezés tízperces intervallumokban készíti el és jeleníti meg a szolgáltatáskivételeket egy hét alatt:

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

Szolgáltatáskivételeket idődiagram.

A szolgáltatáskivételek száma korrelál a teljes szolgáltatásforgalommal. A munkanapok napi mintája egyértelműen látható, hétfőtől péntekig. A szolgáltatáskivételek száma a nap közepén megnőtt, és az éjszaka folyamán csökken. A hétvégén alacsony értékek láthatók. A kivételkiugrások idősorozat-anomáliadetektálással észlelhetők.

Az adatok második csúcsa kedd délután következik be. Az alábbi lekérdezéssel tovább diagnosztizálható és ellenőrizhető, hogy éles kiugrásról van-e szó. A lekérdezés egyperces intervallumokban, nagyobb felbontásban, nyolc óra alatt újrarajzol egy diagramot a csúcs körül. Ezután tanulmányozhatja a határait.

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

Összpontosítson a csúcsidődiagramra.

15:00 és 15:02 között keskeny kétperces csúcsot lát. A következő lekérdezésben számolja meg a kivételeket ebben a kétperces ablakban:

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
Darabszám
972

A következő lekérdezésben a 972-ből 20 kivételt láthat:

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
PreciseTimeStamp Region ScaleUnit DeploymentId Nyomkövetési pont 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 89e2f62a73bb4efd8f545aeae40d7e51 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 89e2f62a73bb4efd8f545aeae40d7e51 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

Autocluster() használata egyrekordos fürtszolgáltatáshoz

Annak ellenére, hogy ezernél kevesebb kivétel van, továbbra is nehéz közös szegmenseket találni, mivel minden oszlopban több érték található. A beépülő modullal azonnal kinyerheti a autocluster() gyakori szegmensek rövid listáját, és megkeresheti az érdekes fürtöket a csúcs két percén belül, ahogy az a következő lekérdezésben látható:

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()
Szegmensazonosító Darabszám Százalék Region ScaleUnit DeploymentId Servicehost
0 639 65.7407407407407 Eau 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 Nyeu su4 be1d6d7ac9574cbc9a22cb8ee20f16fc

A fenti eredményekből látható, hogy a legmeghatározóbb szegmens az összes kivételrekord 65,74%-át tartalmazza, és négy dimenzióval rendelkezik. A következő szegmens sokkal kevésbé gyakori. Csak a rekordok 9,67%-át tartalmazza, és három dimenzióval rendelkezik. A többi szegmens még kevésbé gyakori.

Az Autocluster egy saját fejlesztésű algoritmust használ több dimenzió bányászatához és érdekes szegmensek kinyeréhez. Az "érdekes" azt jelenti, hogy minden szegmens jelentős lefedettséggel rendelkezik mind a rekordhalmazról, mind a funkciókról. A szegmensek is eltérnek, ami azt jelenti, hogy mindegyik különbözik a többitől. Ezek közül a szegmensek közül egy vagy több releváns lehet az RCA-folyamat szempontjából. A szegmensek áttekintésének és értékelésének minimalizálása érdekében az autocluster csak egy kis szegmenslistát nyer ki.

Kosár() használata egyetlen rekordhalmaz-fürtözéshez

A beépülő modult az basket() alábbi lekérdezésben látható módon is használhatja:

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()
SegmentId Darabszám Százalék Region ScaleUnit Üzembehelyezési azonosító Nyomkövetési pont Servicehost
0 639 65.7407407407407 Eau su7 b5d1d4df547d4a04ac15885617edba57 e7f60c5d-4944-42b3-922a-92e98a8e7dec
1 642 66.0493827160494 Eau su7 b5d1d4df547d4a04ac15885617edba57
2 324 33.3333333333333 Eau su7 b5d1d4df547d4a04ac15885617edba57 0 e7f60c5d-4944-42b3-922a-92e98a8e7dec
3 315 32.4074074074074 Eau 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 Nyeu su4 be1d6d7ac9574cbc9a22cb8ee20f16fc
10 92 9.46502057613169 10007007
11 90 9.25925925925926 10007006
12 57 5.8641975308642 00000000-0000-0000-0000-000000000000

A Basket implementálja az "Apriori" algoritmust az elemkészletek bányászatához. Kinyeri az összes olyan szegmenst, amelynek a rekordhalmaz lefedettsége meghaladja a küszöbértéket (alapértelmezés szerint 5%). Láthatja, hogy további szegmensek lettek kinyerve hasonlókkal, például 0, 1 vagy 2, 3 szegmensekkel.

Mindkét beépülő modul hatékony és könnyen használható. A korlátozás az, hogy egyetlen rekordhalmazt nem felügyelt módon, címkék nélkül fürtöznek. Nem egyértelmű, hogy a kinyert minták a kijelölt rekordhalmazt, a rendellenes rekordokat vagy a globális rekordhalmazt jellemzik-e.

Két rekordhalmaz közötti különbség fürtözése

A diffpatterns() beépülő modul legyőzi a és basketa korlátozásátautocluster. Diffpatterns két rekordhalmazt vesz fel, és kinyeri a különböző fő szegmenseket. Az egyik készlet általában a vizsgált rendellenes rekordhalmazt tartalmazza. Az egyiket a és basketa elemziautocluster. A másik készlet tartalmazza a referenciarekord-készletet, az alapkonfigurációt.

Az alábbi lekérdezésben diffpatterns érdekes fürtöket talál a csúcs két percén belül, amelyek eltérnek az alapkonfigurációban lévő fürtöktől. Az alapkonfigurációs ablak a csúcs kezdete előtt nyolc perccel, 15:00 előtt van megadva. Egy bináris oszlop (AB) segítségével kiterjeszthető, és megadhatja, hogy egy adott rekord az alapkonfigurációhoz vagy a rendellenes készlethez tartozik-e. Diffpatterns egy felügyelt tanulási algoritmust implementál, amelyben a két osztálycímkét az anomáliás és az alapkonfiguráció jelzője (AB) hozta létre.

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')
SegmentId CountA Darabszám PercentA PercentB PercentDiffAB Region ScaleUnit Üzembehelyezési azonosító Nyomkövetési pont
0 639 21 65.74 1.7 64.04 Eau 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 Nyeu su4 be1d6d7ac9574cbc9a22cb8ee20f16fc
6 57 204 5.86 16.56 10.69

A legmeghatározóbb szegmens ugyanaz a szegmens, amelyet a következő kinyert autocluster: . A kétperces rendellenes ablak lefedettsége szintén 65,74%. A nyolcperces alapkonfigurációs időszak lefedettsége azonban csak 1,7%. A különbség 64,04%. Ez a különbség a rendellenes kiugráshoz kapcsolódik. A feltételezés ellenőrzéséhez az alábbi lekérdezés felosztja az eredeti diagramot a problémás szegmenshez tartozó rekordokra és a többi szegmensből származó rekordokra.

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

A diffpattern szegmens idődiagramja érvényesítése.

Ez a diagram lehetővé teszi számunkra, hogy láthassuk, hogy a kedd délutáni csúcs az adott szegmens kivételei miatt történt, amelyet a diffpatterns beépülő modullal észleltek.

Összefoglalás

A Machine Learning beépülő moduljai számos forgatókönyv esetén hasznosak. A autocluster és basket implementál egy nem felügyelt tanulási algoritmust, és könnyen használható. Diffpatterns felügyelt tanulási algoritmust implementál, és bár összetettebb, hatékonyabb az RCA differenciálási szegmenseinek kinyerése szempontjából.

Ezeket a beépülő modulokat interaktív módon használják alkalmi forgatókönyvekben és automatikus, közel valós idejű monitorozási szolgáltatásokban. Az idősor-anomáliadetektálást egy diagnosztikai folyamat követi. A folyamat rendkívül optimalizált, hogy megfeleljen a szükséges teljesítményszabványoknak.