Détection intelligente des anomalies de type échec

Application Insights vous alerte automatiquement en quasi temps réel si votre application web enregistre une hausse anormale du taux de requêtes ayant échoué. Il détecte une augmentation inhabituelle du nombre de demandes HTTP ou d’appels de dépendance signalés comme défaillants. Les requêtes ayant échoué ont généralement un code de réponse supérieur ou égal à 400. Pour vous aider à trier et diagnostiquer les causes du problème, les détails de l’alerte s’accompagnent d’une analyse des caractéristiques des échecs et des données d’application associées. Elle fournit également des liens vers le portail Application Insights pour un diagnostic plus poussé. La fonctionnalité ne requiert ni installation ni configuration, puisqu’elle utilise des algorithmes d’apprentissage automatique pour prédire le taux d’échec normal.

Cette fonctionnalité peut être utilisée pour toutes les applications web, hébergées dans le cloud ou sur vos propres serveurs, qui génèrent des données sur les requêtes ou les dépendances de l’application. C’est le cas, par exemple, si vous avez un rôle de worker qui appelle TrackRequest() ou TrackDependency().

Après voir configuré Application Insights pour votre projet, si votre application génère une certaine quantité minimale de données, un délai de 24 heures est nécessaire à la détection intelligente des anomalies de type échec pour apprendre le comportement normal de votre application, avant d’être activée et de pouvoir envoyer des alertes.

Voici un exemple d’alerte :

Exemple d’alerte de détection intelligente affichant l’analyse du cluster au moment de l’échec.

Les détails de l’alerte indiquent :

  • le taux d’échec par rapport au comportement normal de l’application ;
  • combien d’utilisateurs sont affectés : afin de savoir dans quelle mesure vous devez vous inquiéter ;
  • un modèle caractéristique associé aux échecs. Cet exemple contient un code de réponse, un nom de requête (opération) et une version d’application spécifiques. Ces informations vous indiquent immédiatement où commencer la recherche dans votre code. Les autres possibilités peuvent être un type de navigateur ou un système d’exploitation client spécifique ;
  • l’exception, le suivi des journaux et l’échec de dépendance (bases de données ou autres composants externes) qui semblent associés à des défaillances identifiées ;
  • les liens directs aux recherches pertinentes sur les données dans Application Insights.

Avantages de la détection intelligente

Les alertes de mesure ordinaires vous indiquent un problème potentiel. Mais la détection intelligente démarre le travail de diagnostic automatiquement et effectue la majeure partie de l’analyse à votre place. Vous obtenez les résultats clairement empaquetés, ce qui vous permet d’accéder rapidement à l’origine du problème.

Fonctionnement

La détection intelligente analyse les données reçues de votre application, en particulier le taux d’échecs. Cette règle compte le nombre de demandes dont la propriété Successful request a la valeur false, et le nombre d’appels de dépendance dont la propriété Successful call a la valeur false. Pour les requêtes, par défaut, Successful request == (resultCode < 400) (sauf si vous écrivez du code personnalisé dans filtre ou générez vos propres appels TrackRequest).

Les performances de votre application présentent un modèle de comportement typique. Certaines demandes ou certains appels de dépendance sont davantage sujets aux erreurs que d’autres ; et le taux d’échec global peut augmenter en même temps que la charge. La détection intelligente utilise Machine Learning pour rechercher ces anomalies.

À mesure qu’Application Insights reçoit les données de votre application web, la détection intelligente compare le comportement actuel avec les modèles observés au cours des derniers jours. Si le détecteur découvre une augmentation anormale du taux d’échec par rapport aux performances précédentes, le détecteur déclenche une analyse plus approfondie.

Quand une analyse est déclenchée, le service effectue une analyse des clusters pour chaque demande ayant échoué, dans le but d’identifier un modèle de valeurs caractérisant les échecs.

Dans l’exemple présenté précédemment, l’analyse a découvert que la plupart des échecs concernent un code de résultat spécifique, un nom de requête, un hôte d’URL de serveur et une instance de rôle.

Lorsque vous instrumentez votre service avec ces appels, l’analyseur recherche une exception et un échec de dépendance associé aux requêtes dans le cluster identifié. Il recherche également un exemple de journaux de suivi, associés à ces demandes. L’alerte que vous recevez inclut ces informations supplémentaires qui peuvent fournir un contexte à la détection et à l’indicateur sur la cause racine du problème détecté.

Détails de la logique d’alerte

La détection des anomalies d’échec s’appuie sur un algorithme Machine Learning propriétaire. Par conséquent, les raisons d’un déclenchement d’alerte ou de non-déclenchement ne sont pas toujours déterministes. Cela dit, les principaux facteurs que l’algorithme utilise sont les suivants :

  • Analyse du pourcentage d’échec des demandes/dépendances dans une fenêtre de temps évolutive de 20 minutes.
  • Comparaison du pourcentage d’échecs au cours des 20 dernières minutes, au taux au cours des 40 dernières minutes et des sept derniers jours. L'algorithme recherche des écarts significatifs qui dépassent X fois l'écart-type.
  • L’algorithme utilise une limite adaptative pour le pourcentage minimal d’échecs, qui varie en fonction du volume de requêtes/dépendances de l’application.
  • L’algorithme inclut une logique qui peut résoudre automatiquement l’alerte déclenchée, si le problème n’est plus détecté pendant 8 à 24 heures. Remarque : Dans la conception actuelle, Une notification ou une action n’est pas envoyée lorsqu’une alerte de détection intelligente est résolue. Vous pouvez vérifier si une alerte de détection intelligente a été résolue dans le portail Azure.

Gestion des règles d’alerte des anomalies d’échec

Création d’une règle d’alerte

Une règle d’alerte d’anomalies d’échec est créée automatiquement lorsque votre ressource Application Insights est créée. La règle est automatiquement configurée pour analyser les données de télémétrie sur cette ressource. Vous pouvez à nouveau créer la règle à l’aide d’API REST Azure ou à l’aide d’un modèle Resource Manager. La création de la règle peut être utile si la création automatique de la règle a échoué pour une raison quelconque ou si vous avez supprimé la règle.

Configuration d’une règle d’alerte

Pour configurer une règle d’alerte d’anomalies d’échec dans le portail, ouvrez la page Alertes et sélectionnez Règles d’alerte. Les règles d’alerte Anomalies de défaillance sont incluses avec toutes les alertes que vous définissez manuellement.

Dans la page de la ressource Application Insights, cliquez sur la vignette « Alertes », puis sur « Gérer les règles d’alerte ».

Cliquez sur la règle d’alerte pour la configurer.

Écran de configuration des règles.

Vous pouvez désactiver la règle d’alerte détection intelligente à partir du portail ou à l’aide d’un modèle Azure Resource Manager.

Cette règle d’alerte est créée avec un groupe d’actions associé nommé « Détection intelligente Application Insights » Par défaut, ce groupe d’actions contient des actions de rôle Azure Resource Manager par e-mail et envoie des notifications aux utilisateurs qui ont des rôles Contributeur de supervision ou Lecteur de supervision dans votre abonnement Azure Resource Manager. Vous pouvez supprimer, modifier ou ajouter les groupes d’actions déclenchés par la règle, comme pour toute autre règle d’alerte Azure. Les notifications envoyées de cette règle d’alerte suivent le schéma d’alerte courant.

Supprimer des alertes

Vous pouvez supprimer une règle d’alerte d’anomalies d’échec.

Vous pouvez le faire manuellement dans la page Règles d’alerte ou avec la commande Azure CLI suivante :

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

Notez que si vous supprimez une ressource Application Insights, la règle d’alerte Anomalies des échecs associée n’est pas supprimée automatiquement.

Exemple de charge utile webhook des alertes Anomalies des échecs

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

Triage et diagnostic d’une alerte

Une alerte indique qu’une augmentation anormale du taux de demandes ayant échoué a été détectée. Il est probable que votre application ou son environnement rencontre un problème.

Pour examiner plus en détail, cliquez sur « Afficher les détails complets dans Application Insights » Les liens de cette page vous permettent d’accéder directement à une page de recherche filtrée sur les requêtes, exceptions, dépendances ou traces pertinentes. Pour approfondir vos recherches, cliquez sur les liens « Afficher les détails complets dans Application Insights » dans cette page pour accéder directement à une page de recherche filtrée sur les requêtes, l’exception, la dépendance ou les rapports des appels de procédure pertinents.

Vous pouvez également ouvrir le portail Azure, accéder à la ressource Application Insights pour votre application et ouvrir la page Échecs.

Cliquer sur « Diagnostiquer les échecs » peut vous aider à obtenir plus de détails et à résoudre le problème.

Recherche de diagnostic.

D’après le pourcentage de requêtes et le nombre d’utilisateurs touchés, vous pouvez évaluer l’urgence du problème. Dans l’exemple présenté précédemment, le taux d’échec de 78,5 % compare avec un taux normal de 2,2 %, indique que quelque chose de mauvais se passe. En revanche, seuls 46 utilisateurs ont été impactés. Ces informations peuvent vous aider à évaluer la gravité du problème.

Dans de nombreux cas, vous pouvez diagnostiquer rapidement le problème à partir du nom de la demande, de l’exception, de l’échec de dépendance et des données de trace fournies.

Dans cet exemple, une exception est survenue dans SQL Database à cause du dépassement de la limite de requêtes.

Détails des requêtes ayant échoué.

Consulter les alertes récentes

Cliquez sur Alertes dans la page de ressources Application Insights pour accéder aux alertes déclenchées les plus récentes :

Résumé des alertes.

Si vous recevez une alerte de la détection intelligente

Pourquoi j’ai reçu cette alerte ?

  • Nous avons détecté une augmentation anormale du taux de demandes ayant échoué par rapport au taux de référence de la période précédente. Après analyse des échecs et des données d’application associées, nous pensons qu’il existe un problème que vous devez examiner.

La notification signifie-t-elle obligatoirement que mon application rencontre un problème ?

  • Nous essayons de vous alerter sur l’interruption ou la dégradation de l’application, mais vous êtes la seule personne habilitée à comprendre pleinement la sémantique et l’impact sur l’application ou les utilisateurs.

Alors, vous examinez les données de mon application ?

  • Nombre Le service est entièrement automatique. Vous seul obtenez ces notifications. Vos données sont privées.

Dois-je m’abonner à cette alerte ?

  • Non. Chaque application qui envoie des données de requête inclut la règle d’alerte de la détection intelligente.

Puis-je me désabonner ou obtenir des notifications envoyées à mes collègues ?

  • Oui. Dans les règles d’alerte, cliquez sur la règle de la détection intelligente pour la configurer. Vous pouvez désactiver cette alerte, ou modifier les destinataires de l’alerte.

J’ai perdu le courrier électronique Où puis-je trouver les notifications dans le portail ?

  • Vous trouverez des alertes d’anomalies d’échec dans le portail Azure, dans votre page d’alertes Application Insights.

Certaines alertes concernent les problèmes connus et je ne veux pas les recevoir.

Étapes suivantes

Ces outils de diagnostic vous aident à inspecter les données reçues de votre application :

Les détections intelligentes sont automatiques. Mais vous souhaitez peut-être configurer des alertes supplémentaires ?