Detecção Inteligente - anomalias de falha

O Application Insights alertará você automaticamente, quase em tempo real, se seu aplicativo Web experimentar um aumento anormal de solicitações com falha. Ele detecta um aumento excepcional na taxa de solicitações de HTTP ou chamadas de dependência são relatadas como falha. Nas solicitações, as solicitações com falha geralmente têm códigos de resposta de 400 ou superior. Para ajudar você na triagem e no diagnóstico do problema, uma análise das características das falhas e dados relacionados do aplicativo são fornecidos nos detalhes do alerta. Também há links para portal do Application Insights, onde você pode obter um diagnóstico mais detalhado. O recurso não precisa de qualquer configuração, pois usa algoritmos de aprendizado de máquina para prever a taxa normal de falhas.

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

Depois de configurar o Application Insights para seu projeto e se seu aplicativo gerar uma certa quantidade mínima de dados, a Detecção Inteligente de Anomalias de Falha leva 24 horas para aprender o comportamento normal do seu aplicativo, antes que ele seja ativado e possa enviar alertas.

Veja a seguir um exemplo de alerta:

Exemplo de alerta de detecção inteligente mostrando a análise de cluster sobre a falha.

Os detalhes do alerta informam:

  • A taxa de falhas em comparação com o comportamento normal do aplicativo.
  • Quantos usuários são afetados - então você sabe 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 diz a você imediatamente onde começar a procurar em seu código. Outras possibilidades poderiam ser um navegador ou um sistema operacional cliente específico.
  • A exceção, os rastreamentos de log e as falhas de dependência (bancos de dados ou outros componentes externos) que parecem estar associados às falhas caracterizadas.
  • Vincula diretamente às pesquisas relevantes nos dados do Application Insights.

Benefícios da Detecção Inteligente

Os alertas de métrica comuns mostram que pode haver um problema. Mas a Detecção Inteligente inicia o trabalho de diagnóstico para você, executando grande parte da análise que, de outra forma, você teria de fazer por conta própria. Você obtém os resultados empacotados organizadamente, o que ajuda a chegar rapidamente à raiz do problema.

Como ele funciona

A Detecção Inteligente monitora os dados recebidos do aplicativo, especialmente as taxas de falha. Essa regra calcula o número de solicitações para o qual o Successful request propriedade for false, e o número de dependência chamadas para o qual o Successful call propriedade é false. Para as solicitações, por padrão, Successful request == (resultCode < 400) (a menos que você grave o 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 de falha geral pode aumentar à medida que a carga aumenta. A Detecção Inteligente usa aprendizado de máquina para encontrar essas anomalias.

Conforme os dados entram no Application Insights vindos do aplicativo Web, a Detecção Inteligente compara o comportamento atual com os padrões vistos nos últimos dias. Se o detector descobrir um aumento anormal na comparação da taxa de falha com o desempenho anterior, o detector disparará uma análise mais detalhada.

Quando um alerta é gerado, o serviço realiza uma análise de cluster na solicitação com falha a fim de tentar identificar um padrão de valores que caracterize as falhas.

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

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

Detalhes da lógica de alerta

A detecção de Anomalias de Falha depende de um algoritmo de aprendizado de máquina proprietário. Portanto, os motivos para que um alerta seja disparado ou não são sempre determinísticos. Dito isso, os principais fatores usados pelo algoritmo são:

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

Como gerenciar as regras de alerta de Anomalias de Falha

Criação de regra 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 um modelo do Resource Manager. A criação da regra poderá ser útil se a criação automática da regra falhou por algum motivo ou se você excluiu a regra.

Configuração de regra 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 todos os alertas definidos manualmente.

Na página do recurso 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 Detecção Inteligente no portal ou usando um modelo do Resource Manager.

Essa regra de alerta é criada com um Grupo de Ações associado chamado "Detecção Inteligente do Application Insights". Por padrão, esse grupo de ações contém as ações da Função do Azure Resource Manager por Email e envia uma notificação aos usuários que têm funções do Azure Resource Manager com assinatura de Colaborador de Monitoramento ou Leitor de Monitoramento na assinatura. Você pode remover, alterar ou adicionar os grupos de ações que a regra dispara, como ocorre para qualquer outra regra de alerta do Azure. As notificações enviadas por essa regra de alerta seguem o esquema de alerta comum.

Excluir alertas

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

Faça 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 das anomalias de falha associada não será excluída automaticamente.

Exemplo de conteúdo do webhook do 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 a detecção de um aumento anormal na taxa de solicitações com falha. É provável que haja algum problema com seu aplicativo ou seu ambiente.

Para investigar mais, clique em 'Exibir detalhes completos no Application Insights'. Os links nesta página levam você diretamente até uma página de pesquisa filtrada para mostrar 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 a 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 Application Insights do seu aplicativo e abrir a página Falhas.

Clicar em “Diagnosticar falhas” pode ajudar você a obter mais detalhes e a resolver o problema.

Pesquisa de diagnóstico.

Você pode decidir a urgência do problema com base na porcentagem de solicitações e no número de usuários afetados. No exemplo mostrado anteriormente, a taxa de falha de 78,5% é comparada a uma taxa normal de 2,2% e indica que está acontecendo alguma coisa errada. Por outro lado, somente 46 usuários foram afetados. Essas informações podem ajudar você a avaliar a gravidade do problema.

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

Neste exemplo, houve uma exceção do Banco de Dados SQL porque o limite de solicitações foi alcançado.

Detalhes da solicitação com falha.

Exame dos alertas recentes

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

Resumo de alertas.

Se você receber um alerta de Detecção Inteligente

Por que recebi esse alerta?

  • Foi detectado um aumento anormal de solicitações com falha em comparação à 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, definitivamente, tenho um problema?

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

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

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

É necessário assinar este alerta?

  • Não. Todos os aplicativos que enviam dados de solicitação têm a regra de alerta de Detecção Inteligente.

Posso cancelar a assinatura ou ter as notificações enviadas para meus colegas em vez disso?

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

Perdi o email. 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óximas etapas

Estas ferramentas de diagnóstico ajudam você a inspecionar os dados do seu aplicativo:

As detecções inteligentes são automáticas. Mas talvez você queira configurar alguns outros alertas?