Anomaliediagnose voor analyse van hoofdoorzaak
Kusto-querytaal (KQL) heeft ingebouwde functies voor anomaliedetectie en -voorspelling om te controleren op afwijkend gedrag. Zodra een dergelijk patroon is gedetecteerd, kan een hoofdoorzaakanalyse (RCA) worden uitgevoerd om de anomalie te verhelpen of op te lossen.
Het diagnoseproces is complex en lang en wordt uitgevoerd door domeinexperts. Het proces omvat:
- Meer gegevens uit verschillende bronnen ophalen en samenvoegen voor hetzelfde tijdsbestek
- Zoeken naar wijzigingen in de verdeling van waarden op meerdere dimensies
- Meer variabelen in kaart brengen
- Andere technieken gebaseerd op domeinkennis en intuïtie
Omdat deze diagnosescenario's gebruikelijk zijn, zijn er machine learning-invoegtoepassingen beschikbaar om de diagnosefase gemakkelijker te maken en de duur van de RCA te verkorten.
Alle drie de volgende Machine Learning-invoegtoepassingen implementeren clusteralgoritmen: autocluster
, basket
en diffpatterns
. De autocluster
invoegtoepassingen en basket
clusteren één recordset en de diffpatterns
invoegtoepassing clustert de verschillen tussen twee recordsets.
Eén recordset clusteren
Een veelvoorkomend scenario omvat een gegevensset die is geselecteerd op basis van specifieke criteria, zoals:
- Tijdvenster met afwijkend gedrag
- Apparaatwaarden bij hoge temperatuur
- Opdrachten voor lange duur
- Beste bestedingsgebruikers U wilt een snelle en eenvoudige manier om algemene patronen (segmenten) in de gegevens te vinden. Patronen zijn een subset van de gegevensset waarvan de records dezelfde waarden delen over meerdere dimensies (categorische kolommen).
De volgende query bouwt en toont een tijdreeks van service-uitzonderingen gedurende de periode van een week, in opslaglocaties van tien minuten:
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")
Het aantal serviceuitzonderingen correleert met het totale serviceverkeer. U kunt het dagelijkse patroon voor werkdagen, maandag tot en met vrijdag, duidelijk zien. Er is een toename van het aantal serviceuitzonderingen halverwege de dag en een daling in aantallen tijdens de nacht. Vlakke lage aantallen zijn zichtbaar in het weekend. Uitzonderingspieken kunnen worden gedetecteerd met behulp van anomaliedetectie van tijdreeksen.
De tweede piek in de gegevens vindt plaats op dinsdagmiddag. De volgende query wordt gebruikt om verder te diagnosticeren en te controleren of het een scherpe piek is. De query hertekent de grafiek rond de piek in een hogere resolutie van acht uur in bins van één minuut. Vervolgens kunt u de randen ervan bestuderen.
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")
U ziet een smalle piek van twee minuten van 15:00 tot 15:02. Tel in de volgende query de uitzonderingen in dit venster van twee minuten:
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
Count |
---|
972 |
In de volgende query ziet u een voorbeeld van 20 uitzonderingen van 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 | Tracepoint | 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() gebruiken voor clustering van één recordset
Hoewel er minder dan duizend uitzonderingen zijn, is het nog steeds moeilijk om gemeenschappelijke segmenten te vinden, omdat elke kolom meerdere waarden bevat. U kunt de autocluster()
invoegtoepassing gebruiken om direct een korte lijst met algemene segmenten te extraheren en de interessante clusters binnen de twee minuten van de piek te vinden, zoals te zien is in de volgende query:
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 | Count | Percentage | Region | ScaleUnit | DeploymentId | ServiceHost |
---|---|---|---|---|---|---|
0 | 639 | 65.7407407407407 | eau | su7 | b5d1d4df547d4a04ac15885617edba57 | e7f60c5d-4944-42b3-9222a-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 |
U kunt uit de bovenstaande resultaten zien dat het meest dominante segment 65,74% van de totale uitzonderingsrecords bevat en vier dimensies deelt. Het volgende segment komt veel minder vaak voor. Het bevat slechts 9,67% van de records en deelt drie dimensies. De andere segmenten komen nog minder vaak voor.
Autocluster maakt gebruik van een eigen algoritme voor het analyseren van meerdere dimensies en het extraheren van interessante segmenten. 'Interessant' betekent dat elk segment een aanzienlijke dekking heeft van zowel de recordset als de functieset. De segmenten zijn ook verschillend, wat betekent dat elk segment verschilt van de andere. Een of meer van deze segmenten zijn mogelijk relevant voor het RCA-proces. Als u segmentcontrole en -evaluatie wilt minimaliseren, extraheert autocluster alleen een kleine segmentlijst.
Basket() gebruiken voor clustering met één recordset
U kunt ook de basket()
invoegtoepassing gebruiken zoals te zien is in de volgende query:
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 | Count | Percentage | Region | ScaleUnit | DeploymentId | Traceringspunt | 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 | Weu | su4 | be1d6d7ac9574cbc9a22cb8ee20f16fc | ||
10 | 92 | 9.46502057613169 | 10007007 | ||||
11 | 90 | 9.25925925925926 | 10007006 | ||||
12 | 57 | 5.8641975308642 | 00000000-0000-0000-0000-000000000000 |
Basket implementeert het algoritme 'Apriori' voor het analyseren van itemssets. Het extraheert alle segmenten waarvan de dekking van de recordset boven een drempelwaarde ligt (standaard 5%). U kunt zien dat er meer segmenten zijn geëxtraheerd met vergelijkbare segmenten, zoals segmenten 0, 1 of 2, 3.
Beide plug-ins zijn krachtig en gemakkelijk te gebruiken. Hun beperking is dat ze één recordset zonder supervisie clusteren zonder labels. Het is onduidelijk of de geëxtraheerde patronen de geselecteerde recordset, afwijkende records of de globale recordset karakteriseren.
Het verschil tussen twee recordsets clusteren
De diffpatterns()
invoegtoepassing overwint de beperking van autocluster
en basket
. Diffpatterns
neemt twee recordsets en extraheert de belangrijkste segmenten die verschillend zijn. Eén set bevat meestal de afwijkende recordset die wordt onderzocht. De ene wordt geanalyseerd door autocluster
en basket
. De andere set bevat de referentierecordset, de basislijn.
In de volgende query diffpatterns
vindt u interessante clusters binnen de twee minuten van de piek, die afwijken van de clusters binnen de basislijn. Het basislijnvenster wordt gedefinieerd als de acht minuten vóór 15:00 uur, toen de piek begon. U breidt uit met een binaire kolom (AB) en geeft op of een specifieke record tot de basislijn of tot de afwijkende set behoort. Diffpatterns
implementeert een algoritme voor leren onder supervisie, waarbij de twee klasselabels zijn gegenereerd door de afwijkende versus de basislijnvlag (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 | Aantal B | ProcentA | Percentage B | PercentDiffAB | Region | ScaleUnit | DeploymentId | Traceringspunt |
---|---|---|---|---|---|---|---|---|---|
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 |
Het meest dominante segment is hetzelfde segment dat is geëxtraheerd door autocluster
. De dekking in het afwijkende venster van twee minuten is ook 65,74%. De dekking op het basislijnvenster van acht minuten is echter slechts 1,7%. Het verschil is 64,04%. Dit verschil lijkt te zijn gerelateerd aan de afwijkende piek. Om deze veronderstelling te controleren, splitst de volgende query de oorspronkelijke grafiek in de records die tot dit problematische segment behoren en records uit de andere 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
In deze grafiek kunnen we zien dat de piek op dinsdagmiddag werd veroorzaakt door uitzonderingen in dit specifieke segment, gedetecteerd met behulp van de diffpatterns
invoegtoepassing.
Samenvatting
De invoegtoepassingen voor Machine Learning zijn handig voor veel scenario's. De autocluster
en basket
implementeren een leeralgoritmen zonder supervisie en zijn eenvoudig te gebruiken. Diffpatterns
implementeert een algoritme voor leren onder supervisie en, hoewel complexer, is het krachtiger voor het extraheren van differentiatiesegmenten voor RCA.
Deze invoegtoepassingen worden interactief gebruikt in ad-hoc scenario's en in automatische bijna realtime bewakingsservices. Anomaliedetectie van tijdreeksen wordt gevolgd door een diagnoseproces. Het proces is sterk geoptimaliseerd om te voldoen aan de vereiste prestatiestandaarden.
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub-problemen geleidelijk uitfaseren als het feedbackmechanisme voor inhoud en deze vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor