Omitir navegación

Mejora de la detección de anomalías con AIOps: presentación de AiDice

Publicado el 3 octubre, 2022

Chief Technology Officer and Technical Fellow, Microsoft Azure

En esta entrada de blog ha colaborado Jeffrey He, director de producto en el equipo “AIOps Platform and Experiences”.

En Microsoft Azure, hacemos un gran esfuerzo por asegurar que nuestros servicios sean confiables mediante la predicción y mitigación de errores lo más rápido posible. Sin embargo, en los sistemas en la nube a gran escala, es posible que todavía experimentemos problemas imprevistos, que se deben simplemente a la escala masiva del sistema. Ante esto, es fundamental usar AIOps para supervisar continuamente las métricas de estado a fin de ejecutar correctamente un sistema en la nube, como hemos comentado en entradas anteriores. Primero hablamos sobre este tema en Mejora de la calidad de los servicios de Azure con inteligencia artificial: AIOps. También hicimos un análisis detallado de ejemplo de cómo usamos AIOps para ayudar a Azure en el contexto de una implementación segura en Mejora de una implementación segura con AIOps. Hoy vamos a ver otro ejemplo, esta vez sobre cómo se usa la inteligencia artificial en el campo de la detección de anomalías. En concreto, presentamos AiDice, un nuevo algoritmo de detección de anomalías desarrollado conjuntamente por los equipos de Microsoft Research y Microsoft Azure que identifica anomalías en datos de series temporales multidimensionales a gran escala. AiDice no solo captura los incidentes rápidamente , sino que también ofrece a los ingenieros un contexto importante que les ayuda a diagnosticar los problemas de un modo más eficaz, lo que proporciona la mejor experiencia posible para los clientes finales.

¿Por qué es necesario AIOps para la detección de anomalías?

Necesitamos AIOps para la detección de anomalías porque el volumen de datos es sencillamente demasiado grande como para analizarlo sin inteligencia artificial. En los entornos en la nube a gran escala, supervisamos un número incontable de componentes en la nube y cada componente registra innumerables filas de datos. Además, cada fila de datos de cualquier componente de nube puede contener decenas de columnas, como la marca de tiempo, el tipo de hardware de la máquina virtual, el número de generación, la versión del sistema operativo, el centro de datos donde están los nodos que hospedan la máquina virtual o el país. La estructura de los datos que tenemos consiste básicamente en datos de series temporales multidimensionales, con un número exponencial de series temporales individuales debido a las diversas combinaciones de dimensiones. Esto significa que la iteración y la supervisión de cada serie temporal simplemente no es práctica. Es necesario aplicar AIOps.

¿Cómo lo hacíamos antes de AiDice?

Antes de AiDice, lo que hacíamos para detectar anomalías en datos de series temporales con numerosas dimensiones a gran escala era detectar anomalías en un conjunto seleccionado de dimensiones que eran las más importantes. Al centrarnos en un subconjunto con ámbito, podíamos detectar anomalías en esas combinaciones rápidamente. Una vez detectadas las anomalías, los ingenieros indagaban en los problemas usando tablas dinámicas para explorar en profundidad las otras dimensiones no incluidas y así diagnosticar mejor el problema. Aunque este enfoque funcionaba, vimos dos oportunidades clave para mejorar el proceso. En primer lugar, el enfoque anterior requería un gran esfuerzo manual por parte de los ingenieros para determinar la tabla dinámica exacta de las anomalías. En segundo lugar, el enfoque también limitaba el ámbito de supervisión directa, ya que solo nos permitía introducir un número limitado de dimensiones en los algoritmos de detección de anomalías. Por estos motivos, los equipos de Microsoft Research y Azure trabajaron juntos para desarrollar AiDice, que mejora las dos áreas.

¿Cómo abordamos esto ahora con AiDice y cómo funciona?

Ahora con AiDice podemos localizar automáticamente las tablas dinámicas en los datos de series temporales, incluso si examinamos decenas de dimensiones al mismo tiempo. Esto nos permite agregar muchos más atributos, que pueden ser la generación o el microcódigo del hardware, la versión del sistema operativo, la versión del agente de red, etc. Aunque esto hace que el espacio de búsqueda sea mucho mayor, AiDice codifica el problema como un problema de optimización combinatoria, que le permite buscar a través del espacio de un modo más eficaz que los enfoques tradicionales. A continuación se describen algunos detalles de AiDice, pero, para ver una explicación completa del algoritmo, consulte el documento publicado en ESEC/FSE '20: Actas del 28º encuentro de la ACM: European Software Engineering Conference and Symposium on the Foundations of Software Engineering (ESEC/FSE 2020).

Parte 1: Algoritmo AiDice: formulación como un problema de búsqueda

El algoritmo AiDice funciona convirtiendo primero los datos en un problema de búsqueda. Los nodos de búsqueda se forman comenzando en una tabla dinámica determinada y estableciendo relaciones con los nodos vecinos. Por ejemplo, si tomamos el nodo "Country=USA, Datacenter=DC1, DiskType=SSD", podemos formar los nodos vecinos intercambiando, agregando o quitando un par dimensión-valor, como se muestra en el diagrama siguiente.

Esta imagen muestra cómo se forma el espacio de búsqueda. A la izquierda hay un grafo de nodos. A la derecha se muestra una versión ampliada de un conjunto específico de nodos y flechas etiquetadas con las relaciones entre ellos.

Parte 2: Algoritmo AiDice: función objetivo

A continuación, el algoritmo AiDice busca de forma inteligente en el espacio de búsqueda maximizando una función objetivo que enfatiza dos componentes clave. En primer lugar, cuanto mayor es el aumento o el cambio repentino de los errores, más alto puntúa AiDice la función objetivo. En segundo lugar, cuanto mayor es la proporción de errores que se producen en esta tabla dinámica en relación con el número total de errores, más alto puntúa AiDice la función objetivo. Por ejemplo, si se produce un total de 5000 errores, es más importante alertar al usuario sobre la tabla dinámica que pasó de 3000 a 4000 errores que sobre la tabla que pasó de 10 a 20 errores.

Parte 3: Personalización de las alertas para reducir el ruido

A continuación, es necesario filtrar y personalizar las alertas que genera AiDice para que incluyan menos ruido y sean más útiles, ya que los resultados hasta ahora están optimizados desde una perspectiva matemática, pero no se han incorporado aún conocimientos específicos en torno al significado de los datos de entrada. Este paso puede variar ampliamente en función de la naturaleza de los datos de entrada, pero un ejemplo puede ser la agrupación de las alertas consecutivas que comparten el mismo código de error para reducir el número de alertas totales.

AiDice en acción: un ejemplo

El siguiente es un ejemplo real en el que AiDice ayudó a detectar un problema real en una fase temprana. Los detalles se han modificado por razones de confidencialidad.

  • Aplicamos AiDice para supervisar eventos de error de memoria insuficiente en un determinado tipo de máquina virtual con más de una docena de dimensiones de información de atributos junto con el recuento de errores. Se incluían, entre otros, la región, la ubicación del centro de datos, el clúster, la compilación, la memoria RAM y el tipo de evento.
  • AiDice identificó un aumento en el número de eventos de memoria insuficiente en nodos diferentes de una tabla dinámica determinada, lo que indicaba una fuga de memoria.
    • Build=11.11111, Ram=00.0, ProviderName=Xxxxx-x-Xxxxxx, EventType=8888 (los detalles se han modificado por razones de privacidad).
  • Al examinar la tendencia agregada, este problema se oculta y, sin AiDice, sería necesario un gran esfuerzo manual para detectar la ubicación exacta del problema (vea los grafos que se incluyen a continuación; los datos se han normalizado por razones de privacidad).
  • El ingeniero responsable de la incidencia miró la alerta y algunos casos de ejemplo que se mostraban en las alertas para poder averiguar rápidamente lo que estaba ocurriendo.

Esta imagen es un gráfico de líneas de la tendencia agregada de los eventos de memoria insuficiente para un determinado tipo de máquina virtual en 17 marcas de tiempo. En general, la tendencia se mantiene relativamente estable en el tiempo.

Esta imagen es un gráfico de líneas de la anomalía identificada por AiDice en una tabla dinámica determinada en 17 marcas de tiempo. En general, la tendencia muestra claramente una anomalía; comienza con valores bajos y aumenta de forma constante.

En este ejemplo real, AiDice pudo detectar de forma automática, rápida y eficaz un problema en una combinación de dimensiones que estaba causando un tipo de error determinado. Poco después, se detectó la fuga de memoria y los ingenieros de Azure pudieron mitigar el problema.

Una mirada hacia lo que está por venir

De cara al futuro, esperamos mejorar AiDice para que Azure sea todavía más resistente y confiable. En concreto, tenemos previsto:

  • Admitir nuevos escenarios en Azure: AiDice ya se aplica a muchos escenarios en Azure, pero el algoritmo se puede mejor más aún en lo que respecta a los tipos de métricas con los que puede trabajar. Los equipos de Microsoft Azure y Microsoft Research están trabajando juntos para admitir más métricas.
  • Preparar más fuentes de distribución de datos en Azure para AiDice: además de actualizar el algoritmo AiDice en sí para usarlo en más escenarios, también estamos trabajando para agregar atributos complementarios a determinados orígenes de datos con el fin de aprovechar totalmente el potencial de AiDice.

Más información