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 dipendenza dell'applicazione. Se, ad esempio, si dispone di un ruolo di lavoro che chiama TrackRequest () o TrackDependency ().

Dopo aver configurato Application Insights per il progetto e se l'app genera una certa quantità minima di dati, il rilevamento intelligente delle anomalie degli errori richiede 24 ore per apprendere il comportamento normale dell'app, prima che venga attivato e possa inviare avvisi.

Ecco un avviso di esempio:

Avviso di rilevamento intelligente di esempio che mostra l'analisi del cluster in caso di errore.

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 si scriva codice personalizzato per filtrare o generare chiamate TrackRequest personalizzate).

Le prestazioni dell'applicazione hanno un modello di comportamento tipico. Alcune richieste o chiamate di dipendenza sono più soggette a errori rispetto ad altre; e il tasso di errore complessivo può aumentare man mano che aumenta il 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 rileva un aumento anomalo del tasso di errore 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 illustrato in precedenza, l'analisi ha rilevato che la maggior parte degli errori riguarda un codice di risultato specifico, il nome della richiesta, l'host URL del server e l'istanza del ruolo.

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 all'hint sulla causa radice per il problema rilevato.

Dettagli della logica degli avvisi

Il rilevamento anomalie degli errori si basa su un algoritmo di Machine Learning 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 frequenza negli ultimi 40 minuti e negli ultimi sette giorni. L'algoritmo cerca deviazioni significative che superano le X volte della deviazione standard.
  • L'algoritmo usa un limite adattivo per la percentuale minima di errore, che varia in base al volume di richieste/dipendenze dell'app.
  • L'algoritmo include la logica in grado di risolvere automaticamente l'avviso attivato, se il problema non viene più rilevato per 8-24 ore. Nota: nella struttura 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 anomalie degli errori

Creazione di regole di avviso

Una regola di avviso 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 l'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 Anomalie errori nel portale, aprire la pagina Avvisi e selezionare Regole di avviso. Le regole di avviso anomalie degli errori sono incluse insieme agli avvisi impostati manualmente.

Nella pagina della risorsa di Application Insights fare clic sul riquadro Avvisi e quindi su Gestisci regole di avviso.

Fare clic sulla regola di avviso per configurarla.

Schermata di configurazione delle regole.

È possibile disabilitare la regola di avviso rilevamento intelligente dal portale o usando un modello di Azure 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 Gestione risorse di Posta elettronica di Azure e invia notifiche agli utenti che dispongono di ruoli Collaboratore monitoraggio o Sottoscrizione con autorizzazioni di lettura per il 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 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 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/4f9b81be-fa32-4f96-aeb3-fc5c3f678df9/resourcegroups/test-group/providers/microsoft.insights/components/test-rule",
            "targetResourceName": "test-rule",
            "targetResourceGroup": "test-group",
            "targetResourceType": "microsoft.insights/components",
            "sourceCreatedId": "1a0a5b6436a9b2a13377f5c89a3477855276f8208982e0f167697a2b45fcbb3e",
            "alertRule": "/subscriptions/4f9b81be-fa32-4f96-aeb3-fc5c3f678df9/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/4f9b81be-fa32-4f96-aeb3-fc5c3f678df9/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\":\"4f9b81be-fa32-4f96-aeb3-fc5c3f678df9\",\"ResourceGroup\":\"test-group\",\"Name\":\"test-rule\"}/SelectedItemGroup/718fb0c3-425b-4185-be33-4311dfb4deeb/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/4f9b81be-fa32-4f96-aeb3-fc5c3f678df9/resourcegroups/test-group/providers/microsoft.insights/components/test-rule/providers/Microsoft.AlertsManagement/alerts/7daf8739-ca8a-4562-b69a-ff28db4ba0a5",
    "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 verifichi un problema con l'app o il relativo ambiente.

Per approfondire le indagini, fare clic su "Visualizzare 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 le indagini, fare clic su "Visualizza 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.

È 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.

Ricerca diagnostica.

Dalla percentuale delle richieste e dal numero di utenti interessati è possibile decidere il livello di priorità del problema. Nell'esempio illustrato in precedenza, il tasso di errore del 78,5% viene confrontato con un tasso normale pari a 2,2%, indica che si sta verificando qualcosa di negativo. 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 dal nome della richiesta, dall'eccezione, dall'errore di dipendenza e dai dati di traccia forniti.

In questo esempio si è verificato un'eccezione da database SQL a causa del raggiungimento del limite di richieste.

Dettagli della richiesta non riuscita.

Esaminare gli avvisi recenti

Fare clic su Avvisi nella pagina delle risorse di Application Insights per ottenere gli avvisi generati più recentemente:

Riepilogo degli avvisi.

Se si riceve un avviso di rilevamento intelligente

Perché ho ricevuto questo avviso?

  • È stato rilevato un incremento anomalo delle richieste non riuscite rispetto al valore normale del periodo precedente. Dopo l'analisi degli errori e dei dati dell'applicazione associati, si ritiene che si verifichi un problema da esaminare.

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.

Quindi, 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 anomalie degli errori nella pagina degli avvisi di Application Insights nella portale di Azure.

Alcuni avvisi sono relativi a problemi noti e non voglio riceverli.

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.