3 Expresión de trigger
Descripción general
Esta página describe la sintaxis de las expresiones de trigger y los detalles de su evaluación.
La sintaxis de una expresión simple es:
función(/host/item,periodo_de_tiempo)<operador><constante>
En esta expresión, el primer operando (a la izquierda del operador) es una función con sus parámetros entre paréntesis (normalmente el item de datos y el periodo de tiempo).
La función se utiliza para analizar los datos recibidos durante el periodo de tiempo establecido, dando como resultado un valor calculado.
Este valor se compara entonces con el segundo operando, utilizando el operador. En este ejemplo, el segundo operando es una constante, pero también puede ser otra función.
Por ejemplo:
min(/Zabbix server/net.if.in[eth0,bytes],5m)>100K
Este trigger se activa si el número de bytes recibidos en eth0 durante los últimos cinco minutos fue siempre superior a 100 kilobytes. En este caso, la expresión es verdadera y se crea un problema.
Las expresiones de trigger son extremadamente flexibles. En expresiones más complejas, se pueden combinar varias funciones, operadores y constantes.
Consulte también:
- Ejemplos de triggers
- Detección de problemas con triggers (introducción general)
Funciones
Las funciones permiten analizar los valores recopilados, por ejemplo, calcular el promedio o encontrar una cadena específica.
Haga clic en el grupo de funciones respectivo para ver más detalles.
| Grupo de funciones | Funciones | |
|---|---|---|
| Funciones agregadas | avg, bucket_percentile, count, histogram_quantile, item_count, kurtosis, mad, max, min, skewness, stddevpop, stddevsamp, sum, sumofsquares, varpop, varsamp | |
| Funciones foreach | avg_foreach, bucket_rate_foreach, count_foreach, exists_foreach, last_foreach, max_foreach, min_foreach, sum_foreach | |
| Funciones bitwise | bitand, bitlshift, bitnot, bitor, bitrshift, bitxor | |
| Funciones de fecha y hora | date, dayofmonth, dayofweek, now, time | |
| Funciones de histórico | change, changecount, count, countunique, find, first, firstclock, fuzzytime, last, lastclock, logeventid, logseverity, logsource, logtimestamp, monodec, monoinc, nodata, percentile, rate | |
| Funciones de tendencias | baselinedev, baselinewma, trendavg, trendcount, trendmax, trendmin, trendstl, trendsum | |
| Funciones matemáticas | abs, acos, asin, atan, atan2, avg, cbrt, ceil, cos, cosh, cot, degrees, e, exp, expm1, floor, log, log10, max, min, mod, pi, power, radians, rand, round, signum, sin, sinh, sqrt, sum, tan, truncate | |
| Funciones de operador | between, in | |
| Funciones predictivas | forecast, timeleft | |
| Funciones de cadena | ascii, bitlength, bytelength, char, concat, insert, jsonpath, left, length, ltrim, mid, repeat, replace, right, rtrim, trim, xmlxpath | |
Salvo que se indique lo contrario, estas funciones son compatibles con:
Las funciones foreach solo son compatibles con cálculos agregados.
Normalmente, las funciones devuelven valores numéricos para su comparación. Cuando devuelven cadenas, la comparación es posible con los operadores = y <> (ver el ejemplo Detectar software no coincidente en diferentes hosts).
Parámetros de función
Los parámetros de función permiten especificar:
- la clave del item (como
/host/key) para funciones que hacen referencia al historial de un item de host - el período de tiempo (y otros parámetros específicos de la función)
- otras expresiones
Clave del item
El item referenciado debe estar en estado soportado (excepto para la función nodata(), que también se calcula para items no soportados).
La omisión del nombre del host en el primer parámetro (es decir, como en function(//key,parameter,...)) solo se admite en ciertos contextos:
- En la fórmula de items calculados
- En macros de expresión, que pueden usarse en:
- El campo Nombre del evento
- Nombre del gráfico
- La etiqueta de los elementos de mapa "Host" y "Trigger"
En estos contextos, también puede usar la macro {HOST.HOST}.
{HOST.HOST<1-9>} podría usarse en el caso del campo Nombre del evento y el elemento de mapa "Trigger" para referirse a un item específico en la expresión del trigger.
Cuando el nombre del host se omite o se reemplaza por {HOST.HOST} en estos contextos, la referencia apunta al primer item en la expresión del trigger o al primer item en el gráfico.
Fuera de estos contextos admitidos, omitir el nombre del host en las expresiones de triggers resultará en un error.
Consulte el ejemplo Comparar cargas de CPU a largo plazo para ver una ilustración del uso de la doble barra en macros de nombre de evento.
Período de tiempo
Los parámetros específicos de la función se colocan después de la clave del item y se separan de la clave del item mediante una coma.
La mayoría de las funciones numéricas aceptan período de tiempo como parámetro. Permite especificar el intervalo que nos interesa. Puede especificarse como período de tiempo (30s, 10m, 1h) o como un rango de valores (#5 - para los cinco últimos valores).
Puede usar segundos o sufijos de tiempo para indicar el período de tiempo. Cuando va precedido por un signo de almohadilla, el parámetro tiene un significado diferente:
| Expression | Description |
|---|---|
| sum(/host/key,10m) | Suma de los valores de los últimos 10 minutos. |
| sum(/host/key,#10) | Suma de los últimos diez valores. |
Los parámetros con un signo de almohadilla tienen un significado diferente con la función last: indican el valor anterior N, por lo que, dados los valores 30, 70, 20, 60, 50 (del más reciente al menos reciente):
last(/host/key,#2)devolvería '70'last(/host/key,#5)devolvería '50'
El período de tiempo se mide hasta "ahora", donde "ahora" es el último momento de recálculo del trigger (consulte Frecuencia de cálculo); "ahora" no es la hora "actual" del server.
El período de tiempo especifica una de estas opciones:
- Todos los valores entre "ahora - período de tiempo" y "ahora" (o, con desplazamiento temporal aplicado, entre "ahora - desplazamiento temporal - período de tiempo" y "ahora - desplazamiento temporal").
- El número especificado de valores del pasado, hasta "ahora".
Si no existen datos para el período de evaluación especificado, el trigger o el item calculado que usa esta función pasa a no ser compatible.
Tenga en cuenta que:
- Si en el trigger solo se usa una única función (que hace referencia al historial de datos), "ahora" siempre es el último valor recibido. Por ejemplo, si el último valor se recibió hace una hora, el período de tiempo se considerará hasta el último valor de hace una hora.
- Un nuevo trigger se calcula en cuanto se recibe el primer valor (funciones de historial); se calculará en un plazo de 30 segundos para las funciones de fecha y hora y nodata(). Por lo tanto, el trigger se calculará aunque quizá el período de tiempo establecido (por ejemplo, una hora) aún no haya transcurrido desde que se creó el trigger. El trigger también se calculará después del primer valor, aunque el intervalo de tiempo se haya establecido, por ejemplo, en los diez últimos valores.
Desplazamiento de tiempo
Se admite un desplazamiento de tiempo opcional con el tiempo o el recuento de valores como parámetro de la función. Este parámetro permite hacer referencia a datos de un período de tiempo en el pasado.
El desplazamiento de tiempo comienza con now, que especifica la hora actual, y va seguido de +N<unidad de tiempo> o -N<unidad de tiempo>, para sumar o restar N unidades de tiempo.
Por ejemplo, avg(/host/key,1h:now-1d) devolverá el valor promedio de una hora hace un día.
El desplazamiento de tiempo especificado en meses (M) y años (y) solo es compatible con funciones de tendencias. Otras funciones admiten segundos (s), minutos (m), horas (h), días (d) y semanas (w).
Desplazamiento de tiempo con períodos de tiempo absolutos
Se admiten períodos de tiempo absolutos en el parámetro de desplazamiento de tiempo, por ejemplo, de medianoche a medianoche para un día, de lunes a domingo para una semana, del primer día al último día del mes para un mes.
El desplazamiento de tiempo para períodos de tiempo absolutos comienza con now, que especifica la hora actual, y va seguido de cualquier número de operaciones de tiempo: /<unidad de tiempo> - define el principio y el final de la unidad de tiempo, por ejemplo, de medianoche a medianoche para un día, +N<unidad de tiempo> o -N<unidad de tiempo> - para sumar o restar N unidades de tiempo.
Tenga en cuenta que el valor del desplazamiento de tiempo puede ser mayor o igual a 0, mientras que el valor mínimo del período de tiempo es 1.
| Parámetro | Descripción |
|---|---|
| 1d:now/d | Ayer |
| 1d:now/d+1d | Hoy |
| 2d:now/d+1d | Últimos 2 días |
| 1w:now/w | Semana pasada |
| 1w:now/w+1w | Esta semana |
Otras expresiones
Los parámetros de función pueden contener otras expresiones, como en la siguiente sintaxis:
min(min(/host/key,1h),min(/host2/key2,1h)*10)
Tenga en cuenta que no se pueden utilizar otras expresiones si la función hace referencia al historial del item. Por ejemplo, la siguiente sintaxis no está permitida:
min(/host/key,#5*10)
Mientras que otras expresiones de trigger como parámetros de función están limitadas a funciones que no sean de historial en los triggers, esta limitación no se aplica en los items calculados.
Operadores
Se admiten los siguientes operadores para triggers (en orden de prioridad de ejecución descendente):
| Prioridad | Operador | Definición | Notas para valores desconocidos | Forzar conversión de operando a float 1 |
|---|---|---|---|---|
| 1 | - | Menos unario | -Desconocido → Desconocido | Sí |
| 2 | not | Negación lógica | not Desconocido → Desconocido | Sí |
| 3 | * | Multiplicación | 0 * Desconocido → Desconocido (sí, Desconocido, distinto de 0 - para no perder Desconocido en operaciones aritméticas) 1.2 * Desconocido → Desconocido |
Sí |
| / | División | Desconocido / 0 → error Desconocido / 1.2 → Desconocido 0.0 / Desconocido → Desconocido |
Sí | |
| 4 | + | Suma aritmética | 1.2 + Desconocido → Desconocido | Sí |
| - | Resta aritmética | 1.2 - Desconocido → Desconocido | Sí | |
| 5 | < | Menor que. El operador se define como: A<B ⇔ (A<B-0.000001) |
1.2 < Desconocido → Desconocido | Sí |
| <= | Menor o igual que. El operador se define como: A<=B ⇔ (A≤B+0.000001) |
Desconocido <= Desconocido → Desconocido | Sí | |
| > | Mayor que. El operador se define como: A>B ⇔ (A>B+0.000001) |
Sí | ||
| >= | Mayor o igual que. El operador se define como: A>=B ⇔ (A≥B-0.000001) |
Sí | ||
| 6 | = | Igual a. El operador se define como: A=B ⇔ (A≥B-0.000001) y (A≤B+0.000001) |
No 1 | |
| <> | Distinto de. El operador se define como: A<>B ⇔ (A<B-0.000001) o (A>B+0.000001) |
No 1 | ||
| 7 | and | AND lógico | 0 and Desconocido → 0 1 and Desconocido → Desconocido Desconocido and Desconocido → Desconocido |
Sí |
| 8 | or | OR lógico | 1 or Desconocido → 1 0 or Desconocido → Desconocido Desconocido or Desconocido → Desconocido |
Sí |
1 El operando de tipo string aún se convierte a numérico si:
- el otro operando es numérico
- se utiliza un operador distinto de = o <> sobre un operando
(Si la conversión falla, el operando numérico se convierte a string y ambos operandos se comparan como cadenas.)
Los operadores not, and y or distinguen entre mayúsculas y minúsculas y deben estar en minúsculas. También deben estar rodeados de espacios o paréntesis.
Todos los operadores, excepto el - unario y not, tienen asociatividad de izquierda a derecha. El - unario y not no son asociativos (lo que significa que se debe usar -(-1) y not (not 1) en lugar de --1 y not not 1).
Resultado de la evaluación:
- Los operadores <, <=, >, >=, =, <> devolverán '1' en la expresión del trigger si la relación especificada es verdadera y '0' si es falsa. Si al menos un operando es Desconocido, el resultado es Desconocido;
- and para operandos conocidos devolverá '1' si ambos operandos son distintos de '0'; en caso contrario, devolverá '0'; para operandos desconocidos, and devolverá '0' solo si un operando es igual a '0'; en caso contrario, devolverá 'Desconocido';
- or para operandos conocidos devolverá '1' si alguno de sus operandos es distinto de '0'; en caso contrario, devolverá '0'; para operandos desconocidos, or devolverá '1' solo si un operando es distinto de '0'; en caso contrario, devolverá 'Desconocido';
- El resultado del operador de negación lógica not para un operando conocido es '0' si el valor de su operando es distinto de '0'; '1' si el valor de su operando es igual a '0'. Para un operando desconocido, not devuelve 'Desconocido'.
Estado de expresión desconocido
Es posible que aparezca un operando desconocido en una expresión de trigger cuando:
- se utiliza un item no soportado
- la evaluación de la función, para un item soportado, da como resultado un error
En este caso, la expresión del trigger generalmente se evalúa como Unknown (ya que no puede ser evaluada)
Es posible recibir notificaciones sobre triggers desconocidos.
Excepciones
A pesar de un operando desconocido, las expresiones de trigger pueden evaluarse a un resultado conocido (Problem/OK) en algunos casos:
- La función
nodata()se evalúa independientemente de si el item referenciado es soportado o no. - Las expresiones con AND/OR pueden evaluarse a un resultado conocido en dos casos:
- Caso 1: "
1 or some_function(unsupported_item1) or some_function(unsupported_item2) or ..." se evalúa a un resultado conocido ('1' o "Problem"), - Caso 2: "
0 and some_function(unsupported_item1) and some_function(unsupported_item2) and ..." se evalúa a un resultado conocido ('0' o "OK").
- Caso 1: "
- Si la evaluación de la función para un item soportado da como resultado un error, el valor de la función se convierte en
Unknowny participa como operando desconocido en la evaluación posterior de la expresión.
Los operandos desconocidos pueden "desaparecer" solo en expresiones lógicas como se describe arriba.
En las expresiones aritméticas, los operandos desconocidos siempre conducen a Unknown (excepto la división por 0).
El estado de expresión desconocido no cambia el estado del trigger (Problem/OK).
Por lo tanto, si el estado del trigger era "Problem" (ver Caso 1), permanece en el estado de problema incluso si la parte conocida se resuelve ('1' se convierte en '0'), porque la expresión ahora se evalúa como Unknown y eso no cambia el estado del trigger.
Si una expresión de trigger con varios items no soportados se evalúa como Unknown, el mensaje de error en el frontend se refiere al último item no soportado evaluado.
Almacenamiento en caché de valores
Los valores necesarios para la evaluación de disparadores son almacenados en caché por el servidor Zabbix. Debido a esto, la evaluación de disparadores provoca una mayor carga en la base de datos durante algún tiempo después de reiniciar el servidor. La caché de valores no se borra cuando se eliminan los valores históricos de los ítems (ya sea manualmente o por el limpiador), por lo que el servidor utilizará los valores almacenados en caché hasta que sean más antiguos que los períodos de tiempo definidos en las funciones de los disparadores o hasta que se reinicie el servidor.
Si no hay datos recientes en la caché y no se ha definido un período de consulta en la función, Zabbix, por defecto, buscará en la base de datos valores históricos hasta una semana atrás.