Share via


Avvikelsediagnos för rotorsaksanalys

Kusto-frågespråk (KQL) har inbyggda funktioner för avvikelseidentifiering och prognostisering för att söka efter avvikande beteende. När ett sådant mönster har identifierats kan en rotorsaksanalys (RCA) köras för att minimera eller lösa avvikelsen.

Diagnosprocessen är komplex och lång och utförs av domänexperter. Processen omfattar:

  • Hämtar och kopplar ihop mer data från olika källor under samma tidsperiod
  • Letar efter ändringar i fördelningen av värden på flera dimensioner
  • Diagram över fler variabler
  • Andra tekniker baserade på domänkunskap och intuition

Eftersom dessa diagnosscenarier är vanliga är plugin-program för maskininlärning tillgängliga för att göra diagnosfasen enklare och förkorta RCA:ns varaktighet.

Alla tre av följande Machine Learning-plugin-program implementerar klustringsalgoritmer: autocluster, basketoch diffpatterns. autocluster Plugin-programmet och basket klustrade en enda postuppsättning, och diffpatterns plugin-programmet klustrade skillnaderna mellan två postuppsättningar.

Klustra en enskild postuppsättning

Ett vanligt scenario omfattar en datauppsättning som väljs av ett specifikt villkor, till exempel:

  • Tidsfönster som visar avvikande beteende
  • Enhetsavläsningar med hög temperatur
  • Kommandon med lång varaktighet
  • Främsta utgiftsanvändare Du vill ha ett snabbt och enkelt sätt att hitta vanliga mönster (segment) i data. Mönster är en delmängd av datauppsättningen vars poster delar samma värden över flera dimensioner (kategoriska kolumner).

Följande fråga skapar och visar en tidsserie med tjänstfel under en vecka, i intervall på tio minuter:

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

Tidsschema för tjänstfel.

Antalet tjänstfel korrelerar med den övergripande tjänsttrafiken. Du kan tydligt se det dagliga mönstret för arbetsdagar, måndag till fredag. Antalet tjänstfel ökar mitt på dagen och antalet droppar under natten. Platta låga antal syns under helgen. Undantagstoppar kan identifieras med hjälp av avvikelseidentifiering i tidsserier.

Den andra ökningen av data inträffar på tisdagseftermiddagen. Följande fråga används för att ytterligare diagnostisera och kontrollera om det är en kraftig topp. Frågan ritar om diagrammet runt toppen i en högre upplösning på åtta timmar i intervall på en minut. Du kan sedan studera dess gränser.

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

Fokusera på tidsschema för topp.

Du ser en knapp topp på två minuter från 15:00 till 15:02. I följande fråga räknar du undantagen i det här tvåminutersfönstret:

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
Antal
972

I följande fråga visas exempel på 20 undantag av 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
PreciseTimeStamp Region ScaleUnit DeploymentId Spårningspunkt 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

Använd autocluster() för kluster med en postuppsättning

Även om det finns mindre än tusen undantag är det fortfarande svårt att hitta vanliga segment, eftersom det finns flera värden i varje kolumn. Du kan använda autocluster() plugin-programmet för att omedelbart extrahera en kort lista över vanliga segment och hitta de intressanta klustren inom toppens två minuter, enligt följande fråga:

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()
SegmentId Antal Procent 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 Veu su4 be1d6d7ac9574cbc9a22cb8ee20f16fc

Du kan se i resultaten ovan att det mest dominerande segmentet innehåller 65,74 % av de totala undantagsposterna och delar fyra dimensioner. Nästa segment är mycket mindre vanligt. Den innehåller bara 9,67 % av posterna och delar tre dimensioner. De andra segmenten är ännu mindre vanliga.

Autokluster använder en egenutvecklad algoritm för att bryta flera dimensioner och extrahera intressanta segment. "Intressant" innebär att varje segment har betydande täckning av både postuppsättningen och de angivna funktionerna. Segmenten är också avvikande, vilket innebär att var och en skiljer sig från de andra. Ett eller flera av dessa segment kan vara relevanta för RCA-processen. För att minimera segmentgranskning och utvärdering extraherar autokluster endast en liten segmentlista.

Använd basket() för klustring av en postuppsättning

Du kan också använda plugin-programmet basket() enligt följande fråga:

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 Antal Procent Region ScaleUnit DeploymentId Spårningspunkt 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 Veu su4 be1d6d7ac9574cbc9a22cb8ee20f16fc
10 92 9.46502057613169 10007007
11 90 9.25925925925926 10007006
12 57 5.8641975308642 00000000-0000-0000-0000-000000000000

Basket implementerar algoritmen "Apriori" för utvinning av objektuppsättningar. Den extraherar alla segment vars täckning för postuppsättningen ligger över ett tröskelvärde (standardvärdet är 5 %). Du kan se att fler segment extraherades med liknande segment, till exempel segment 0, 1 eller 2, 3.

Båda plugin-program är kraftfulla och enkla att använda. Deras begränsning är att de grupperar en enskild postuppsättning på ett oövervakat sätt utan etiketter. Det är oklart om de extraherade mönstren kännetecknar den valda postuppsättningen, avvikande poster eller den globala postuppsättningen.

Klustra skillnaden mellan två postuppsättningar

Plugin-programmet diffpatterns() löser begränsningen för autocluster och basket. Diffpatterns tar två postuppsättningar och extraherar de viktigaste segmenten som skiljer sig. En uppsättning innehåller vanligtvis den avvikande postuppsättning som undersöks. En analyseras av autocluster och basket. Den andra uppsättningen innehåller referenspostuppsättningen, baslinjen.

I följande fråga diffpatterns hittar du intressanta kluster inom toppens två minuter, som skiljer sig från klustren inom baslinjen. Baslinjefönstret definieras som de åtta minuterna före 15:00, när toppen startade. Du utökar med en binär kolumn (AB) och anger om en viss post tillhör baslinjen eller den avvikande uppsättningen. Diffpatterns implementerar en övervakad inlärningsalgoritm, där de två klassetiketterna genererades av avvikande jämfört med baslinjeflaggan (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')
SegmentId CountA AntalB PercentA PercentB PercentDiffAB Region ScaleUnit DeploymentId Spårningspunkt
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 Veu su4 be1d6d7ac9574cbc9a22cb8ee20f16fc
6 57 204 5.86 16.56 10.69

Det mest dominerande segmentet är samma segment som extraherades av autocluster. Täckningen i det två minuter långa avvikande fönstret är också 65,74 %. Täckningen i det åtta minuter långa baslinjefönstret är dock bara 1,7 %. Skillnaden är 64,04 %. Den här skillnaden verkar vara relaterad till den avvikande toppen. För att verifiera det här antagandet delar följande fråga upp det ursprungliga diagrammet i de poster som tillhör det här problematiska segmentet och poster från de andra segmenten.

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

Validera tidsschema för diffpatternsegment.

Med det här diagrammet kan vi se att topplistan på tisdagseftermiddagen berodde på undantag från det här specifika segmentet, som upptäcktes med hjälp av plugin-programmet diffpatterns .

Sammanfattning

Machine Learning-plugin-program är användbara i många scenarier. autocluster Och basket implementerar en oövervakad inlärningsalgoritm och är enkla att använda. Diffpatterns implementerar en övervakad inlärningsalgoritm och även om den är mer komplex är den mer kraftfull för att extrahera differentieringssegment för RCA.

Dessa plugin-program används interaktivt i ad hoc-scenarier och i automatiska övervakningstjänster i nära realtid. Tidsserieavvikelseidentifiering följs av en diagnosprocess. Processen är mycket optimerad för att uppfylla nödvändiga prestandastandarder.