En esta página, se explica por qué algunas políticas de alertas con condiciones basadas en el lenguaje de consulta de Monitoring (MQL) pueden comportarse de manera diferente de lo previsto y se ofrecen posibles soluciones para esas situaciones.
Brechas de datos
Creaste una política de alertas con una condición basada en MQL y los resultados de la consulta de MQL muestran una brecha inesperada en los datos informados.
Las brechas aparecen en los datos alineados cuando un cálculo da como resultado un valor nulo en una marca de tiempo determinada. Por ejemplo, la siguiente tabla de datos está relacionada con una consulta con un período de 30 segundos:
Tabla A1
Marca de tiempo | Valor |
---|---|
00:00:00 | 1 |
00:00:30 | 2 |
00:01:30 | 3 |
00:02:00 | 4 |
Como tienes un período de 30 segundos, esperarías ver una marca de tiempo a las 00:01:00. Este tipo de brechas pueden deberse a muchos motivos.
Vacías debido a la alineación
Las ventanas de alineador demasiado estrechas pueden causar brechas de datos. Por ejemplo, la siguiente tabla de datos sin procesar de métricas sin alinear se escribe aproximadamente cada 30 segundos.
Tabla B1
Marca de tiempo | Valor |
---|---|
00:00:01 | 1 |
00:00:28 | 2 |
00:01:01 | 3 |
00:01:32 | 4 |
Si ejecutas una consulta a las 00:02:00 que alinea tus datos mediante una operación next_older(30s)
, recibirás el siguiente resultado, que tiene una brecha de datos en 00:01:00:
Tabla B2
Marca de tiempo | Valor |
---|---|
00:00:30 | 2 |
00:00:28 | 3 |
00:01:01 | 4 |
Esta brecha de datos se produce porque ningún punto en los datos sin procesar cae en la ventana de 30 segundos que termina a las 00:01:00. Para evitar un espacio como este, usa una ventana más grande.
Por ejemplo, una operación next_older(1m)
produce una tabla sin brechas de datos:
Tabla B3
Marca de tiempo | Valor |
---|---|
00:00:01 | 1 |
00:00:28 | 2 |
00:01:01 | 3 |
00:01:32 | 4 |
En general, si tus datos se escriben cada S segundos, usa una ventana de alineación que sea mayor que S. De esta manera, puedes dar cuenta de la distribución desigual de datos a lo largo del tiempo.
Brechas debidas a operaciones de la tabla
Algunas operaciones de tablas pueden producir brechas inesperadas. Por ejemplo, la operación join
produce resultados solo en las marcas de tiempo que tienen un valor en todas las tablas de entrada.
Las operaciones de tabla como join
pueden producir brechas. Por ejemplo, puedes unir las siguientes dos tablas alineadas:
Tabla C1
Marca de tiempo | Valor |
---|---|
00:00:30 | 2 |
00:01:30 | 3 |
00:02:00 | 4 |
Tabla C2
Marca de tiempo | Valor |
---|---|
00:00:30 | 4 |
00:01:00 | 3 |
00:01:30 | 2 |
00:02:00 | 1 |
Luego, recibirás el siguiente resultado:
Tabla C3
Marca de tiempo | Valor A | Valor B |
---|---|---|
00:00:30 | 1 | 4 |
00:01:30 | 2 | 2 |
00:02:00 | 3 | 1 |
Esta tabla no tiene un valor en 00:01:00
debido a la ausencia de un valor en 00:01:00
en la Tabla C1.
Brechas debido a valores faltantes
Algunas funciones producen brechas cuando su resultado no se puede convertir o no está definido. Por ejemplo, aplica value.string_to_int64
a la siguiente tabla de valores de string:
Tabla D1
Marca de tiempo | Valor |
---|---|
00:00:30 | "4" |
00:01:00 | "3" |
00:01:30 | "init" |
00:02:00 | "1" |
La tabla resultante contiene un intervalo a 00:01:30 porque MQL no puede convertir 'init'
en un número entero:
Tabla D2
Marca de tiempo | Valor |
---|---|
00:00:30 | 4 |
00:01:00 | 3 |
00:01:30 | null |
00:02:00 | 1 |
Para evitar brechas en los datos debido a valores incorrectos o faltantes, usa las funciones has_value
o or_else
para controlar esos valores.
has_value
muestra false
si su argumento se evalúa como nulo. De lo contrario, muestra true
. Por ejemplo, si aplicas value has_value(1 / val())
a la Tabla D2, tus resultados no tendrán brechas:
Tabla D3
Marca de tiempo | Valor |
---|---|
00:00:30 | true |
00:01:00 | true |
00:01:30 | false |
00:02:00 | true |
La alerta de umbral se activa cuando el gráfico de MQL muestra que no se superó el umbral
Si deseas recibir notificaciones si una máquina virtual (VM) tiene grandes fluctuaciones en el uso de CPU, debes crear una política de alertas que supervise la métrica compute.googleapis.com/instance/cpu/utilization
. Debes crear y configurar la condición para generar un incidente cuando el uso de CPU cada seis horas sea mayor que un umbral del 50%. Tu condición usa la siguiente consulta:
fetch gce_instance | metric 'compute.googleapis.com/instance/cpu/utilization' | group_by 5m, [value_utilization_mean: mean(value.utilization)] | align delta_gauge(6h) | condition val() > 0.5
Recibirás una alerta después de 30 segundos. Sin embargo, en el gráfico de MQL se muestra que el delta de uso no ha aumentado el umbral.
Las políticas de alertas tienen una ventana de resultados de 30 segundos. No se puede reemplazar este período si se deja el período sin definir o si se define uno diferente en tu consulta. Por ejemplo, las siguientes consultas todavía usan una ventana de salida de 30 segundos:
fetch gce_instance | metric 'compute.googleapis.com/instance/cpu/utilization' | group_by 5m, [value_utilization_mean: mean(value.utilization)] | align delta_gauge(6h) # period not 30 seconds | condition val() > 0.5
fetch gce_instance | metric 'compute.googleapis.com/instance/cpu/utilization' | group_by 5m, [value_utilization_mean: mean(value.utilization)] | align delta_gauge() # undefined period | condition val() > 0.5
Se superó el umbral de tu métrica en los primeros 30 segundos de la evaluación, por lo que Cloud Monitoring envió una alerta. Para evitar este problema, agrega | every 30s
al final de tu consulta a fin de verificar que la ventana de salida produzca los resultados deseados. Por ejemplo:
fetch gce_instance | metric 'compute.googleapis.com/instance/cpu/utilization' | group_by 5m, [value_utilization_mean: mean(value.utilization)] | align delta_gauge() | every 30s # explicit 30 second output window | condition val() > 0.5
Error: No se pudo guardar la política de alertas. La solicitud contiene un argumento no válido.
Creaste una política de alertas con una condición basada en MQL. Cuando guardes la política de alertas, recibirás el siguiente mensaje de error:
Error: Unable to save alerting policy. Request contains an invalid argument.
Algunas operaciones de la tabla de MQL, como group_by
, requieren que sus entradas estén alineadas. Si tu consulta no alinea sus entradas, MQL alinea automáticamente los datos. Sin embargo, esta alineación automática a veces genera argumentos no válidos.
Para evitar este problema, si tu consulta usa una operación de tabla, asegúrate de que incluya la alineación de los datos. Para obtener una lista de las funciones de alineación de datos, consulta la sección Alineación en la documentación de referencia de MQL.
La línea de umbral no aparece en el gráfico de MQL.
Creaste una política de alertas de umbral de métrica con una condición basada en MQL. Sin embargo, la línea del umbral no aparece en el gráfico de MQL.
Cloud Monitoring dibuja la línea de umbral solo cuando tu consulta contiene una expresión booleana que compara dos valores, en la que un valor es una columna y el otro es un literal. Por ejemplo, la siguiente expresión grafica una línea de umbral:
val() > 5'GBy'
Sin embargo, las siguientes expresiones no grafican una línea de umbral:
val(0) > val(1) #one of the values must be a literal
5 > 4 #one of the values must be a column
val() #the expression must be a comparison