Deteção inteligente - anomalias de falha

O Application Insights alerta automaticamente em tempo quase real se seu aplicativo Web tiver um aumento anormal na taxa de solicitações com falha. Ele deteta um aumento incomum na taxa de solicitações HTTP ou chamadas de dependência que são relatadas como falhas. Para solicitações, as solicitações com falha geralmente têm códigos de resposta de 400 ou superiores. Para ajudá-lo a triar e diagnosticar o problema, uma análise das características das falhas e dos dados do aplicativo relacionados é fornecida nos detalhes do alerta. Há também links para o portal do Application Insights para diagnósticos adicionais. O recurso não precisa de configuração nem configuração, pois usa algoritmos de aprendizado de máquina para prever a taxa de falha normal.

Esse recurso funciona para qualquer aplicativo Web, hospedado na nuvem ou em seus próprios servidores que geram dados de solicitação ou dependência de aplicativos. Por exemplo, se você tiver uma função de trabalho que chame TrackRequest() ou TrackDependency().

Depois de configurar o Application Insights para o seu projeto, e se a sua aplicação gerar uma determinada quantidade mínima de dados, a Deteção Inteligente de Anomalias de Falhas demora 24 horas a aprender o comportamento normal da sua aplicação, antes de ser ativada e poder enviar alertas.

Aqui está um exemplo de alerta:

Exemplo de alerta de deteção inteligente mostrando análise de cluster em caso de falha.

Os detalhes do alerta dizem-lhe:

  • A taxa de falha em comparação com o comportamento normal do aplicativo.
  • Quantos usuários são afetados - para que você saiba o quanto se preocupar.
  • Um padrão característico associado às falhas. Neste exemplo, há um código de resposta específico, nome da solicitação (operação) e versão do aplicativo. Isso imediatamente informa por onde começar a procurar em seu código. Outras possibilidades podem ser um navegador específico ou sistema operacional cliente.
  • A exceção, rastreamentos de log e falha de dependência (bancos de dados ou outros componentes externos) que parecem estar associados às falhas caracterizadas.
  • Links diretamente para pesquisas relevantes sobre os dados no Application Insights.

Benefícios da deteção inteligente

Alertas métricos comuns informam que pode haver um problema. Mas o Smart Detection inicia o trabalho de diagnóstico para você, realizando muito a análise que você teria que fazer sozinho. Você obtém os resultados bem embalados, ajudando-o a chegar rapidamente à raiz do problema.

Como funciona

A Deteção Inteligente monitoriza os dados recebidos da sua aplicação e, em particular, as taxas de falha. Esta regra conta o número de solicitações para as quais a Successful request propriedade é falsa e o número de chamadas de dependência para as quais a Successful call propriedade é falsa. Para solicitações, por padrão, Successful request == (resultCode < 400) (a menos que você escreva código personalizado para filtrar ou gerar suas próprias chamadas TrackRequest ).

O desempenho do seu aplicativo tem um padrão típico de comportamento. Algumas solicitações ou chamadas de dependência são mais propensas a falhas do que outras; e a taxa geral de falhas pode aumentar à medida que a carga aumenta. A Deteção Inteligente usa aprendizado de máquina para encontrar essas anomalias.

À medida que os dados entram no Application Insights a partir do seu aplicativo Web, o Smart Detection compara o comportamento atual com os padrões vistos nos últimos dias. Se o detetor detetar um aumento anormal na taxa de falha em comparação com o desempenho anterior, o detetor desencadeará uma análise mais aprofundada.

Quando uma análise é acionada, o serviço executa uma análise de cluster na solicitação com falha, para tentar identificar um padrão de valores que caracterize as falhas.

No exemplo mostrado anteriormente, a análise descobriu que a maioria das falhas diz respeito a um código de resultado específico, nome da solicitação, host de URL do servidor e instância de função.

Quando você instrumenta seu serviço com essas chamadas, o analisador procura uma exceção e uma falha de dependência associadas a solicitações no cluster identificado. Ele também procura um exemplo de quaisquer logs de rastreamento, associados a essas solicitações. O alerta recebido inclui essas informações adicionais que podem fornecer contexto para a deteção e dicas sobre a causa raiz do problema detetado.

Detalhes da lógica de alerta

Falha A deteção de anomalias depende de um algoritmo proprietário de aprendizado de máquina, portanto, as razões para um alerta disparar ou não disparar nem sempre são determinísticas. Dito isso, os principais fatores que o algoritmo usa são:

  • Análise da percentagem de falhas de pedidos/dependências numa janela de tempo contínuo de 20 minutos.
  • Uma comparação da percentagem de falha nos últimos 20 minutos, com a taxa nos últimos 40 minutos e nos últimos sete dias. O algoritmo está à procura de desvios significativos que excedam X-vezes do desvio padrão.
  • O algoritmo está usando um limite adaptável para a porcentagem mínima de falha, que varia com base no volume de solicitações/dependências do aplicativo.
  • O algoritmo inclui lógica que pode resolver automaticamente o alerta disparado, se o problema não for mais detetado por 8-24 horas. Nota: no desenho atual. uma notificação ou ação não é enviada quando um alerta de Deteção Inteligente é resolvido. Você pode verificar se um alerta de Deteção Inteligente foi resolvido no portal do Azure.

Gerenciando regras de alerta de anomalias de falha

Criação de regras de alerta

Uma regra de alerta de Anomalias de Falha é criada automaticamente quando o recurso do Application Insights é criado. A regra é configurada automaticamente para analisar a telemetria nesse recurso. Você pode criar a regra novamente usando a API REST do Azure ou usando um modelo do Gerenciador de Recursos. A criação da regra pode ser útil se a criação automática da regra falhar por algum motivo ou se você excluir a regra.

Configuração de regras de alerta

Para configurar uma regra de alerta de Anomalias de Falha no portal, abra a página Alertas e selecione Regras de Alerta. As regras de alerta de anomalias de falha são incluídas juntamente com quaisquer alertas definidos manualmente.

Na página de recursos do Application Insights, clique no bloco Alertas e em Gerenciar regras de alerta.

Clique na regra de alerta para configurá-la.

Tela de configuração da regra.

Você pode desabilitar a regra de alerta de Deteção Inteligente no portal ou usando um modelo do Azure Resource Manager.

Esta regra de alerta é criada com um Grupo de Ação associado chamado "Deteção inteligente do Application Insights". Por padrão, esse grupo de ações contém ações de Função do Gerenciador de Recursos do Azure de Email e envia notificações aos usuários que têm funções de Colaborador de Monitoramento ou Leitor de Monitoramento do Gerenciador de Recursos do Azure em sua assinatura. Você pode remover, alterar ou adicionar os grupos de ações acionados pela regra, como para qualquer outra regra de alerta do Azure. As notificações enviadas a partir desta regra de alerta seguem o esquema de alerta comum.

Excluir alertas

Você pode excluir uma regra de alerta de Anomalias de Falha.

Você pode fazer isso manualmente na página Regras de alerta ou com o seguinte comando da CLI do Azure:

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

Observe que, se você excluir um recurso do Application Insights, a regra de alerta de Anomalias de Falha associada não será excluída automaticamente.

Exemplo de carga útil webhook de alerta de anomalias de falha

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

Triagem e diagnóstico de um alerta

Um alerta indica que foi detetado um aumento anormal na taxa de pedidos falhados. É provável que haja algum problema com seu aplicativo ou seu ambiente.

Para investigar mais, clique em 'Ver detalhes completos no Application Insights'. Os links nesta página levam você diretamente a uma página de pesquisa filtrada para as solicitações, exceções, dependências ou rastreamentos relevantes. Para investigar mais, clique em 'Ver detalhes completos no Application Insights' os links nesta página levam você diretamente para uma página de pesquisa filtrada para as solicitações relevantes, exceção, dependência ou rastreamentos.

Você também pode abrir o portal do Azure, navegar até o recurso do Application Insights para seu aplicativo e abrir a página Falhas.

Clicar em 'Diagnosticar falhas' pode ajudá-lo a obter mais detalhes e resolver o problema.

Pesquisa diagnóstica.

A partir da porcentagem de solicitações e do número de usuários afetados, você pode decidir o quão urgente é o problema. No exemplo mostrado anteriormente, a taxa de falha de 78,5% se compara com uma taxa normal de 2,2%, indica que algo ruim está acontecendo. Por outro lado, apenas 46 utilizadores foram afetados. Estas informações podem ajudá-lo a avaliar a gravidade do problema.

Em muitos casos, você pode diagnosticar o problema rapidamente a partir do nome da solicitação, exceção, falha de dependência e dados de rastreamento fornecidos.

Neste exemplo, houve uma exceção do Banco de dados SQL devido ao limite de solicitação ter sido atingido.

Detalhes da solicitação com falha.

Rever alertas recentes

Clique em Alertas na página de recursos do Application Insights para acessar os alertas disparados mais recentes:

Resumo dos alertas.

Se receber um alerta de Deteção Inteligente

Porque recebi este alerta?

  • O Tribunal detetou um aumento anormal na taxa de pedidos falhados em comparação com a linha de base normal do período anterior. Após a análise das falhas e dos dados de aplicativos associados, achamos que há um problema que você deve analisar.

A notificação significa que eu definitivamente tenho um problema?

  • Tentamos alertar sobre a interrupção ou degradação do aplicativo, mas só você pode entender completamente a semântica e o impacto no aplicativo ou nos usuários.

Então, você está olhando para os dados do meu aplicativo?

  • N.º O serviço é totalmente automático. Só você recebe as notificações. Os seus dados são privados.

Tenho de subscrever este alerta?

  • N.º Cada aplicativo que envia dados de solicitação tem a regra de alerta Smart Detection.

Posso cancelar a subscrição ou receber as notificações enviadas aos meus colegas?

  • Sim, em Regras de alerta, clique na regra de Deteção inteligente para configurá-la. Você pode desativar o alerta ou alterar os destinatários do alerta.

Perdi o e-mail. Onde posso encontrar as notificações no portal?

  • Você pode encontrar alertas de Anomalias de Falha no portal do Azure, na página de alertas do Application Insights.

Alguns dos alertas são sobre problemas conhecidos e não quero recebê-los.

Próximos passos

Estas ferramentas de diagnóstico ajudam-no a inspecionar os dados da sua aplicação:

As deteções inteligentes são automáticas. Mas talvez você gostaria de configurar mais alguns alertas?