Las expresiones de reglas de alerta permiten configurar condiciones complejas al crear una regla de alerta. Una expresión se compone de elementos básicos como nombres de métricas, operadores y funciones, y admite la comparación de datos históricos.
Elementos
Cloud Monitor evalúa las expresiones de reglas de alerta con base en los datos agregados de las métricas o de instancias individuales. Si los datos de monitoreo cumplen con la expresión, se activa una alerta. Una expresión consta de nombres de métricas, miembros de métricas, operadores, funciones y datos de monitoreo. Ejemplo: @cpu_total[60].$instanceId != 'i-2ze3jvsy7620giru****' && @cpu_total[60].$Average > 60.
-
Nombres de métricas
Para obtener más información sobre las métricas de los diferentes servicios en la nube, consulte Appendix 1: Metrics for Alibaba Cloud products.
Una expresión de métrica utiliza el formato
@Metric name[Aggregation period]. Por ejemplo, para monitorear una instancia de Elastic Compute Service (ECS) con base en la métrica CPUUtilization, utilice@CPUUtilization[60].NotaEl periodo de agregación de las métricas para ECS se muestra en la columna Min Periods de la tabla en la página de lista de métricas para ECS. Para ver el periodo de agregación de métricas de otro servicio en la nube, seleccione el servicio en la lista desplegable.
El nombre de una métrica debe cumplir con la expresión regular
[a-zA-Z][_a-zA-Z0-9]*. Si un nombre de métrica no cumple con la expresión regular, utilice el formato@(Metric name)[Aggregation period], por ejemplo,@('vm.DiskIORead')[60].
Los nombres de métricas deben combinarse con los miembros de métricas para especificar el alcance de los datos de monitoreo.
-
Miembros de métricas
Los miembros de métricas especifican el alcance de los datos de monitoreo para una métrica. Un miembro de métrica debe comenzar con un signo de dólar ($). Utilice el formato
@Metric name[Aggregation period].$Metric member. Por ejemplo, los métodos estadísticos para la métrica CPUUtilization de ECS son Average, Minimum y Maximum. La expresión para el valor promedio es@CPUUtilization[60].$Average. Las dimensiones para la métrica CPUUtilization de ECS sonuserIdyinstanceId. La expresión para una instancia específica es@CPUUtilization[60].$instanceId.NotaLos miembros de las métricas para ECS se muestran en las columnas Dimensions y Statistics de la tabla en la página de lista de métricas para ECS. Para ver los miembros de métricas de otro servicio en la nube, seleccione el servicio en la lista desplegable.
-
Operadores
Los operadores evalúan si los datos de monitoreo cumplen con la condición de alerta.
-
Operadores básicos
Categoría
Operador y descripción
Operadores matemáticos
-
+: suma -
-: resta -
*: multiplicación -
/: división -
%: módulo -
**: exponenciación
Operadores de comparación
-
==: igual a -
! =: diferente de -
>: mayor que -
>=: mayor o igual que -
<: menor que -
<=: menor o igual que
Operadores lógicos
-
&&oand: AND -
||oor: OR -
!onot: NOT
Ejemplo:
$Average > 50 && $instanceId != 'i-not-exist'.NotaSi los valores a ambos lados de un operador matemático o de comparación no son del mismo tipo, una cadena se convierte a número; por ejemplo,
'123' + 321 == 123 + '321' == 444. -
-
Operadores de cadenas
Operador de cadenas
Descripción
Ejemplo
matches
Coincide con una expresión regular.
Utilice el operador lógico NOT con
matchespara negar una coincidencia de expresión regular.!("hello" matches "^fo.+")NotaEl operador
!tiene mayor prioridad que el operador matches. Por lo tanto, debe encerrar la expresión regular entre paréntesis ().contains
Contiene una cadena.
'abcdef' contains 'cde'startsWith
Comprueba si una cadena comienza con un prefijo especificado.
'abcdef' startsWith 'abc'endsWith
Comprueba si una cadena termina con un sufijo especificado.
'abcdef' endsWith 'def' -
Operadores de pertenencia
Operador de pertenencia
Descripción
Ejemplo
in
Contiene
-
userld in [120886317861****, 425876]El valor de
userldes120886317861**o20654616023382**. -
"foo" in {'foo':1, 'bar':2}El valor de foo es
fooobar.
not in
No contiene
-
userld not in [120886317861****, 425876]El valor de
userldno es120886317861**ni20654616023382**. -
"foo" not in {'foo1':1, 'bar':2}El valor de foo no es
foo1nibar.
-
-
Operadores ternarios
?:: Funciona igual que el operador ternario en C y Java; por ejemplo, @CPUUtilization[60].$Average > 30? "ok": "lower".
-
-
Operaciones de datos
-
Tipos de datos
Tipo de dato
Descripción
Ejemplo
string
Una cadena encerrada entre comillas simples o dobles.
"hello", 'hello'number
Un número entero o de punto flotante.
NotaPara números enteros, puede usar guiones bajos (_) como separadores para mejorar la legibilidad.
-
103, 2.5, .5, 2e+6 -
1_000_000
array
Un arreglo.
[1, 2, 3]map o dict
Un diccionario.
{"foo":"bar"}bool
Un valor booleano.
trueofalsenil
Un valor vacío.
nil -
-
Funciones integradas
Función integrada
Descripción
`len(arraymap
string)`
Devuelve la longitud de un arreglo, mapa o cadena.
now()Devuelve una marca de tiempo UTC en milisegundos.
abs(number)Devuelve el valor absoluto (un número de punto flotante).
rand()Devuelve un número de punto flotante entre
[0, 1).rand(N)Devuelve un número de punto flotante entre
[0, N).toLower(string)Convierte una cadena a minúsculas.
toUpper(string)Convierte una cadena a mayúsculas.
-
Comparación
NotaEjemplo de una métrica:
@cpu_total[60].Un método de agregación es una cadena. Ejemplo:
'$Average'.El resultado de la comparación es un valor booleano. Si el valor de la métrica del periodo actual es mayor que el valor de la métrica del periodo anterior, el resultado de la comparación es
true. Si el valor de la métrica del periodo actual es menor que el valor de la métrica del periodo anterior, el resultado de la comparación esfalse.
Función
Descripción
CompareLastPeriod(metric, aggregation method, comparison result)Devuelve el cambio porcentual en comparación con el periodo anterior. Ejemplo:
CompareLastPeriod(@cpu_total[60], '$Average', true).Por ejemplo, si el valor promedio de cpu_total en el periodo actual es 20% y en el periodo anterior es 15%, el valor devuelto depende del resultado de la comparación.
-
Si el resultado de la comparación es
true, esta función devuelve (20 - 15) × 100/20. -
Si el resultado de la comparación es
false, esta función devuelve (15 - 20) × 100/20.
CompareLastHour(metric, aggregation method, comparison result)Devuelve el cambio porcentual en comparación con la hora anterior.
CompareLastHour(@cpu_total[60], '$Average', true) > 10: Si el valor promedio de cpu_total aumenta un 10% en comparación con la hora anterior, se activa una alerta.CompareLastWeek(metric, aggregation method, comparison result)Obtiene los datos en comparación con el día anterior.
CompareYesterday(@cpu_total[60], '$Average', true) > 10: Si el valor promedio de cpu_total aumenta un 10% en comparación con la semana anterior, se activa una alerta.CompareLastWeek(metric, aggregation method, comparison result)Obtiene los datos en comparación con la semana anterior.
CompareLastWeek(@cpu_total[60], '$Average', true) > 10: Si el valor promedio de cpu_total aumenta un 10% en comparación con la semana anterior, se activa una alerta.ComparePast(metric, aggregation method, comparison result, seconds)Devuelve el cambio porcentual en comparación con el número especificado de
secondsprevios a la hora actual.Las cuatro funciones anteriores son formas simplificadas de esta función.
-
CompareLastHour(@cpu_total[60], '$Average', true)equivale aComparePast(@cpu_total[60], '$Average', true, 3600). -
CompareYesterday(@cpu_total[60], '$Average', true)equivale aComparePast(@cpu_total[60], '$Average', true, 246060). -
CompareLastWeek(@cpu_total[60], '$Average', true)equivale aComparePast(@cpu_total[60], '$Average', true, 72460*60).
-
Funciones históricas
Función
Descripción
LastPeriod(metric)Devuelve los datos del periodo anterior. Ejemplo:
LastPeriod(@cpu_total[60]).$Average > 75. Si el valor promedio decpu_totalen el periodo anterior supera el 75%, se activa una alerta.LastHour(metric)Devuelve los datos de la hora anterior. Ejemplo:
LastHour(@cpu_total[60]).$Average > 75. Si el valor promedio decpu_totalen la hora anterior supera el 75%, se activa una alerta.Yesterday(metric)Devuelve los datos del día anterior. Ejemplo:
Yesterday(@cpu_total[60]).$Average > 75. Si el valor promedio decpu_totalen el día anterior supera el 75%, se activa una alerta.LastWeek(metric)Devuelve los datos de la semana anterior. Ejemplo:
LastWeek(@cpu_total[60]).$Average > 75. Si el valor promedio decpu_totalen la semana anterior supera el 75%, se activa una alerta.Past(metric, seconds)Devuelve los datos correspondientes al número especificado de segundos previos a la hora actual. El número debe ser un múltiplo entero del periodo de agregación de la métrica. Las funciones anteriores son formas abreviadas de esta función. Por ejemplo,
Past(@cpu_total[60], 3600) > 75equivale aLastHour(@cpu_total[60]).$Average > 75.
-
Escenarios
A continuación se listan escenarios comunes para las expresiones de reglas de alerta.
|
Escenario |
Expresión de regla de alerta |
Descripción |
|
Establecer un umbral dedicado para una instancia específica y un umbral diferente para otras instancias |
|
Para la instancia |
|
Excluir una instancia específica de las alertas |
|
Para la instancia |
|
Establecer una condición de alerta con base en varias métricas |
|
Si el valor promedio de cpu_total para una instancia supera el 50% y el valor promedio de memory_usage para la misma instancia supera el 80%, se activa una alerta. |
|
Monitorear la latencia de reporte de métricas |
|
Si el tiempo de espera del heartbeat supera un minuto, se activa una alerta. Nota
El parámetro reportTime indica cuándo se reportó una métrica. Es un parámetro integrado de cada métrica. La función |