Smart Detection – ungewöhnliche fehlgeschlagene Anforderungen

Application Insights warnt Sie automatisch und nahezu in Echtzeit, wenn es für Ihre Web-App zu einer ungewöhnlichen Häufung bei den fehlgeschlagenen Anforderungen kommt. Die Lösung erkennt eine ungewöhnliche Zunahme der Rate fehlerhafter HTTP-Anforderungen oder Abhängigkeitsaufrufen. Nicht erfolgreiche Anforderungen weisen normalerweise Antwortcodes im Bereich 400 oder höher auf. Um Sie bei der Selektierung und Diagnose des Problems zu unterstützen, wird in den Warnungsdetails eine Analyse der Merkmale der Fehler und der zugehörigen Anwendungsdaten angegeben. Außerdem werden Links zum Application Insights-Portal zur weiteren Diagnose bereitgestellt. Diese Funktion muss nicht eingerichtet oder konfiguriert werden, da sie Machine Learning-Algorithmen verwendet, um die normale Fehlerrate zu bestimmen.

Diese Funktion funktioniert für jede Webanwendung, die in der Cloud oder auf Ihren eigenen Servern gehostet wird und Anwendungsanfragen oder Abhängigkeitsdaten erzeugt. Es kann beispielsweise sein, dass Sie über eine Workerrolle verfügen, die TrackRequest() oder TrackDependency() aufruft.

Nachdem Sie Application Insights für Ihr Projekt eingerichtet haben und Ihre App eine bestimmte Mindestmenge von Daten generiert hat, benötigt Smart Detection of Failure Anomalies 24 Stunden, um das normale Verhalten Ihrer App zu lernen, bevor die Erkennung aktiviert wird und Warnungen senden kann.

Hier ist ein Beispiel für eine Warnung angegeben:

Beispiel für eine intelligente Erkennung mit Clusteranalyse im Umfeld des Fehlers

Die Warnungsdetails enthalten Folgendes:

  • Die Fehlerrate im Vergleich zum normalen App-Verhalten
  • Die Anzahl von betroffenen Benutzern, damit Sie direkt wissen, wie ernst die Lage ist.
  • Ein charakteristisches Muster für die Fehler. Dieses Beispiel enthält einen bestimmten Antwortcode, einen Anforderungsnamen (Vorgang) und eine Anwendungsversion. So wissen Sie sofort, wo im Code Sie suchen müssen. Weitere Möglichkeiten sind beispielsweise ein bestimmter Browser oder Clientbetriebssystem.
  • Die Ausnahme, Protokollablaufverfolgungen und Abhängigkeitsfehler (Datenbanken oder andere externe Komponenten), die den charakterisierten Fehlern zugeordnet zu sein scheinen.
  • Dies ist direkt mit relevanten Suchvorgängen in den Daten in Application Insights verknüpft.

Vorteile von Smart Detection

Normale Metrikwarnungen informieren Sie, dass möglicherweise ein Problem vorliegt. Per Smart Detection wird dagegen die Diagnose für Sie gestartet und ein großer Teil der Analyseschritte ausgeführt, die Sie ansonsten selbst ausführen müssten. Sie erhalten die Ergebnisse fein säuberlich verpackt und können so schnell zur Ursache des Problems vordringen.

Funktionsweise

Bei Smart Detection werden die von Ihrer App erhaltenen Daten und insbesondere die Fehlerraten überwacht. Diese Regel ermittelt die Anzahl von Anforderungen, bei denen die Successful request-Eigenschaft auf „false“ festgelegt ist, sowie die Anzahl von Abhängigkeitsaufrufen, bei denen die Successful call-Eigenschaft auf „false“ festgelegt ist. Für Anfragen, standardmäßig Successful request == (resultCode < 400)(es sei denn, Sie schreiben benutzerdefinierten Code, um Ihre eigenen TrackRequest-Aufrufe zu filtern oder zu generieren).

Die Leistung Ihrer App weist ein typisches Verhaltensmuster auf. Einige Anforderungen oder Abhängigkeitsaufrufe sind anfälliger für Fehler als andere, und die gesamte Fehlerrate kann mit zunehmender Auslastung steigen. Bei Smart Detection werden diese Anomalien mithilfe von maschinellem Lernen ermittelt.

Wenn Daten aus Ihrer Web-App in Application Insights eingehen, wird beim Smart Detection-Vorgang das aktuelle Verhalten mit den Mustern der letzten Tage verglichen. Wenn der Detektor einen ungewöhnlichen Anstieg der Fehlerrate vergleicht mit der vorherigen Leistung, löst der Detektor eine tiefergehende Analyse aus.

Wenn eine Analyse ausgelöst wird, führt der Dienst eine Clusteranalyse für die fehlgeschlagene Anforderung aus, um in den Werten ein Muster zu ermitteln, durch die sich die Fehler charakterisieren lassen.

In dem zuvor gezeigten Beispiel hat die Analyse ergeben, dass sich die meisten Fehler auf einen bestimmten Ergebniscode, Anforderungsnamen, Server-URL-Host und Rolleninstanz beziehen.

Wenn Sie Ihren Dienst mit diesen Aufrufen instrumentieren, sucht die Analyse nach einer Ausnahme und einem Abhängigkeitsfehler, die Anforderungen im identifizierten Cluster zugeordnet sind. Außerdem wird nach einem Beispiel für alle Ablaufverfolgungsprotokolle gesucht, die diesen Anforderungen zugeordnet sind. Die Warnung, die Sie erhalten, enthält diese zusätzlichen Informationen, die Kontext zur Erkennung und Hinweise auf die Ursache für das erkannte Problem bereitstellen können.

Details zur Warnungslogik

Die Erkennung von Fehleranomalien beruht auf einem proprietären Algorithmus für maschinelles Lernen, sodass die Gründe für das Auslösen oder Nichtauslösen einer Warnung nicht immer deterministisch sind. Mit diesem Beispiel sind die wichtigsten Faktoren, die der Algorithmus verwendet:

  • Analyse des Prozentsatzes an Fehlern bei Anforderungen bzw. Abhängigkeiten in einem gleitenden Zeitfenster von 20 Minuten.
  • Ein Vergleich des Fehlerprozentsatzes in den letzten 20 Minuten mit der Rate in den letzten 40 Minuten und den letzten sieben Tagen. Der Algorithmus sucht nach signifikanten Abweichungen, die das X-fache der Standardabweichung überschreiten.
  • Der Algorithmus verwendet einen adaptiven Grenzwert für den minimalen Fehlerprozentsatz, der je nach dem Volumen der Anfragen/Abhängigkeiten der App variiert.
  • Der Algorithmus enthält eine Logik, welche die ausgelöste Warnung automatisch beheben kann, wenn das Problem 8 bis 24 Stunden lang nicht mehr erkannt wird. Hinweis: Beim aktuellen Entwurf keine Benachrichtigung oder Aktion gesendet wird, wenn eine Smart Detection-Warnung behoben wird. Im Azure-Portal können Sie überprüfen, ob eine Smart Detection-Warnung aufgehoben wurde.

Verwalten von Warnungsregeln für Fehleranomalien

Erstellung von Warnungsregeln

Eine Warnungsregel für Fehleranomalien wird automatisch erstellt, wenn Ihre Application Insights-Ressource erstellt wird. Die Regel wird automatisch so konfiguriert, dass die Telemetrie für diese Ressource analysiert wird. Sie können die Regel erneut mithilfe der Azure REST-API oder mithilfe einer Resource Manager-Vorlage erstellen. Das Erstellen der Regel kann nützlich sein, wenn die automatische Erstellung der Regel aus irgendeinem Grund fehlgeschlagen ist oder wenn Sie die Regel gelöscht haben.

Konfiguration von Warnungsregeln

Um eine Warnungsregel für Fehleranomalien im Portal zu konfigurieren, öffnen Sie die Seite „Warnungen“ und wählen Sie „Warnungsregeln“ aus. Warnungsregeln für Fehleranomalien sind zusammen mit allen Warnungen enthalten, die Sie manuell festlegen.

Klicken Sie auf der Application Insights-Ressourcenseite auf die Kachel „Warnungen“ und dann auf „Warnungsregeln verwalten“.

Klicken Sie auf die Warnungsregel, um sie zu konfigurieren.

Bildschirm „Regelkonfiguration“.

Sie können die Smart Detection-Warnregel über das Portal oder über eine Azure Resource Manager-Vorlage deaktivieren.

Diese Warnungsregel wird mit einer zugeordneten Aktionsgruppe namens „Intelligente Erkennung von Application Insights“ erstellt. Standardmäßig enthält diese Aktionsgruppe Azure Resource Manager-Rollenaktionen per E-Mail und sendet Benachrichtigungen an Benutzer, die über Azure Resource Manager-Rollen des Monitoring Contributor- oder Monitoring Reader-Abonnements in Ihrem Abonnement verfügen. Sie können die Aktionsgruppen entfernen, ändern oder hinzufügen, die von der Regel ausgelöst werden, wie bei jeder anderen Azure-Warnungsregel. Von dieser Warnungsregel gesendete Benachrichtigungen basieren auf dem allgemeinen Warnungsschema.

Löschen von Warnungen

Sie können eine Warnungsregel für Fehleranomalien löschen.

Sie können diesen Schritt manuell auf der Seite „Warnungsregeln“ oder mit dem folgenden Azure CLI-Befehl ausführen:

az resource delete --ids <Resource ID of Failure Anomalies alert rule>

Beachten Sie Folgendes: Wenn Sie eine Application Insights-Ressource löschen, wird die zugeordnete Warnungsregel für Fehleranomalien nicht automatisch gelöscht.

Beispiel für Warnung „Fehleranomalien“: Beispiel für Webhooknutzlast

{
    "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"
}

Selektieren und Diagnostizieren einer Warnung

Eine Warnung gibt an, dass ein ungewöhnlicher Anstieg bei der Rate der Anforderungsfehler erkannt wurde. Wahrscheinlich liegt ein Problem mit Ihrer App oder deren Umgebung vor.

Um weitere Informationen zu untersuchen, klicken Sie auf „Vollständige Details in Application Insights anzeigen.“ Die Links auf dieser Seite führen Sie direkt zu einer Suchseite, die nach den relevanten Anforderungen, Ausnahmen, Abhängigkeiten oder Ablaufverfolgungen gefiltert ist. Klicken Sie zur weiteren Untersuchung auf die Option zum Anzeigen aller Details in Application Insights. Über die Links auf dieser Seite gelangen Sie direkt zu einer Suchseite, die nach den relevanten Anforderungen, Ausnahmen, Abhängigkeiten oder Ablaufverfolgungen gefiltert ist.

Sie können auch das Azure-Portal öffnen, zur Application Insights-Ressource für Ihre App wechseln und die Seite „Fehler“ öffnen.

Ein Klick auf „Fehler diagnostizieren“ kann Ihnen helfen, mehr Details zu erfahren und das Problem zu lösen.

Diagnosesuche.

Anhand des Prozentsatzes der Anforderungen und der Anzahl der betroffenen Benutzer können Sie entscheiden, wie dringend das Problem ist. In dem zuvor gezeigten Beispiel zeigt die Fehlerrate von 78,5 % im Vergleich zu einer normalen Rate von 2,2 %, dass etwas Schlimmes im Gange ist. Allerdings sind nur 46 Benutzer betroffen. Anhand dieser Informationen können Sie beurteilen, wie schwerwiegend das Problem ist.

In vielen Fällen können Sie das Problem anhand des Anforderungsnamens, der Ausnahme, des Abhängigkeitsfehlers und der bereitgestellten Überwachungsdaten schnell diagnostizieren.

In diesem Beispiel ist eine Ausnahme für die SQL-Datenbank aufgetreten, weil das Anforderungslimit erreicht wurde.

Details zu Anforderungen mit Fehlern.

Überprüfen aktueller Warnungen

Klicken Sie auf der Application Insights-Ressourcenseite auf Warnungen, um die zuletzt ausgelösten Warnungen anzuzeigen:

Zusammenfassung von Warnungen.

Wenn Sie eine Smart Detection-Warnung erhalten

Warum habe ich diese Warnung erhalten?

  • Im Vergleich zu den normalen Grundwerten des vorhergehenden Zeitraums wurde ein ungewöhnlicher Anstieg der Anforderungsfehlerrate festgestellt. Nach der Analyse der Fehler und der zugehörigen Anwendungsdaten ist davon auszugehen, dass ein Problem vorliegt, das Sie untersuchen sollten.

Bedeutet die Benachrichtigung, dass ich definitiv ein Problem habe?

  • Wir versuchen, bei Störungen oder Beeinträchtigungen der App eine Warnung zu senden, aber nur Sie können die Semantik oder die Auswirkungen auf die App oder Benutzer vollständig einschätzen.

Sie sehen sich also meine Anwendungsdaten an?

  • Nein. Der Dienst ist vollständig automatisch. Nur Sie erhalten die Benachrichtigungen. Ihre Daten sind privat.

Muss ich diese Benachrichtigung abonnieren?

  • Nein. Jede Anwendung, die Anforderungsdaten sendet, verfügt über die Smart Detection-Warnungsregel.

Kann ich das Abonnement abbestellen oder die Benachrichtigungen stattdessen an meine Kollegen senden lassen?

  • Ja, klicken Sie unter „Warnungsregeln“ auf die Regel für Smart Detection, um sie zu konfigurieren. Sie können die Warnung deaktivieren oder die Empfänger für die Warnung ändern.

Ich habe die E-Mail verloren. Wo finde ich die Benachrichtigungen im Portal?

  • Sie finden Benachrichtigungen über Fehleranomalien im Azure-Portal auf der Seite „Application Insights-Warnungen“.

Einige der Warnungen beziehen sich auf bekannte Probleme und ich möchte sie nicht erhalten.

  • Sie können das Feature zum Unterdrücken von Aktionsregeln verwenden.

Nächste Schritte

Mit den folgenden Diagnosetools können Sie die Daten Ihrer App untersuchen:

Intelligente Erkennungen laufen automatisch ab. Vielleicht möchten Sie aber weitere Warnungen einrichten?