Rilevamento intelligente - Anomalie degli errori
Application Insights avvisa automaticamente l'utente quasi in tempo reale se si verifica un incremento anomalo della frequenza di richieste non riuscite nell'app Web, rilevando un aumento insolito della percentuale di richieste HTTP o di chiamate alle dipendenze segnalate come non riuscite. Per quanto riguarda le richieste, quelle non riuscite hanno in genere un codice di risposta 400 o superiore. Per poter valutare e diagnosticare il problema, i dettagli della notifica includono un'analisi delle caratteristiche degli errori e i dati delle applicazioni correlati. Sono disponibili anche collegamenti al portale di Application Insights per un'ulteriore diagnosi. La funzionalità non necessita di alcuna installazione o configurazione, perché usa algoritmi di Machine Learning per stimare la normale frequenza degli errori.
Questa funzionalità funziona per qualsiasi app Web, ospitata nel cloud o nei propri server, che generano dati di richiesta o di dipendenza dell'applicazione. Se, ad esempio, si dispone di un ruolo di lavoro che chiama TrackRequest () o TrackDependency ().
Al termine della configurazione di Application Insights per il progetto, e se l'app genera una quantità minima di dati, la funzionalità Rilevamento intelligente di Anomalie errori impiega 24 ore per apprendere il comportamento normale dell'app prima di essere attivata e inviare avvisi.
Ecco un avviso di esempio:
Nota
Le Anomalie errori di Rilevamento intelligente vengono calcolate per le percentuali di errore sulle richieste totali in ogni istanza di Application Insights. Queste notifiche non genereranno avvisi per ogni API o applicazione che invia queste richieste. I dettagli dell'avviso indicano:
- La frequenza degli errori confrontata al comportamento normale dell’applicazione.
- Il numero di utenti interessati, per far comprendere la portata del problema.
- Un modello caratteristico associato agli errori. In questo esempio sono presenti un codice di risposta, un nome di richiesta (operazione) e una versione dell’applicazione specifici. che indica immediatamente in quale punto del codice cercare. In alternativa si può usare un browser o un sistema operativo client specifico.
- Eccezioni, tracce di log ed errori di dipendenza (database o altri componenti esterni) che sembrano associati ai particolari errori.
- Collegamenti diretti alle ricerche rilevanti nei dati in Application Insights.
Vantaggi del rilevamento intelligente
I normali avvisi relativi alla metrica indicano che potrebbe essersi verificato un problema. Tuttavia, la funzionalità di rilevamento intelligente avvia automaticamente i processi di diagnostica ed esegue la maggior parte dell'analisi che altrimenti l'utente dovrebbe eseguire manualmente. Si ottengono risultati ben strutturati che consentono individuare rapidamente le cause del problema.
Funzionamento
Il rilevamento intelligente monitora i dati ricevuti dall'app e, in particolare, le frequenze degli errori. Questa regola conta il numero di richieste per cui la proprietà Successful request
è false e il numero di chiamate alle dipendenze per cui la proprietà Successful call
è false. Per le richieste, per impostazione predefinita Successful request == (resultCode < 400)
, a meno che non sia stato scritto codice personalizzato per filtrare o generare chiamate TrackRequest personalizzate.
Le prestazioni dell'applicazione hanno un modello di comportamento tipico. Alcune richieste o chiamate alle dipendenze sono più soggette a errori rispetto ad altre e la percentuale di errori generale potrebbe aumentare proporzionalmente al carico. Il rilevamento intelligente si avvale del servizio Machine Learning per trovare queste anomalie.
Man mano che i dati vengono inviati dall'app Web ad Application Insights, la funzionalità di rilevamento intelligente confronta il comportamento corrente con i modelli rilevati negli ultimi giorni. Se il rilevatore individua un aumento anomalo della percentuale di errori rispetto alle prestazioni precedenti, il rilevatore attiva un'analisi più approfondita.
Quando l’analisi viene attivata, il servizio esegue un'analisi cluster della richiesta non riuscita per provare a identificare un modello dei valori che caratterizzano gli errori.
Nell'esempio precedente l'analisi ha rivelato che la maggior parte degli errori riguarda un codice risultato, un nome richiesta, un URL del server host e un’istanza del ruolo specifici.
Quando si instrumenta il servizio con queste chiamate, l'analizzatore cerca un'eccezione e un errore di dipendenza associati alle richieste nel cluster identificato. Cerca anche un esempio di qualsiasi log di traccia, associato a tali richieste. L'avviso ricevuto include queste informazioni aggiuntive che possono fornire contesto al rilevamento e suggerire la causa radice per il problema rilevato.
Dettagli della logica degli avvisi
Il rilevamento di Anomalie errori si basa su un algoritmo di apprendimento automatico proprietario, pertanto i motivi per cui un avviso viene attivato o meno non sono sempre deterministici. Detto questo, i fattori principali usati dall'algoritmo sono:
- Analisi della percentuale di errore delle richieste o delle dipendenze in una finestra temporale scorrevole di 20 minuti.
- Confronto tra la percentuale di errore negli ultimi 20 minuti, con la percentuale negli ultimi 40 minuti e negli ultimi sette giorni. L'algoritmo cerca deviazioni significative che superano di X volte la deviazione standard.
- L'algoritmo usa un limite adattivo per la percentuale di errore minima, che varia in base al volume di richieste/dipendenze dell'app.
- L'algoritmo include una logica che può risolvere automaticamente l'avviso generato, se il problema non viene più rilevato per 8-24 ore. Nota: nella progettazione corrente una notifica o un'azione non viene inviata quando viene risolto un avviso di Rilevamento intelligente. È possibile verificare se un avviso di Rilevamento intelligente è stato risolto nel portale di Azure.
Gestione delle regole di avviso di Anomalie errori
Creazione di regole di avviso
Una regola di avviso di Anomalie errori viene creata automaticamente quando viene creata la risorsa di Application Insights. La regola viene configurata automaticamente per analizzare i dati di telemetria su tale risorsa. È possibile creare di nuovo la regola usando API REST di Azure o un modello di Resource Manager. La creazione della regola può essere utile se la creazione automatica della regola non è riuscita per qualche motivo o se è stata eliminata la regola.
Configurazione della regola di avviso
Per configurare una regola di avviso di Anomalie errori nel portale, aprire la pagina Avvisi e selezionare Regole di avviso. Le regole di avviso di Anomalie errori sono incluse insieme agli avvisi impostati manualmente.
Fare clic sulla regola di avviso per configurarla.
È possibile disabilitare la regola di avviso di Rilevamento intelligente dal portale o usando un modello di Resource Manager.
Questa regola di avviso viene creata con un Gruppo di azioni associato denominato "Rilevamento intelligente di Application Insights". Per impostazione predefinita, questo gruppo di azioni contiene azioni del ruolo di Azure Resource Manager per la posta elettronica e invia notifiche agli utenti che hanno ruoli di tipo Collaboratore per il monitoraggio o Ruolo con autorizzazioni di lettura dei dati di monitoraggio di Azure Resource Manager nella sottoscrizione. È possibile rimuovere, modificare o aggiungere i gruppi di azioni attivati dalla regola, come per qualsiasi altra regola di avviso di Azure. Le notifiche inviate da questa regola di avviso seguono lo schema di avviso comune.
Eliminare gli avvisi
È possibile eliminare una regola di avviso di Anomalie errori.
È possibile farlo manualmente nella pagina Regole di avviso o con il comando dell'interfaccia della riga di comando di Azure seguente:
az resource delete --ids <Resource ID of Failure Anomalies alert rule>
Si noti che se si elimina una risorsa di Application Insights, la regola di avviso di Anomalie errori associata non viene eliminata automaticamente.
Esempio di payload del webhook degli avvisi di anomalie degli errori
{
"properties": {
"essentials": {
"severity": "Sev3",
"signalType": "Log",
"alertState": "New",
"monitorCondition": "Resolved",
"monitorService": "Smart Detector",
"targetResource": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/test-group/providers/microsoft.insights/components/test-rule",
"targetResourceName": "test-rule",
"targetResourceGroup": "test-group",
"targetResourceType": "microsoft.insights/components",
"sourceCreatedId": "1a0a5b6436a9b2a13377f5c89a3477855276f8208982e0f167697a2b45fcbb3e",
"alertRule": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/test-group/providers/microsoft.alertsmanagement/smartdetectoralertrules/failure anomalies - test-rule",
"startDateTime": "2019-10-30T17:52:32.5802978Z",
"lastModifiedDateTime": "2019-10-30T18:25:23.1072443Z",
"monitorConditionResolvedDateTime": "2019-10-30T18:25:26.4440603Z",
"lastModifiedUserName": "System",
"actionStatus": {
"isSuppressed": false
},
"description": "Failure Anomalies notifies you of an unusual rise in the rate of failed HTTP requests or dependency calls."
},
"context": {
"DetectionSummary": "An abnormal rise in failed request rate",
"FormattedOccurenceTime": "2019-10-30T17:50:00Z",
"DetectedFailureRate": "50.0% (200/400 requests)",
"NormalFailureRate": "0.0% (over the last 30 minutes)",
"FailureRateChart": [
[
"2019-10-30T05:20:00Z",
0
],
[
"2019-10-30T05:40:00Z",
100
],
[
"2019-10-30T06:00:00Z",
0
],
[
"2019-10-30T06:20:00Z",
0
],
[
"2019-10-30T06:40:00Z",
100
],
[
"2019-10-30T07:00:00Z",
0
],
[
"2019-10-30T07:20:00Z",
0
],
[
"2019-10-30T07:40:00Z",
100
],
[
"2019-10-30T08:00:00Z",
0
],
[
"2019-10-30T08:20:00Z",
0
],
[
"2019-10-30T08:40:00Z",
100
],
[
"2019-10-30T17:00:00Z",
0
],
[
"2019-10-30T17:20:00Z",
0
],
[
"2019-10-30T09:00:00Z",
0
],
[
"2019-10-30T09:20:00Z",
0
],
[
"2019-10-30T09:40:00Z",
100
],
[
"2019-10-30T10:00:00Z",
0
],
[
"2019-10-30T10:20:00Z",
0
],
[
"2019-10-30T10:40:00Z",
100
],
[
"2019-10-30T11:00:00Z",
0
],
[
"2019-10-30T11:20:00Z",
0
],
[
"2019-10-30T11:40:00Z",
100
],
[
"2019-10-30T12:00:00Z",
0
],
[
"2019-10-30T12:20:00Z",
0
],
[
"2019-10-30T12:40:00Z",
100
],
[
"2019-10-30T13:00:00Z",
0
],
[
"2019-10-30T13:20:00Z",
0
],
[
"2019-10-30T13:40:00Z",
100
],
[
"2019-10-30T14:00:00Z",
0
],
[
"2019-10-30T14:20:00Z",
0
],
[
"2019-10-30T14:40:00Z",
100
],
[
"2019-10-30T15:00:00Z",
0
],
[
"2019-10-30T15:20:00Z",
0
],
[
"2019-10-30T15:40:00Z",
100
],
[
"2019-10-30T16:00:00Z",
0
],
[
"2019-10-30T16:20:00Z",
0
],
[
"2019-10-30T16:40:00Z",
100
],
[
"2019-10-30T17:30:00Z",
50
]
],
"ArmSystemEventsRequest": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/test-group/providers/microsoft.insights/components/test-rule/query?query=%0d%0a++++++++++++++++systemEvents%0d%0a++++++++++++++++%7c+where+timestamp+%3e%3d+datetime(%272019-10-30T17%3a20%3a00.0000000Z%27)+%0d%0a++++++++++++++++%7c+where+itemType+%3d%3d+%27systemEvent%27+and+name+%3d%3d+%27ProactiveDetectionInsight%27+%0d%0a++++++++++++++++%7c+where+dimensions.InsightType+in+(%275%27%2c+%277%27)+%0d%0a++++++++++++++++%7c+where+dimensions.InsightDocumentId+%3d%3d+%27718fb0c3-425b-4185-be33-4311dfb4deeb%27+%0d%0a++++++++++++++++%7c+project+dimensions.InsightOneClassTable%2c+%0d%0a++++++++++++++++++++++++++dimensions.InsightExceptionCorrelationTable%2c+%0d%0a++++++++++++++++++++++++++dimensions.InsightDependencyCorrelationTable%2c+%0d%0a++++++++++++++++++++++++++dimensions.InsightRequestCorrelationTable%2c+%0d%0a++++++++++++++++++++++++++dimensions.InsightTraceCorrelationTable%0d%0a++++++++++++&api-version=2018-04-20",
"LinksTable": [
{
"Link": "<a href=\"https://portal.azure.com/#blade/AppInsightsExtension/ProactiveDetectionFeedBlade/ComponentId/{\"SubscriptionId\":\"aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e\",\"ResourceGroup\":\"test-group\",\"Name\":\"test-rule\"}/SelectedItemGroup/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/SelectedItemTime/2019-10-30T17:50:00Z/InsightType/5\" target=\"_blank\">View full details in Application Insights</a>"
}
],
"SmartDetectorId": "FailureAnomaliesDetector",
"SmartDetectorName": "Failure Anomalies",
"AnalysisTimestamp": "2019-10-30T17:52:32.5802978Z"
},
"egressConfig": {
"displayConfig": [
{
"rootJsonNode": null,
"sectionName": null,
"displayControls": [
{
"property": "DetectionSummary",
"displayName": "What was detected?",
"type": "Text",
"isOptional": false,
"isPropertySerialized": false
},
{
"property": "FormattedOccurenceTime",
"displayName": "When did this occur?",
"type": "Text",
"isOptional": false,
"isPropertySerialized": false
},
{
"property": "DetectedFailureRate",
"displayName": "Detected failure rate",
"type": "Text",
"isOptional": false,
"isPropertySerialized": false
},
{
"property": "NormalFailureRate",
"displayName": "Normal failure rate",
"type": "Text",
"isOptional": false,
"isPropertySerialized": false
},
{
"chartType": "Line",
"xAxisType": "Date",
"yAxisType": "Percentage",
"xAxisName": "",
"yAxisName": "",
"property": "FailureRateChart",
"displayName": "Failure rate over last 12 hours",
"type": "Chart",
"isOptional": false,
"isPropertySerialized": false
},
{
"defaultLoad": true,
"displayConfig": [
{
"rootJsonNode": null,
"sectionName": null,
"displayControls": [
{
"showHeader": false,
"columns": [
{
"property": "Name",
"displayName": "Name"
},
{
"property": "Value",
"displayName": "Value"
}
],
"property": "tables[0].rows[0][0]",
"displayName": "All of the failed requests had these characteristics:",
"type": "Table",
"isOptional": false,
"isPropertySerialized": true
}
]
}
],
"property": "ArmSystemEventsRequest",
"displayName": "",
"type": "ARMRequest",
"isOptional": false,
"isPropertySerialized": false
},
{
"showHeader": false,
"columns": [
{
"property": "Link",
"displayName": "Link"
}
],
"property": "LinksTable",
"displayName": "Links",
"type": "Table",
"isOptional": false,
"isPropertySerialized": false
}
]
}
]
}
},
"id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/test-group/providers/microsoft.insights/components/test-rule/providers/Microsoft.AlertsManagement/alerts/cccc2c2c-dd3d-ee4e-ff5f-aaaaaa6a6a6a",
"type": "Microsoft.AlertsManagement/alerts",
"name": "Failure Anomalies - test-rule"
}
Valutazione e diagnosi di un avviso
Un avviso indica che è stato rilevato un incremento anomalo nella frequenza delle richieste non riuscite. È probabile che si sia verificato un problema relativo all'app o al relativo ambiente.
Per approfondire le indagini, fare clic su "Visualizza i dettagli completi in Application Insights". I collegamenti in questa pagina consentono di accedere direttamente a una pagina di ricerca filtrata in base alle richieste, alle eccezioni, alle dipendenze o alle tracce pertinenti. Per approfondire l'analisi, fare clic su "Visualizza i dettagli completi in Application Insights". I collegamenti in questa pagina consentono di accedere direttamente a una pagina di ricerca filtrata in base alle richieste, alle eccezioni, alla dipendenza o alle tracce pertinenti.
È anche possibile aprire il portale di Azure, passare alla risorsa di Application Insights per l'app e aprire la pagina Errori.
Facendo clic su "Diagnostica errori", è possibile ottenere altri dettagli e risolvere il problema.
Dalla percentuale delle richieste e dal numero di utenti interessati è possibile decidere il livello di priorità del problema. Nell'esempio precedente si ha una percentuale di errori del 78,5% rispetto alla percentuale normale del 2,2% e ciò evidenzia sicuramente un'anomalia. D'altra parte, solo 46 utenti sono stati interessati. Queste informazioni consentono di valutare quanto sia grave il problema.
In molti casi è possibile diagnosticare rapidamente il problema in base al nome della richiesta, alle eccezioni, agli errori di dipendenza e ad altri dati di traccia forniti.
In questo esempio è stata generata un'eccezione dal database SQL a causa del raggiungimento del limite di richieste.
Esaminare gli avvisi recenti
Fare clic su Avvisi nella pagina delle risorse di Application Insights per ottenere gli avvisi generati più recentemente:
Se si riceve un avviso di rilevamento intelligente
Perché è stato ricevuto questo avviso?
- È stato rilevato un incremento anomalo delle richieste non riuscite rispetto al valore normale del periodo precedente. Dopo aver analizzato errori e dati delle applicazioni associati, si consiglia di esaminare più approfonditamente l'eventuale problema.
La notifica indica la sicura presenza di un problema?
- Gli avvisi vengono emessi in caso di interruzione dell'app o di riduzione delle prestazioni, ma solo l'utente può comprendere completamente la semantica e l'impatto del problema sull'app o gli utenti.
Si stanno esaminando i dati dell'applicazione?
- No. Il servizio è completamente automatico. L'utente riceve le notifiche, ma i dati restano privati.
Va eseguita una sottoscrizione a questo avviso?
- No. In ogni applicazione che invia dati della richiesta è presente la regola di avviso per il rilevamento intelligente.
È possibile annullare la sottoscrizione oppure ottenere le notifiche inviate ai colleghi?
- Sì. In Regole di avviso fare clic sulla regola per il rilevamento intelligente per configurarla. È possibile disabilitare l'avviso o modificare i destinatari dell'avviso.
Non trovo più il messaggio di posta elettronica. Dove trovo le notifiche nel portale?
- È possibile trovare gli avvisi di Anomalie errori nel portale di Azure nella pagina degli avvisi di Application Insights.
Alcuni avvisi segnalano problemi noti e non si vuole riceverli.
- È possibile usare la funzionalità di eliminazione delle regole di azione di avviso.
Passaggi successivi
Gli strumenti di diagnostica seguenti consentono di controllare i dati dall'app:
Gli avvisi di rilevamento intelligente sono automatici, tuttavia è possibile configurare avvisi aggiuntivi, se necessario.