Detección inteligente: anomalías de error

Application Insights le avisa automáticamente casi en tiempo real si la aplicación web sufre un aumento anómalo en la frecuencia de solicitudes erróneas. Asimismo, detecta un aumento inusual de la tasa de solicitudes HTTP o llamadas de dependencia notificadas como errores. En el caso de las solicitudes, las solicitudes con error suelen tener códigos de respuesta de 400 o superiores. Para ayudarle a evaluar las prioridades y a diagnosticar el problema, en los detalles de la alerta se proporciona un análisis de las características de los errores, así como datos de la aplicación relacionados. También hay vínculos en el portal de Application Insights para obtener un diagnóstico más amplio. La característica no necesita ninguna instalación o configuración, ya que usa algoritmos de aprendizaje automático para predecir la tasa normal de errores.

Esta característica funciona para cualquier aplicación web, hospedada en la nube o en sus propios servidores, que genere datos de dependencia o de solicitud de la aplicación. Por ejemplo, si tiene un rol de trabajo que llama a TrackRequest() o TrackDependency().

Después de configurar Application Insights para su proyecto, si la aplicación genera una cantidad mínima determinada de datos, la detección inteligente de anomalías de error tarda 24 horas en aprender el comportamiento normal de la aplicación antes de activarse y poder enviar alertas.

Esta es una alerta de ejemplo:

Alerta de ejemplo de detección inteligente que muestra el análisis del clúster en torno al error.

Los detalles de la alerta le indican lo siguiente:

  • La tasa de errores en comparación con el comportamiento normal de la aplicación.
  • Cuántos usuarios se ven afectados (para darle una idea de la gravedad).
  • Un patrón característico relacionado con los errores. En este ejemplo encontrará un código de respuesta, un nombre de solicitud (operación) y una versión de aplicación concretos. Esto le indica inmediatamente por dónde empezar a buscar en el código. Otras posibilidades pueden ser un sistema operativo cliente o explorador específicos.
  • Las excepciones, seguimientos de registros y errores de dependencias (bases de datos u otros componentes externos) que parecen estar asociados con los errores caracterizados.
  • Vínculo directos a búsquedas significativas en los datos de Application Insights.

Ventajas de la detección inteligente

Las alertas de métricas normales le comunican que puede haber un problema. Sin embargo, la detección inteligente inicia el trabajo de diagnóstico y realiza gran parte del análisis que, de otra forma, tendría que hacer usted mismo. Los resultados se le presentan claramente organizados, lo que le ayuda a llegar rápidamente a la raíz del problema.

Funcionamiento

La detección inteligente supervisa los datos recibidos de su aplicación y, en particular, las tasas de errores. Esta regla cuenta el número de solicitudes para el que la propiedad Successful request es falsa y el número de llamadas de dependencia para el que la propiedad Successful call es falsa. De manera predeterminada, para las solicitudes, Successful request == (resultCode < 400) (a no ser que haya escrito código personalizado para filtrar o generar sus propias llamadas de TrackRequest).

El rendimiento de una aplicación tiene un patrón típico de comportamiento. Algunas solicitudes o llamadas de dependencia son más propensas a errores que otras; y la tasa de error general puede aumentar a medida que aumenta la carga. La detección inteligente usa aprendizaje automático para encontrar estas anomalías.

A medida que Application Insights recibe datos de su aplicación web, la detección inteligente compara el comportamiento actual con los patrones vistos a lo largo de los últimos días. Si el detector detecta un aumento anómalo en la comparación de la tasa de errores con el rendimiento anterior, el detector desencadena un análisis más detallado.

Cuando se desencadena un análisis, el servicio realiza un análisis del clúster en la solicitud errónea, para tratar de identificar un patrón de valores que caracterice los errores.

En el ejemplo anterior, el análisis ha detectado que la mayoría de los errores giran en torno a un código de resultado, nombre de solicitud, host de URL de servidor e instancia de rol específicos.

Al instrumentar el servicio con estas llamadas, el analizador busca una excepción y un error de dependencia asociado a las solicitudes del clúster identificado. También busca un ejemplo de los registros de seguimiento asociados a esas solicitudes. La alerta que recibe incluye esta información adicional que puede proporcionar contexto a la detección y sugerencia sobre la causa principal del problema detectado.

Detalles de la lógica de alerta

La detección de anomalías de errores se basa en un algoritmo de aprendizaje automático propietario, por lo que las razones de la activación de una alerta o la no activación no siempre son deterministas. Dicho esto, los factores principales que usa el algoritmo son:

  • Análisis del porcentaje de errores de las solicitudes o dependencias en una ventana de tiempo adaptable de 20 minutos.
  • Comparación del porcentaje de error en los últimos 20 minutos, hasta la tasa en los últimos 40 minutos y los últimos siete días. El algoritmo busca desviaciones significativas que superan las X veces de la desviación estándar.
  • El algoritmo usa un límite adaptable para el porcentaje mínimo de errores, que varía en función del volumen de solicitudes o dependencias de la aplicación’.
  • El algoritmo incluye una lógica que puede resolver automáticamente la alerta desencadenada, si el problema ya no se detecta durante 8 a 24 horas. Nota: En el diseño actual, no se envía una notificación o acción cuando se resuelve una alerta de detección inteligente. Puede comprobar si se ha resuelto una alerta de detección inteligente en Azure Portal.

Administración de reglas de alertas de anomalías de error

Creación de reglas de alerta

Una regla de alerta anomalías de errores se crea automáticamente cuando se crea el recurso de Application Insights. La regla se configura automáticamente para analizar la telemetría en ese recurso. Puede volver a crear la regla mediante la API de REST de Azure o mediante una plantilla de Resource Manager. La creación de la regla puede ser útil si se produjo un error en la creación automática de la regla por algún motivo o si eliminó la regla.

Configuración de reglas de alerta

Para configurar una regla de alerta de anomalías de error en el portal, abra la página Alertas y seleccione Reglas de alerta. Las reglas de alerta de anomalías de error se incluyen junto con las alertas que establezca manualmente.

En la página del recurso de Application Insights, haga clic en el icono Alertas y luego en Administrar reglas de alerta.

Haga clic en la regla de alertas para configurarla.

Pantalla de configuración de reglas.

Puede deshabilitar la regla de alertas de detección inteligente desde el portal o mediante una plantilla de Azure Resource Manager.

Esta regla de alerta se crea con un grupo de acciones asociado denominado "Detección inteligente de Application Insights". De forma predeterminada, este grupo de acciones contiene acciones de rol de Azure Resource Manager de correo electrónico y envía notificaciones a los usuarios que tienen roles de Azure Resource Manager de colaborador de supervisión o lector de supervisión en su suscripción. Puede quitar, cambiar o agregar los grupos de acciones que desencadena la regla, como para cualquier otra regla de alerta de Azure. Las notificaciones enviadas desde esta regla de alertas siguen el esquema de alertas comunes.

Eliminación de alertas

Puede eliminar una regla de alerta anomalías de error.

Puede hacerlo manualmente en la página Reglas de alertas o con el siguiente comando de la CLI de Azure:

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

Tenga en cuenta que si elimina un recurso de Application Insights, la regla de alertas de anomalías de error asociada no se elimina automáticamente.

Ejemplo de la carga de webhook de una alerta de anomalías de error

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

Evaluación de prioridades y diagnóstico de una alerta

Una alerta indica que se detectó un aumento anómalo de la tasa de solicitudes con errores. Es probable que haya algún problema con la aplicación o con su entorno.

Para investigar más, haga clic en "Ver detalles completos en Application Insights". Los vínculos de esta página le llevan directamente a una página de búsqueda filtrada a las solicitudes, excepciones, dependencias o seguimientos pertinentes. Si necesita investigar más, haga clic en los vínculos "Ver todos los detalles en Application Insights" de esta página que le lleva directamente a una página de búsqueda filtrada por las solicitudes, la excepción, la dependencia o el seguimiento correspondientes.

También puede abrir Azure Portal, navegar hasta el recurso de Application Insights de su aplicación y abrir la página Errores.

Hacer clic en "Diagnosticar errores" puede ayudarle a obtener más detalles y resolver el problema.

Búsqueda de diagnóstico.

Puede determinar la urgencia del problema a partir del porcentaje de solicitudes y del número de usuarios afectados. En el ejemplo anterior, la tasa de error del 78,5 % se compara con una tasa normal del 2,2 %, lo que indica que hay algo que no va bien. Por otro lado, solo 46 usuarios se vieron afectados. Esta información puede ayudarle a evaluar la gravedad del problema.

En muchos casos, podrá diagnosticar el problema rápidamente a partir del nombre de la solicitud, las excepciones, los errores de dependencias y otros datos de seguimiento proporcionados.

En este ejemplo, se produjo una excepción de SQL Database debido a que se alcanzó el límite de solicitudes.

Detalles de las solicitudes con errores.

Revisar las alertas recientes

Haga clic en Alertas en la página de recursos de Application Insights para ver las alertas desencadenadas más recientes:

Resumen de alertas.

Si recibe una alerta de detección inteligente

¿Por qué recibí esta alerta?

  • Hemos detectado un aumento anómalo en la tasa de solicitudes con errores en comparación con la línea de base normal del período anterior. Después de analizar los errores y los datos de aplicación asociados, creemos que hay un problema que debe examinar.

¿La notificación significa que tengo definitivamente un problema?

  • Intentamos alertarle sobre las interrupciones o la degradación de la aplicación, aunque solo usted puede entender totalmente la semántica y el impacto en la aplicación o los usuarios.

¿Está viendo los datos de mi aplicación?

  • No. El servicio es completamente automático. Solo obtendrá las notificaciones. Sus datos son privados.

¿Es necesario suscribirse a esta alerta?

  • No. Cada aplicación que envía datos de solicitud tiene la regla de alerta de detección inteligente.

¿Puedo cancelar la suscripción u hacer que mis colegas reciban las notificaciones?

  • Sí, en Reglas de alerta, haga clic en la regla de detección inteligente para configurarla. Puede deshabilitar la alerta o cambiar a los destinatarios de la misma.

Perdí el mensaje de correo electrónico. ¿Dónde puedo encontrar las notificaciones en el portal?

  • Puede encontrar alertas de anomalías de error en Azure Portal, en la página de alertas de Application Insights.

Algunas de las alertas se refieren a problemas conocidos y no deseo recibirlas.

Pasos siguientes

Estas herramientas de diagnóstico lo ayudarán a inspeccionar los datos de su aplicación:

Las detecciones inteligentes son automáticas. Pero ¿quizás le gustaría configurar algunas alertas más?