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
, basket
och 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")
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")
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
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.
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för