Diagnosi anomalie per l'analisi della causa radice
Linguaggio di query Kusto (KQL) include funzioni predefinite di rilevamento anomalie e previsione per verificare il comportamento anomalo. Dopo aver rilevato un modello di questo tipo, è possibile eseguire un'analisi della causa radice per attenuare o risolvere l'anomalia.
Il processo di diagnosi è complesso e lungo e fatto da esperti di dominio. Il processo include:
- Recupero e unione di più dati da origini diverse per lo stesso intervallo di tempo
- Ricerca di modifiche nella distribuzione dei valori in più dimensioni
- Creazione di un grafico di altre variabili
- Altre tecniche basate sulla conoscenza e sull'intuizione del dominio
Poiché questi scenari di diagnosi sono comuni, i plug-in di Machine Learning sono disponibili per semplificare la fase di diagnosi e ridurre la durata dell'RCA.
Tutti e tre i plug-in di Machine Learning seguenti implementano algoritmi di clustering: autocluster
, basket
e diffpatterns
. I autocluster
plug-in e basket
raggruppano un singolo set di record e il diffpatterns
plug-in raggruppa le differenze tra due set di record.
Clustering di un singolo set di record
Uno scenario comune include un set di dati selezionato da criteri specifici, ad esempio:
- Intervallo di tempo che mostra un comportamento anomalo
- Letture dei dispositivi ad alta temperatura
- Comandi di durata prolungata
- Utenti con spesa superiore
Si vuole un modo semplice e rapido per trovare modelli comuni (segmenti) nei dati. I modelli sono un subset del set di dati i cui record condividono gli stessi valori su più dimensioni (colonne categoriche).
La query seguente compila e mostra una serie temporale di eccezioni del servizio nel periodo di una settimana, in contenitori di dieci minuti:
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")
Il numero di eccezioni del servizio è correlato al traffico complessivo del servizio. È possibile vedere chiaramente il modello giornaliero per i giorni lavorativi, da lunedì a venerdì. C'è un aumento dei conteggi delle eccezioni di servizio a metà giorno e scende nei conteggi durante la notte. I conteggi bassi flat sono visibili durante il fine settimana. È possibile rilevare picchi di eccezioni usando il rilevamento anomalie delle serie temporali.
Il secondo picco dei dati si verifica martedì pomeriggio. La query seguente viene usata per diagnosticare e verificare se si tratta di un picco acuto. La query ridisegna il grafico intorno al picco in una risoluzione superiore di otto ore in contenitori di un minuto. È quindi possibile studiare i suoi bordi.
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")
Viene visualizzato un picco di due minuti stretto da 15:00 a 15:02. Nella query seguente, contare le eccezioni in questa finestra di due minuti:
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
Conteggio |
---|
972 |
Nella query seguente, esempi di 20 eccezioni su 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 | Paese | ScaleUnit | DeploymentId | Punto di traccia | Host servizio |
---|---|---|---|---|---|
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 |
Usare autocluster() per il clustering di set di record singoli
Anche se sono presenti meno di mille eccezioni, è comunque difficile trovare segmenti comuni, poiché in ogni colonna sono presenti più valori. È possibile usare il plug-in autocluster()
per estrarre immediatamente un breve elenco di segmenti comuni e trovare i cluster interessanti entro i due minuti del picco, come illustrato nella query seguente:
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 | Conteggio | Percentuale | Paese | ScaleUnit | DeploymentId | Host servizio |
---|---|---|---|---|---|---|
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 | weu | su4 | be1d6d7ac9574cbc9a22cb8ee20f16fc |
È possibile osservare dai risultati precedenti che il segmento più dominante contiene il 65,74% dei record di eccezione totali e condivide quattro dimensioni. Il segmento successivo è molto meno comune. Contiene solo il 9,67% dei record e condivide tre dimensioni. Gli altri segmenti sono ancora meno comuni.
Autocluster usa un algoritmo proprietario per il data mining di più dimensioni e l'estrazione di segmenti interessanti. "Interessante" significa che ogni segmento ha una copertura significativa sia del set di record che del set di funzionalità. Anche i segmenti sono divergenti, vale a dire che ognuno è diverso dagli altri. Uno o più di questi segmenti potrebbero essere rilevanti per il processo RCA. Per ridurre al minimo la revisione e la valutazione dei segmenti, il cluster automatico estrae solo un elenco di segmenti di piccole dimensioni.
Usare basket() per il clustering di set di record singoli
È anche possibile usare il plug-in basket()
come illustrato nella query seguente:
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 | Conteggio | Percentuale | Paese | ScaleUnit | DeploymentId | Punto di traccia | Host servizio |
---|---|---|---|---|---|---|---|
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 | weu | su4 | be1d6d7ac9574cbc9a22cb8ee20f16fc | ||
10 | 92 | 9.46502057613169 | 10007007 | ||||
11 | 90 | 9.25925925925926 | 10007006 | ||||
12 | 57 | 5.8641975308642 | 00000000-0000-0000-0000-000000000000 |
Basket implementa l'algoritmo "Apriori" per il data mining del set di elementi. Estrae tutti i segmenti la cui copertura del set di record è superiore a una soglia (valore predefinito 5%). È possibile notare che più segmenti sono stati estratti con segmenti simili, ad esempio segmenti 0, 1 o 2, 3.
Entrambi i plug-in sono potenti e facili da usare. La limitazione è che raggruppano un singolo set di record in modo non supervisionato senza etichette. Non è chiaro se i modelli estratti caratterizzano il set di record selezionato, i record anomali o il set di record globale.
Clustering della differenza tra due set di record
Il plug-in diffpatterns()
supera la limitazione di autocluster
e basket
. Diffpatterns
accetta due set di record ed estrae i segmenti principali diversi. Un set contiene in genere il set di record anomalo da analizzare. Uno viene analizzato da autocluster
e basket
. L'altro set contiene il set di record di riferimento, la linea di base.
Nella query seguente vengono diffpatterns
trovati cluster interessanti entro i due minuti del picco, che sono diversi dai cluster all'interno della baseline. La finestra di base viene definita come l'otto minuti prima delle 15:00, all'avvio del picco. Si estende da una colonna binaria (AB) e si specifica se un record specifico appartiene alla linea di base o al set anomalo. Diffpatterns
implementa un algoritmo di apprendimento supervisionato, in cui le due etichette di classe sono state generate dall'anomalia rispetto al flag di base (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 | CountB | PercentA | PercentB | PercentDiffAB | Paese | ScaleUnit | DeploymentId | Punto di traccia |
---|---|---|---|---|---|---|---|---|---|
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 | weu | su4 | be1d6d7ac9574cbc9a22cb8ee20f16fc | |
6 | 57 | 204 | 5.86 | 16.56 | 10.69 |
Il segmento più dominante è lo stesso segmento estratto da autocluster
. Anche la copertura sulla finestra anomala di due minuti è pari al 65,74%. Tuttavia, la copertura nella finestra di base di otto minuti è solo del 1,7%. La differenza è del 64,04%. Questa differenza sembra essere correlata al picco anomalo. Per verificare questo presupposto, la query seguente suddivide il grafico originale nei record che appartengono a questo segmento problematico e i record degli altri segmenti.
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
Questo grafico ci consente di vedere che il picco del martedì pomeriggio era dovuto a eccezioni di questo segmento specifico, scoperto usando il plug-in diffpatterns
.
Riepilogo
I plug-in di Machine Learning sono utili per molti scenari. E autocluster
basket
implementano un algoritmo di apprendimento non supervisionato e sono facili da usare. Diffpatterns
implementa un algoritmo di apprendimento supervisionato e, sebbene più complesso, è più potente per estrarre segmenti di differenziazione per RCA.
Questi plug-in vengono usati in modo interattivo in scenari ad hoc e in servizi di monitoraggio quasi in tempo reale automatici. Il rilevamento anomalie delle serie temporali è seguito da un processo di diagnosi. Il processo è altamente ottimizzato per soddisfare gli standard di prestazioni necessari.
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per