Se encuentra viendo la documentación de la versión en desarrollo, puede estar incompleta.
Esta página fue traducida automáticamente. Si detectas un error, selecciónalo y presiona Ctrl+Enter para informarlo a los editores.

2 Expresión de disparador

Descripción general

Las expresiones utilizadas en disparadores son muy flexibles. Puede usarlas para crear pruebas lógicas complejas sobre estadísticas monitorizadas.

Una expresión simple utiliza una función que se aplica al elemento con algunos parámetros. La función devuelve un resultado que se compara con el umbral, utilizando un operador y una constante.

La sintaxis de una expresión simple útil es function(/host/key,parameter)<operador><constante>.

Por ejemplo:

min(/Zabbix server/net.if.in[eth0,bytes],5m)>100K

se activará si el número de bytes recibidos durante los últimos cinco minutos fue siempre superior a 100 kilobytes.

Aunque la sintaxis es exactamente la misma, desde el punto de vista funcional existen dos tipos de expresiones de disparador:

  • expresión de problema: define las condiciones del problema
  • expresión de recuperación (opcional): define condiciones adicionales para la resolución del problema

Al definir solo una expresión de problema, esta expresión se utilizará tanto como umbral de problema como de recuperación. Tan pronto como la expresión de problema se evalúe como VERDADERA, hay un problema. Tan pronto como la expresión de problema se evalúe como FALSA, el problema se resuelve.

Al definir tanto la expresión de problema como la expresión de recuperación suplementaria, la resolución del problema se vuelve más compleja: no solo la expresión de problema debe ser FALSA, sino que también la expresión de recuperación debe ser VERDADERA. Esto es útil para crear histéresis y evitar la oscilación del disparador.

No es productivo utilizar la macro {TRIGGER.VALUE} en una expresión de recuperación porque esta expresión solo se evalúa cuando el disparador está en estado de "Problema". En consecuencia, {TRIGGER.VALUE} siempre se resolverá como "1" (lo que indica un estado de "Problema") al evaluar la expresión.

Funciones

Las funciones permiten calcular los valores recogidos (promedio, mínimo, máximo, suma), buscar cadenas, referenciar la hora actual y otros factores.

Está disponible una lista completa de funciones soportadas.

Normalmente, las funciones devuelven valores numéricos para su comparación. Cuando devuelven cadenas, la comparación es posible con los operadores = y <> (ver ejemplo).

Parámetros de función

Los parámetros de función permiten especificar:

  • host y clave del ítem (funciones que hacen referencia solo al historial del ítem del host)
  • parámetros específicos de la función
  • otras expresiones (no disponibles para funciones que hacen referencia al historial del ítem del host, consulte otras expresiones para ver ejemplos)

El host y la clave del ítem pueden especificarse como /host/key.
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 ítems calculados
  • En macros de expresión, que pueden usarse en:

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 "Disparador" para referirse a un ítem específico en la expresión del disparador. Cuando se omite el nombre del host o se reemplaza por {HOST.HOST} en estos contextos, la referencia apunta al primer ítem en la expresión del disparador o al primer ítem en el gráfico. Fuera de estos contextos admitidos, omitir el nombre del host en expresiones de disparador resultará en un error. Consulte el Ejemplo 18 para ver una ilustración del uso de la doble barra en macros de Nombre del evento.

El ítem referenciado debe estar en un estado admitido (excepto para la función nodata(), que también se calcula para ítems no admitidos).

Mientras que otras expresiones de disparador como parámetros de función están limitadas a funciones que no son de historial en disparadores, esta limitación no se aplica en ítems calculados.

Parámetros específicos de la función

Los parámetros específicos de la función se colocan después de la clave del elemento y se separan de la clave del elemento por una coma. Consulte las funciones compatibles para obtener una lista completa de estos parámetros.

La mayoría de las funciones numéricas aceptan el tiempo como parámetro. Puede utilizar segundos o sufijos de tiempo para indicar el tiempo. Precedido por una almohadilla, el parámetro tiene un significado diferente:

Expresión Descripción
sum(/host/key,10m) Suma de los valores en los últimos 10 minutos.
sum(/host/key,#10) Suma de los últimos diez valores.

Los parámetros con una almohadilla tienen un significado diferente con la función last: denotan el N-ésimo valor anterior, 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'
Desplazamiento temporal

Se admite un desplazamiento temporal opcional con tiempo o 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 temporal 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 temporal 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 temporal con períodos de tiempo absolutos

Se admiten períodos de tiempo absolutos en el parámetro de desplazamiento temporal, 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 temporal 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 inicio 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 temporal 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 las funciones 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 ítem. Por ejemplo, la siguiente sintaxis no está permitida:

min(/host/key,#5*10)

Operadores

Se admiten los siguientes operadores para disparadores (en orden descendente de prioridad de ejecución):

Prioridad Operador Definición Notas para valores desconocidos Forzar conversión de operando a float 1
1 - Menos unario -Desconocido → Desconocido
2 not Negación lógica not Desconocido → Desconocido
3 * Multiplicación 0 * Desconocido → Desconocido
(sí, Desconocido, no 0 - para no perder
Desconocido en operaciones aritméticas)
1.2 * Desconocido → Desconocido
/ División Desconocido / 0 → error
Desconocido / 1.2 → Desconocido
0.0 / Desconocido → Desconocido
4 + Suma aritmética 1.2 + Desconocido → Desconocido
- Resta aritmética 1.2 - Desconocido → Desconocido
5 < Menor que. El operador se define como:

A<B ⇔ (A<B-0.000001)
1.2 < Desconocido → Desconocido
<= Menor o igual que. El operador se define como:

A<=B ⇔ (A≤B+0.000001)
Desconocido <= Desconocido → Desconocido
> Mayor que. El operador se define como:

A>B ⇔ (A>B+0.000001)
>= Mayor o igual que. El operador se define como:

A>=B ⇔ (A≥B-0.000001)
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 Y lógico 0 and Desconocido → 0
1 and Desconocido → Desconocido
Desconocido and Desconocido → Desconocido
8 or O lógico 1 or Desconocido → 1
0 or Desconocido → Desconocido
Desconocido or Desconocido → Desconocido

1 El operando de tipo cadena aún se convierte a numérico si:

  • otro operando es numérico
  • se utiliza un operador distinto de = o <> en un operando

(Si la conversión falla, el operando numérico se convierte a cadena 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 disparador 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'; de lo contrario, devolverá '0'; para operandos desconocidos and devolverá '0' solo si un operando es igual a '0'; de lo contrario, devolverá 'Desconocido';
  • or para operandos conocidos devolverá '1' si alguno de sus operandos es distinto de '0'; de lo contrario, devolverá '0'; para operandos desconocidos or devolverá '1' solo si un operando es distinto de '0'; de lo 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 operando desconocido not devuelve 'Desconocido'.

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.

Ejemplos de disparadores

Ejemplo 1

La carga del procesador es demasiado alta en el servidor Zabbix.

last(/Zabbix server/system.cpu.load[all,avg1])>5

Al usar la función 'last()', estamos haciendo referencia al valor más reciente. /Zabbix server/system.cpu.load[all,avg1] proporciona un nombre corto del parámetro monitorizado. Especifica que el equipo es 'Zabbix server' y la clave que se está monitorizando es 'system.cpu.load[all,avg1]'. Finalmente, >5 significa que el disparador está en estado de PROBLEMA siempre que la medición más reciente de la carga del procesador del servidor Zabbix sea mayor que 5.

Ejemplo 2

www.example.com está sobrecargado.

last(/www.example.com/system.cpu.load[all,avg1])>5 or min(/www.example.com/system.cpu.load[all,avg1],10m)>2 

La expresión es verdadera cuando la carga actual del procesador es superior a 5 o la carga del procesador fue superior a 2 durante los últimos 10 minutos.

Ejemplo 3

/etc/passwd ha sido modificado.

last(/www.example.com/vfs.file.cksum[/etc/passwd],#1)<>last(/www.example.com/vfs.file.cksum[/etc/passwd],#2)

La expresión es verdadera cuando el valor anterior de la suma de comprobación de /etc/passwd difiere del más reciente.

Expresiones similares pueden ser útiles para monitorizar cambios en archivos importantes, como /etc/passwd, /etc/inetd.conf, /kernel, etc.

Ejemplo 4

Alguien está descargando un archivo grande de Internet.

Uso de la función min:

min(/www.example.com/net.if.in[eth0,bytes],5m)>100K

La expresión es verdadera cuando el número de bytes recibidos en eth0 es superior a 100 KB en los últimos 5 minutos.

Ejemplo 5

Ambos nodos del servidor SMTP en clúster están caídos.

Observe el uso de dos hosts diferentes en una expresión:

last(/smtp1.example.com/net.tcp.service[smtp])=0 and last(/smtp2.example.com/net.tcp.service[smtp])=0

La expresión es verdadera cuando ambos servidores SMTP están caídos tanto en smtp1.example.com como en smtp2.example.com.

Ejemplo 6

Es necesario actualizar el agente Zabbix.

Uso de la función find():

find(/example.example.com/agent.version,,"like","beta8")=1

La expresión es verdadera si el agente Zabbix tiene la versión beta8.

Ejemplo 7

El servidor no es accesible.

count(/example.example.com/icmpping,30m,,"0")>5

La expresión es verdadera si el equipo "example.example.com" no es accesible más de 5 veces en los últimos 30 minutos.

Ejemplo 8

Sin latidos en los últimos 3 minutos.

Uso de la función nodata():

nodata(/example.example.com/tick,3m)=1

Para utilizar este disparador, 'tick' debe definirse como un elemento trapper de Zabbix. El equipo debe enviar periódicamente datos para este elemento utilizando zabbix_sender. Si no se reciben datos en 180 segundos, el valor del disparador pasa a ser PROBLEMA.

Tenga en cuenta que 'nodata' puede usarse para cualquier tipo de elemento.

Ejemplo 9

Actividad de la CPU durante la noche.

Uso de la función time():

min(/Zabbix server/system.cpu.load[all,avg1],5m)>2 and time()<060000

El disparador puede cambiar su estado a problema solo durante la noche (00:00 - 06:00).

Ejemplo 10

Actividad de CPU en cualquier momento con excepción.

Uso de la función time() y el operador not:

min(/zabbix/system.cpu.load[all,avg1],5m)>2
       and not (dayofweek()=7 and time()>230000)
       and not (dayofweek()=1 and time()<010000)

El disparador puede cambiar su estado a problema en cualquier momento, excepto durante 2 horas en el cambio de semana (domingo, 23:00 - lunes, 01:00).

Ejemplo 11

Compruebe si la hora local del cliente está sincronizada con la hora del servidor Zabbix.

Uso de la función fuzzytime():

fuzzytime(/MySQL_DB/system.localtime,10s)=0

El disparador cambiará al estado de problema en caso de que la hora local en el servidor MySQL_DB y el servidor Zabbix difieran en más de 10 segundos. Tenga en cuenta que 'system.localtime' debe configurarse como una comprobación pasiva.

Ejemplo 12

Comparando la carga promedio de hoy con la carga promedio de la misma hora de ayer (usando el desplazamiento de tiempo como now-1d).

avg(/server/system.cpu.load,1h)/avg(/server/system.cpu.load,1h:now-1d)>2

La alerta se activará si la carga promedio de la última hora supera la carga promedio de la misma hora de ayer más de dos veces.

Ejemplo 13

Usar el valor de otro elemento para obtener un umbral de disparo:

last(/Template PfSense/hrStorageFree[{#SNMPVALUE}])<last(/Template PfSense/hrStorageSize[{#SNMPVALUE}])*0.1

La alarma se activará si el espacio libre en disco cae por debajo del 10 por ciento.

Ejemplo 14

Uso del resultado de evaluación para obtener el número de disparadores por encima de un umbral:

(last(/server1/system.cpu.load[all,avg1])>5) + (last(/server2/system.cpu.load[all,avg1])>5) + (last(/server3/system.cpu.load[all,avg1])>5)>=2

El disparador se activará si al menos dos de los disparadores en la expresión están en estado de problema.

Ejemplo 15

Comparar valores de cadena de dos elementos: los operandos aquí son funciones que devuelven cadenas.

Problema: crear una alerta si la versión de Ubuntu es diferente en diferentes hosts

last(/NY Zabbix server/vfs.file.contents[/etc/os-release])<>last(/LA Zabbix server/vfs.file.contents[/etc/os-release])
Ejemplo 16

Comparando dos valores de cadena: los operandos son:

  • una función que devuelve una cadena
  • una combinación de macros y cadenas

Problema: detectar cambios en la consulta DNS

La clave del ítem es:

net.dns.record[192.0.2.0,{$WEBSITE_NAME},{$DNS_RESOURCE_RECORD_TYPE},2,1]

con macros definidas como

{$WEBSITE_NAME} = example.com
       {$DNS_RESOURCE_RECORD_TYPE} = MX

y normalmente devuelve:

example.com           MX       0 mail.example.com

Así que nuestra expresión de disparador para detectar si el resultado de la consulta DNS se desvió del resultado esperado es:

last(/Zabbix server/net.dns.record[192.0.2.0,{$WEBSITE_NAME},{$DNS_RESOURCE_RECORD_TYPE},2,1])<>"{$WEBSITE_NAME}           {$DNS_RESOURCE_RECORD_TYPE}       0 mail.{$WEBSITE_NAME}"

Observe las comillas alrededor del segundo operando.

Ejemplo 17

Comparación de dos valores de cadena: los operandos son:

  • una función que devuelve una cadena
  • una constante de cadena con caracteres especiales \ y "

Problema: detectar si el contenido del archivo /tmp/hello es igual a:

\" //hello ?\"

Opción 1) escribir la cadena directamente:

last(/Zabbix server/vfs.file.contents[/tmp/hello])="\\\" //hello ?\\\""

Observe cómo los caracteres \ y " se escapan cuando la cadena se compara directamente.

Opción 2) usar una macro

{$HELLO_MACRO} = \" //hello ?\"

en la expresión:

last(/Zabbix server/vfs.file.contents[/tmp/hello])={$HELLO_MACRO}
Ejemplo 18

Comparando períodos a largo plazo.

Problema: La carga del servidor Exchange aumentó más del 10% el mes pasado

trendavg(/Exchange/system.cpu.load,1M:now/M)>1.1*trendavg(/Exchange/system.cpu.load,1M:now/M-1M)

También puede utilizar el campo Nombre del evento en la configuración del disparador para construir un mensaje de alerta significativo, por ejemplo, para recibir algo como

"La carga del servidor Exchange aumentó un 24% en julio (0,69) en comparación con junio (0,56)"

el nombre del evento debe definirse como:

La carga del servidor {HOST.HOST} aumentó un {{?100*trendavg(//system.cpu.load,1M:now/M)/trendavg(//system.cpu.load,1M:now/M-1M)}.fmtnum(0)}% en {{TIME}.fmttime(%B,-1M)} ({{?trendavg(//system.cpu.load,1M:now/M)}.fmtnum(2)}) en comparación con {{TIME}.fmttime(%B,-2M)} ({{?trendavg(//system.cpu.load,1M:now/M-1M)}.fmtnum(2)})

También es útil permitir el cierre manual en la configuración del disparador para este tipo de problema.

¿Tienes un ejemplo de expresiones de disparadores que pueda ser útil para otros? Utiliza el formulario de sugerencia de ejemplo para enviarlo a los desarrolladores de Zabbix.

Histéresis

A veces se necesita un intervalo entre los estados de problema y recuperación, en lugar de un simple umbral. Por ejemplo, si queremos definir un disparador que informe de un problema cuando la temperatura de la sala de servidores supere los 20°C y queremos que permanezca en estado de problema hasta que la temperatura baje de 15°C, un simple umbral de disparador en 20°C no será suficiente.

En su lugar, necesitamos definir primero una expresión de disparador para el evento de problema (temperatura superior a 20°C). Luego necesitamos definir una condición de recuperación adicional (temperatura inferior a 15°C). Esto se hace definiendo un parámetro adicional Expresión de recuperación al definir un disparador.

En este caso, la recuperación del problema se realizará en dos pasos:

  • Primero, la expresión de problema (temperatura superior a 20°C) tendrá que evaluarse como FALSA
  • Segundo, la expresión de recuperación (temperatura inferior a 15°C) tendrá que evaluarse como VERDADERA

La expresión de recuperación solo se evaluará cuando el evento de problema se resuelva primero.

¡La expresión de recuperación siendo VERDADERA por sí sola no resuelve un problema si la expresión de problema sigue siendo VERDADERA!

Ejemplo 1

La temperatura en la sala de servidores es demasiado alta.

Expresión del problema:

last(/server/temp)>20

Expresión de recuperación:

last(/server/temp)<=15
Ejemplo 2

El espacio libre en disco es demasiado bajo.

Expresión de problema: es menor que 10GB durante los últimos 5 minutos

max(/server/vfs.fs.size[/,free],5m)<10G

Expresión de recuperación: es mayor que 40GB durante los últimos 10 minutos

min(/server/vfs.fs.size[/,free],10m)>40G

Expresiones con operandos desconocidos

Generalmente, un operando desconocido (como un elemento no soportado) en la expresión hará que el valor del disparador pase inmediatamente a Desconocido.

Sin embargo, en algunos casos se admiten operandos desconocidos (elementos no soportados, errores de función) en la evaluación de la expresión:

  • La función nodata() se evalúa independientemente de si el elemento referenciado está soportado o no.
  • Las expresiones lógicas con OR y AND pueden evaluarse a valores conocidos en dos casos, independientemente de los operandos desconocidos:
    • Caso 1: "1 or alguna_función(elemento_no_soportado1) or alguna_función(elemento_no_soportado2) o ..." puede evaluarse a un resultado conocido ('1' o "Problema"),
    • Caso 2: "0 and alguna_función(elemento_no_soportado1) and alguna_función(elemento_no_soportado2) y ..." puede evaluarse a un resultado conocido ('0' o "OK").
      Zabbix intenta evaluar tales expresiones lógicas tomando los elementos no soportados como operandos desconocidos. En los dos casos anteriores se producirá un valor conocido ("Problema" u "OK", respectivamente); en todos los demás casos el disparador se evaluará como Desconocido.
  • Si la evaluación de la función para un elemento soportado resulta en error, el valor de la función pasa a ser Desconocido y participa como operando desconocido en la evaluación posterior de la expresión.

Tenga en cuenta que los operandos desconocidos solo pueden "desaparecer" en expresiones lógicas como se describe arriba. En las expresiones aritméticas, los operandos desconocidos siempre conducen al resultado Desconocido (excepto la división por 0).

Una expresión que resulta en Desconocido no cambia el estado del disparador ("Problema/OK"). Por lo tanto, si estaba en "Problema" (ver Caso 1), permanece en el mismo estado de problema incluso si la parte conocida se resuelve ('1' se convierte en '0'), porque la expresión ahora se evalúa como Desconocido y eso no cambia el estado del disparador.

Si una expresión de disparador con varios elementos no soportados se evalúa como Desconocido, el mensaje de error en la interfaz hace referencia al último elemento no soportado evaluado.