Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
El lenguaje de consulta kusto (KQL) tiene funciones integradas de detección y previsión de anomalías para comprobar el comportamiento anómalo. Una vez detectado este patrón, se puede ejecutar un análisis de causa principal (RCA) para mitigar o resolver la anomalía.
El proceso de diagnóstico es complejo y largo, y se realiza por expertos de dominio. Este proceso incluye:
- Captura y combinación de más datos de orígenes diferentes para el mismo período de tiempo
- Buscar cambios en la distribución de valores en varias dimensiones
- Gráfico de más variables
- Otras técnicas basadas en el conocimiento del dominio y la intuición
Dado que estos escenarios de diagnóstico son comunes, los complementos de aprendizaje automático están disponibles para facilitar la fase de diagnóstico y acortar la duración de la RCA.
Los tres complementos de Machine Learning siguientes implementan algoritmos de agrupación en clústeres: autocluster
, basket
y diffpatterns
. Los autocluster
complementos y basket
agrupan un único conjunto de registros, y el diffpatterns
complemento agrupa las diferencias entre dos conjuntos de registros.
Agrupación en clústeres de un único conjunto de registros
Un escenario común incluye un conjunto de datos seleccionado por criterios específicos, como:
- Período de tiempo que muestra un comportamiento anómalo
- Lecturas de dispositivos de alta temperatura
- Comandos de larga duración
- Principales usuarios de gasto
Quiere una manera rápida y sencilla de encontrar patrones comunes (segmentos) en los datos. Los patrones son un subconjunto del conjunto de datos cuyos registros comparten los mismos valores en varias dimensiones (columnas de categorías).
La consulta siguiente compila y muestra una serie temporal de excepciones de servicio durante el período de una semana, en intervalos de diez minutos:
let min_t = toscalar(demo_clustering1 | summarize min(PreciseTimeStamp));
let max_t = toscalar(demo_clustering1 | summarize max(PreciseTimeStamp));
demo_clustering1
| make-series num=count() on PreciseTimeStamp from min_t to max_t step 10m
| render timechart with(title="Service exceptions over a week, 10 minutes resolution")
El recuento de excepciones de servicio se correlaciona con el tráfico general del servicio. Puede ver claramente el patrón diario para los días laborables, de lunes a viernes. Hay un aumento en los recuentos de excepciones de servicio a mediados del día y caídas en los recuentos durante la noche. Los recuentos bajos estables se observan durante el fin de semana. Se pueden detectar picos de excepciones mediante la detección de anomalías de series temporales.
El segundo pico de los datos se produce el martes por la tarde. La consulta siguiente se usa para diagnosticar y comprobar aún más si se trata de un pico agudo. La consulta redibuja el gráfico alrededor del pico en una resolución más alta de ocho horas en intervalos de un minuto. Luego, puedes examinar sus límites.
let min_t=datetime(2016-08-23 11:00);
demo_clustering1
| make-series num=count() on PreciseTimeStamp from min_t to min_t+8h step 1m
| render timechart with(title="Zoom on the 2nd spike, 1 minute resolution")
Verá un pico estrecho de dos minutos entre las 15:00 y las 15:02. En la consulta siguiente, cuente las excepciones en esta ventana de dos minutos:
let min_peak_t=datetime(2016-08-23 15:00);
let max_peak_t=datetime(2016-08-23 15:02);
demo_clustering1
| where PreciseTimeStamp between(min_peak_t..max_peak_t)
| count
Contar |
---|
972 |
En la consulta siguiente, muestra 20 excepciones de 972:
let min_peak_t=datetime(2016-08-23 15:00);
let max_peak_t=datetime(2016-08-23 15:02);
demo_clustering1
| where PreciseTimeStamp between(min_peak_t..max_peak_t)
| take 20
PreciseTimeStamp | Región | ScaleUnit | Identificador de Despliegue (DeploymentId) | Punto de seguimiento | ServiceHost |
---|---|---|---|---|---|
2016-08-23 15:00:08.7302460 | scus | su5 | 9dbd1b161d5b4779a73cf19a7836ebd6 | 100005 | 00000000-0000-0000-0000-000000000000 |
2016-08-23 15:00:09.9496584 | scus | su5 | 9dbd1b161d5b4779a73cf19a7836ebd6 | 10007006 | 8d257da1-7a1c-44f5-9acd-f9e02ff507fd |
2016-08-23 15:00:10.5911748 | scus | su5 | 9dbd1b161d5b4779a73cf19a7836ebd6 | 100005 | 00000000-0000-0000-0000-000000000000 |
2016-08-23 15:00:12.2957912 | scus | su5 | 9dbd1b161d5b4779a73cf19a7836ebd6 | 10007007 | f855fcef-ebfe-405d-aaf8-9c5e2e43d862 |
2016-08-23 15:00:18.5955357 | scus | su5 | 9dbd1b161d5b4779a73cf19a7836ebd6 | 10007006 | 9d390e07-417d-42eb-bebd-793965189a28 |
2016-08-23 15:00:20.7444854 | scus | su5 | 9dbd1b161d5b4779a73cf19a7836ebd6 | 10007006 | 6e54c1c8-42d3-4e4e-8b79-9bb076ca71f1 |
2016-08-23 15:00:23.8694999 | eus2 | su2 | 89e2f62a73bb4efd8f545aeae40d7e51 | 36109 | 19422243-19b9-4d85-9ca6-bc961861d287 |
2016-08-23 15:00:26.4271786 | ncus | su1 | e24ef436e02b4823ac5d5b1465a9401e | 36109 | 3271bae4-1c5b-4f73-98ef-cc117e9be914 |
2016-08-23 15:00:27.8958124 | scus | su3 | 90d3d2fc7ecc430c9621ece35651a01 | 904498 | 8cf38575-fca9-48ca-bd7c-21196f6d6765 |
2016-08-23 15:00:32.9884969 | scus | su3 | 90d3d2fc7ecc430c9621ece35651a01 | 10007007 | d5c7c825-9d46-4ab7-a0c1-8e2ac1d83ddb |
2016-08-23 15:00:34.5061623 | scus | su5 | 9dbd1b161d5b4779a73cf19a7836ebd6 | 1002110 | 55a71811-5ec4-497a-a058-140fb0d611ad |
2016-08-23 15:00:37.4490273 | scus | su3 | 90d3d2fc7ecc430c9621ece35651a01 | 10007006 | f2ee8254-173c-477d-a1de-4902150ea50d |
2016-08-23 15:00:41.2431223 | scus | su3 | 90d3d2fc7ecc430c9621ece35651a01 | 103200 | 8cf38575-fca9-48ca-bd7c-21196f6d6765 |
2016-08-23 15:00:47.2983975 | ncus | su1 | e24ef436e02b4823ac5d5b1465a9401e | 423690590 | 00000000-0000-0000-0000-000000000000 |
2016-08-23 15:00:50.5932834 | scus | su5 | 9dbd1b161d5b4779a73cf19a7836ebd6 | 10007006 | 2a41b552-aa19-4987-8cdd-410a3af016ac |
2016-08-23 15:00:50.8259021 | scus | su5 | 9dbd1b161d5b4779a73cf19a7836ebd6 | 1002110 | 0d56b8e3-470d-4213-91da-97405f8d005e |
2016-08-23 15:00:53.2490731 | scus | su5 | 9dbd1b161d5b4779a73cf19a7836ebd6 | 36109 | 55a71811-5ec4-497a-a058-140fb0d611ad |
2016-08-23 15:00:57.0000946 | eus2 | su2 | 89e2f62a73bb4efd8f545aeae40d7e51 | 64038 | cb55739e-4afe-46a3-970f-1b49d8ee7564 |
2016-08-23 15:00:58.2222707 | scus | su5 | 9dbd1b161d5b4779a73cf19a7836ebd6 | 10007007 | 8215dcf6-2de0-42bd-9c90-181c70486c9c |
2016-08-23 15:00:59.9382620 | scus | su3 | 90d3d2fc7ecc430c9621ece35651a01 | 10007006 | 451e3c4c-0808-4566-a64d-84d85cf30978 |
Aunque hay menos de mil excepciones, todavía es difícil encontrar segmentos comunes, ya que hay varios valores en cada columna. Puede usar el autocluster()
complemento para extraer al instante una breve lista de segmentos comunes y encontrar los clústeres interesantes en los dos minutos del pico, como se muestra en la consulta siguiente:
let min_peak_t=datetime(2016-08-23 15:00);
let max_peak_t=datetime(2016-08-23 15:02);
demo_clustering1
| where PreciseTimeStamp between(min_peak_t..max_peak_t)
| evaluate autocluster()
Identificador de segmento | Contar | Porcentaje | Región | ScaleUnit | Identificador de Despliegue (DeploymentId) | ServiceHost |
---|---|---|---|---|---|---|
0 | 639 | 65.7407407407407 | Eau | su7 | b5d1d4df547d4a04ac15885617edba57 | e7f60c5d-4944-42b3-922a-92e98a8e7dec |
1 | 94 | 9.67078189300411 | scus | su5 | 9dbd1b161d5b4779a73cf19a7836ebd6 | |
2 | 82 | 8.43621399176955 | ncus | su1 | e24ef436e02b4823ac5d5b1465a9401e | |
3 | 68 | 6.99588477366255 | scus | su3 | 90d3d2fc7ecc430c9621ece35651a01 | |
4 | 55 | 5,65843621399177 | Ueo | su4 | be1d6d7ac9574cbc9a22cb8ee20f16fc |
Puede ver en los resultados anteriores que el segmento más dominante contiene 65,74% de los registros de excepciones totales y comparte cuatro dimensiones. El siguiente segmento es mucho menos común. Contiene solo 9,67% de los registros y comparte tres dimensiones. Los otros segmentos son incluso menos comunes.
Autocluster usa un algoritmo propietario para el análisis de varias dimensiones y la extracción de segmentos interesantes. "Interesante" significa que cada segmento tiene una cobertura significativa tanto del conjunto de registros como del conjunto de características. Los segmentos también se diferencian, lo que significa que cada uno es diferente de los demás. Uno o varios de estos segmentos pueden ser relevantes para el proceso de RCA. Para minimizar la evaluación y revisión de segmentos, el clúster automático extrae solo una lista de segmentos pequeños.
También puede usar el basket()
complemento como se muestra en la consulta siguiente:
let min_peak_t=datetime(2016-08-23 15:00);
let max_peak_t=datetime(2016-08-23 15:02);
demo_clustering1
| where PreciseTimeStamp between(min_peak_t..max_peak_t)
| evaluate basket()
Identificador de segmento | Contar | Porcentaje | Región | ScaleUnit | Identificador de Despliegue (DeploymentId) | Punto de seguimiento | ServiceHost |
---|---|---|---|---|---|---|---|
0 | 639 | 65.7407407407407 | Eau | su7 | b5d1d4df547d4a04ac15885617edba57 | e7f60c5d-4944-42b3-922a-92e98a8e7dec | |
1 | 642 | 66.0493827160494 | Eau | su7 | b5d1d4df547d4a04ac15885617edba57 | ||
2 | 324 | 33.3333333333333 | Eau | su7 | b5d1d4df547d4a04ac15885617edba57 | 0 | e7f60c5d-4944-42b3-922a-92e98a8e7dec |
3 | 315 | 32.4074074074074 | Eau | su7 | b5d1d4df547d4a04ac15885617edba57 | 16108 | e7f60c5d-4944-42b3-922a-92e98a8e7dec |
4 | 328 | 33.7448559670782 | 0 | ||||
5 | 94 | 9.67078189300411 | scus | su5 | 9dbd1b161d5b4779a73cf19a7836ebd6 | ||
6 | 82 | 8.43621399176955 | ncus | su1 | e24ef436e02b4823ac5d5b1465a9401e | ||
7 | 68 | 6.99588477366255 | scus | su3 | 90d3d2fc7ecc430c9621ece35651a01 | ||
8 | 167 | 17.1810699588477 | scus | ||||
9 | 55 | 5,65843621399177 | Ueo | su4 | be1d6d7ac9574cbc9a22cb8ee20f16fc | ||
10 | 92 | 9.46502057613169 | 10007007 | ||||
11 | 90 | 9.25925925925926 | 10007006 | ||||
12 | 57 | 5.8641975308642 | 00000000-0000-0000-0000-000000000000 |
Basket implementa el algoritmo "Apriori" para la minería de datos del conjunto de elementos. Extrae todos los segmentos cuya cobertura del conjunto de registros está por encima de un umbral (el valor predeterminado es 5%). Puede ver que se extrajeron más segmentos con otros similares, como los segmentos 0, 1 o 2, 3.
Ambos complementos son potentes y fáciles de usar. Su limitación es que agrupan un único conjunto de registros de una manera no supervisada sin etiquetas. No está claro si los patrones extraídos caracterizan el conjunto de registros seleccionado, los registros anómalos o el conjunto de registros global.
Agrupación en clústeres de la diferencia entre dos conjuntos de registros
El diffpatterns()
complemento supera la limitación de autocluster
y basket
.
Diffpatterns
toma dos conjuntos de registros y extrae los segmentos principales que son diferentes. Un conjunto normalmente contiene el conjunto de registros anómalo que se está investigando. Uno se analiza mediante autocluster
y basket
. El otro conjunto contiene el conjunto de registros de referencia, la línea base.
En la consulta siguiente, diffpatterns
busca clústeres interesantes dentro de los dos minutos del pico, que son diferentes de los clústeres dentro de la línea base. La ventana de línea base se define como los ocho minutos anteriores a las 15:00, cuando se inició el pico. Se extiende por una columna binaria (AB) y se especifica si un registro específico pertenece a la línea base o al conjunto anómalo.
Diffpatterns
implementa un algoritmo de aprendizaje supervisado, donde las dos etiquetas de clase se generaron por el indicador de anomalía frente al indicador de línea base (AB).
let min_peak_t=datetime(2016-08-23 15:00);
let max_peak_t=datetime(2016-08-23 15:02);
let min_baseline_t=datetime(2016-08-23 14:50);
let max_baseline_t=datetime(2016-08-23 14:58); // Leave a gap between the baseline and the spike to avoid the transition zone.
let splitime=(max_baseline_t+min_peak_t)/2.0;
demo_clustering1
| where (PreciseTimeStamp between(min_baseline_t..max_baseline_t)) or
(PreciseTimeStamp between(min_peak_t..max_peak_t))
| extend AB=iff(PreciseTimeStamp > splitime, 'Anomaly', 'Baseline')
| evaluate diffpatterns(AB, 'Anomaly', 'Baseline')
Identificador de segmento | CountA | CountB | Porcentaje | PorcentajeB | PorcentajeDifAB | Región | ScaleUnit | Identificador de Despliegue (DeploymentId) | Punto de seguimiento |
---|---|---|---|---|---|---|---|---|---|
0 | 639 | Veintiuno | 65.74 | 1.7 | 64.04 | Eau | su7 | b5d1d4df547d4a04ac15885617edba57 | |
1 | 167 | 544 | 17.18 | 44.16 | 26.97 | scus | |||
2 | 92 | 356 | 9.47 | 28,9 | 19.43 | 10007007 | |||
3 | 90 | 336 | 9.26 | 27.27 | 18.01 | 10007006 | |||
4 | 82 | 318 | 8.44 | 25,81 | 17.38 | ncus | su1 | e24ef436e02b4823ac5d5b1465a9401e | |
5 | 55 | 252 | 5.66 | 20.45 | 14.8 | Ueo | su4 | be1d6d7ac9574cbc9a22cb8ee20f16fc | |
6 | 57 | 204 | 5,86 | 16.56 | 10.69 |
El segmento más dominante es el mismo segmento extraído por autocluster
. Su cobertura en la ventana anómala de dos minutos también es de 65,74%. Sin embargo, su cobertura en la ventana base de ocho minutos solo alcanza 1,7%. La diferencia es 64.04%. Esta diferencia parece estar relacionada con el pico anómalo. Para comprobar esta suposición, la siguiente consulta divide el gráfico original en los registros que pertenecen a este segmento problemático y registros de los otros segmentos.
let min_t = toscalar(demo_clustering1 | summarize min(PreciseTimeStamp));
let max_t = toscalar(demo_clustering1 | summarize max(PreciseTimeStamp));
demo_clustering1
| extend seg = iff(Region == "eau" and ScaleUnit == "su7" and DeploymentId == "b5d1d4df547d4a04ac15885617edba57"
and ServiceHost == "e7f60c5d-4944-42b3-922a-92e98a8e7dec", "Problem", "Normal")
| make-series num=count() on PreciseTimeStamp from min_t to max_t step 10m by seg
| render timechart
Este gráfico nos permite ver que el pico del martes por la tarde se debe a excepciones de este segmento específico, detectados mediante el diffpatterns
complemento.
Resumen
Los complementos de Machine Learning son útiles para muchos escenarios. e autocluster
basket
implementan un algoritmo de aprendizaje no supervisado y son fáciles de usar.
Diffpatterns
implementa un algoritmo de aprendizaje supervisado y, aunque es más complejo, es más eficaz para extraer segmentos de diferenciación para RCA.
Estos complementos se usan de forma interactiva en escenarios ad hoc y en servicios de supervisión casi en tiempo real automáticos. La detección de anomalías de series temporales va seguida de un proceso de diagnóstico. El proceso está altamente optimizado para cumplir los estándares de rendimiento necesarios.