Esta es una traducción de la página de documentación original en español. Ayúdanos a mejorarla.

#2 Expresión de activación

Visión general

Las expresiones utilizadas en triggers son muy flexible. Puede usarlos para crear pruebas lógicas complejas con respecto a estadísticas monitoreadas.

Una expresión simple usa 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 útil simple es función(/host/clave,parámetro)<operador><constante>.

Por ejemplo:

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

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

Si bien la sintaxis es exactamente la misma, desde el punto de vista funcional hay dos tipos de expresiones desencadenantes:

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

Al definir una expresión de problema sola, se utilizará esta expresión tanto como el umbral del problema como el umbral de recuperación del problema. Como tan pronto como la expresión del problema se evalúa como VERDADERO, hay un problema. Como tan pronto como la expresión del problema se evalúa como FALSO, el problema es resuelto.

Al definir tanto la expresión del problema como la recuperación suplementaria expresión, la resolución de problemas se vuelve más compleja: no sólo la la expresión del problema tiene que ser FALSA, pero también la expresión de recuperación tiene a decir verdad. Esto es útil para crear histéresis y evitar aleteo del gatillo.

Funciones

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

Se incluye una lista completa de funciones admitidas. disponible.

Por lo general, las funciones devuelven valores numéricos para comparar. al regresar cadenas, la comparación es posible con = y <> operadores (ver ejemplo).

Parámetros de la función

Los parámetros de función permiten especificar:

  • clave de host y elemento (funciones que hacen referencia únicamente al historial del elemento del host)
  • parámetros específicos de la función
  • otras expresiones (no disponible para funciones que hacen referencia al host) historial de elementos, consulte otras expresiones para ejemplos)

La clave del host y del elemento se puede especificar como /host/key. el referenciado el elemento debe estar en un estado compatible (excepto para la función nodata(), que también se calcula para artículos no admitidos).

Mientras que otras expresiones de activación como parámetros de función se limitan a funciones no históricas en disparadores, esta limitación no se aplica en elementos calculados.

Parámetros específicos de la función

Los parámetros específicos de la función se colocan después de la tecla del elemento y se separado de la clave del elemento por una coma. Ver el compatible funciones para obtener una lista completa de estas parámetros

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

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

Los parámetros con un hashtag tienen un significado diferente con la función último: denotan el enésimo valor anterior, por lo que dados los valores 3, 7, 2, 6, 5 (del más reciente al menos reciente):

  • last(/host/key,#2) devolvería '7'
  • last(/host/key,#5) devolvería '5'
Cambio de hora

Se admite un cambio de tiempo opcional con el tiempo o el recuento de valores como el parámetro de función. Este parámetro permite referenciar datos de un período de tiempo en el pasado.

El cambio de hora comienza con 'ahora', especificando la hora actual, y es 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 durante una hora hace un día.

Cambio de tiempo con periodos de tiempo absolutos

Se admiten períodos de tiempo absolutos en el parámetro de cambio de hora, por ejemplo, medianoche a medianoche por un día, de lunes a domingo por una semana, primer día-último día de el mes por un mes.

El cambio de tiempo para períodos de tiempo absolutos comienza con ahora - especificando el hora actual, y es seguido por cualquier número de operaciones de tiempo: /<unidad de tiempo> - define el comienzo 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 cambio 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:ahora/d Ayer
1d:ahora/d+1d Hoy
2d:ahora/d+1d Últimos 2 días
1w:ahora/w La semana pasada
1w:ahora/w+1w Esta semana
Otras expresiones

Los parámetros de función pueden contener otras expresiones, como en la siguiente sintaxis:

min(min(/host/clave,1h),min(/host2/key2,1h)*10)

Tenga en cuenta que no se pueden usar otras expresiones, si la función hace referencia a historial de artículos. Por ejemplo, la siguiente sintaxis no está permitida:

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

Operadores

Los siguientes operadores son compatibles con disparadores (en orden descendente prioridad de ejecución):

Prioridad Operador Definición Notas para valores desconocidos Forzar operando de conversión flotante 1
1 - Unario menos -Desconocido → Desconocido
2 no NO lógico no Desconocido → Desconocido
3 * Multiplicación 0 * Desconocido → Desconocido
(sí, Desconocido, no 0 - para no perder
Desconocido en operaciones aritméticas)<br >1.2 * Desconocido → Desconocido
/ División Desconocido / 0 → error
Desconocido / 1.2 → Desconocido
0.0 / Desconocido → Desconocido
4 + Más aritmético 1.2 + Desconocido → Desconocido
- Menos aritmético 1.2 - Desconocido → Desconocido
5 < Menos de. 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
> Más de. 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 = Es igual. El operador se define como:

A=B ⇔ (A≥B-0.000001) y (A≤B+0.000001)
No 1
<> No es igual. El operador se define como:

A<>B ⇔ (A<B-0.000001) o (A>B+0.000001)
No 1
7 y Y lógico 0 y Desconocido → 0
1 y Desconocido → Desconocido
Desconocido y Desconocido → Desconocido
8 o O lógico 1 o Desconocido → 1
0 o Desconocido → Desconocido
Desconocido o Desconocido → Desconocido

1 El operando de cadena todavía se convierte en 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 en un operando de cadena y ambos operandos se comparan como cadenas).

Los operadores no, y y o 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 - unario y not, tienen de izquierda a derecha asociatividad. Unario - y not no son asociativos (lo que significa -(-1) y not (not 1) deben usarse en lugar de --1 y no no 1).

Resultado de la evaluación:

  • <, <=, >, >=, =, <> los operadores darán '1' en la expresión de activación si el especificado relación es verdadera y '0' si es falsa. Si al menos un operando es Desconocido el resultado es Desconocido;
  • y para operandos conocidos arrojará '1' si ambos operandos comparar desigual a '0'; de lo contrario, arroja '0'; por desconocido operandos y produce '0' solo si un operando se compara igual a '0'; de lo contrario, arroja 'Desconocido';
  • o para operandos conocidos dará '1' si cualquiera de sus operandos comparar desigual a '0'; de lo contrario, arroja '0'; por desconocido operandos o produce '1' solo si un operando se compara con '0'; de lo contrario, arroja 'Desconocido';
  • El resultado del operador de negación lógica no para un conocido el operando es '0' si el valor de su operando no es igual a '0'; '1' si el valor de su operando es igual a '0'. por desconocido operando not produce 'Desconocido'.

Almacenamiento en caché de valores

Los valores requeridos para la evaluación del disparador son almacenados en caché por el servidor Zabbix. Debido a este disparador, la evaluación provoca una mayor carga de la base de datos para algún tiempo después de que el servidor se reinicia. La caché de valores no se borra cuando los valores del historial del artículo se eliminan (ya sea manualmente o por el ama de llaves), por lo que el servidor usará los valores almacenados en caché hasta que sean más antiguos que el tiempo períodos definidos en las funciones de activación o el servidor se reinicia.

Ejemplos de disparadores

Ejemplo 1

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

último(/Servidor Zabbix/sistema.cpu.cargar[todos,avg1])>5

Al usar la función 'last()', estamos haciendo referencia a la más reciente valor. /Zabbix server/system.cpu.load[all,avg1] da un nombre corto de el parámetro monitoreado. Especifica que el host es 'servidor Zabbix' y la clave que se supervisa es 'system.cpu.load[all,avg1]'. Finalmente, >5 significa que el gatillo está en el estado PROBLEMA siempre que sea más La medición reciente de la carga del procesador del servidor Zabbix es superior a 5.

Ejemplo 2

www.example.com está sobrecargado.

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

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

Ejemplo 3

/etc/passwd ha sido cambiado.

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

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

Expresiones similares podrían ser útiles para monitorear cambios en importantes archivos, 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.ejemplo.com/net.if.in[eth0,bytes],5m)>100K

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

Ejemplo 5

Ambos nodos del servidor SMTP en clúster están inactivos.

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

último(/smtp1.ejemplo.com/net.tcp.servicio[smtp])=0 y último(/smtp2.ejemplo.com/net.tcp.servicio[smtp])=0

La expresión es verdadera cuando ambos servidores SMTP están inactivos en ambos smtp1.ejemplo.com y smtp2.ejemplo.com.

Ejemplo 6

El agente de Zabbix debe actualizarse.

Uso de la función buscar():

find(/ejemplo.ejemplo.com/agente.version,"me gusta","beta8")=1

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

Ejemplo 7

El servidor es inalcanzable.

cuenta(/ejemplo.ejemplo.com/icmpping,30m,,"0")>5

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

Ejemplo 8

No hay latidos en los últimos 3 minutos.

Uso de la función nodata():

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

Para hacer uso de este activador, 'tick' debe definirse como un Zabbix trampero elemento. El anfitrión debe envíe periódicamente datos para este artículo usando zabbix_sender. Si no hay datos recibido dentro de los 180 segundos, el valor de activación se convierte en PROBLEMA.

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

Ejemplo 9

Actividad de la CPU durante la noche.

Uso de la función tiempo():

min(/servidor Zabbix/system.cpu.load[all,avg1],5m)>2 y tiempo()>000000 y tiempo()<060000

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

Example 10

CPU activity at any time with exception.

Use of function time() and not operator:

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

The trigger may change its state to true at any time, except for 2 hours on a week change (Sunday, 23:00 - Monday, 01:00).

Ejemplo 10

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 activador cambiará al estado del problema en caso de que se active la hora local. El servidor MySQL_DB y el servidor Zabbix difieren en más de 10 segundos. Nota que 'system.localtime' debe configurarse como passive check.

Ejemplo 11

Comparando la carga promedio de hoy con la carga promedio del mismo tiempo ayer (usando el cambio de hora como ahora-1d).

avg(/servidor/sistema.cpu.carga,1h)/avg(/servidor/sistema.cpu.carga,1h:ahora-1d)>2

Esta expresión se activará si la carga promedio de la última hora supera el carga promedio de la misma hora ayer más de dos veces.

Ejemplo 12

Usando el valor de otro elemento para obtener un umbral de activación:

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

El activador se activará si el almacenamiento gratuito cae por debajo del 10 por ciento.

Ejemplo 13

Usando [resultado de la evaluación] (#operadores) para obtener la cantidad de disparadores por encima un umbral:

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

El disparador se disparará si al menos dos de los disparadores en la expresión son mayores de 5.

Ejemplo 14

Comparación de valores de cadena de dos elementos: los operandos aquí son funciones que cadenas de retorno.

Problema: cree una alerta si la versión de Ubuntu es diferente en diferentes Hospedadores

último(/servidor NY Zabbix/vfs.file.contents[/etc/os-release])<>último(/servidor LA Zabbix/vfs.file.contents[/etc/os-release])
Ejemplo 15

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 de DNS

La clave del artículo es:

net.dns.record[8.8.8.8,{$NOMBRE DEL SITIO WEB},{$DNS_RESOURCE_RECORD_TYPE},2,1]

con macros definidas como

{$NOMBRE_SITIO WEB} = ejemplo.com
       {$DNS_RESOURCE_RECORD_TYPE} = MX

y normalmente devuelve:

ejemplo.com MX 0 mail.ejemplo.com

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

last(/Zabbix server/net.dns.record[8.8.8.8,{$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 16

Comparando dos valores de cadena: los operandos son:

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

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

\" //Hola ?\"

Opción 1) escribir la cadena directamente

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

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

Opción 2) usar una macro

{$HOLA_MACRO} = \" //¿hola?\"

en la expresión:

último(/servidor Zabbix/vfs.file.contents[/tmp/hello])={$HELLO_MACRO}
Ejemplo 17

Comparación de periodos a largo plazo.

Problema: la carga del servidor de 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 Evento nombre campo en el disparador configuración para crear un mensaje de alerta significativo, por ejemplo para recibir algo como

"La carga del servidor de 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ó {{?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 gatillo para este tipo de problema.

Histéresis

A veces se necesita un intervalo entre el problema y los estados de recuperación, en lugar de un simple umbral. Por ejemplo, si queremos definir un disparador que informa un problema cuando la temperatura de la sala del servidor sube 20°C y queremos que permanezca en el estado problemático hasta que la temperatura cae por debajo de 15°C, un simple umbral de activación a 20°C no será suficiente.

En su lugar, necesitamos definir una expresión desencadenante para el evento del problema. primero (temperatura superior a 20°C). Entonces necesitamos definir un adicional condición de recuperación (temperatura por debajo de 15°C). Esto se hace definiendo un parámetro Recovery expression adicional cuando definiendo un disparador.

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

  • Primero, la expresión del problema (temperatura superior a 20°C) deberá evaluar a FALSO
  • En segundo lugar, la expresión de recuperación (temperatura inferior a 15°C) tendrá para evaluar a VERDADERO

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

::: nota de advertencia La expresión de recuperación siendo VERDADERA por sí sola no resolver un problema si la expresión del problema sigue siendo VERDADERA! :::

Ejemplo 1

La temperatura en la sala de servidores es demasiado alta.

Expresión del problema:

último(/servidor/temp)>20

Expresión de recuperación:

último(/servidor/temp)<=15
Ejemplo 2

El espacio libre en disco es demasiado bajo.

Expresión del problema: son menos de 10 GB durante los últimos 5 minutos

max(/servidor/vfs.fs.tamaño[/,gratis],5m)<10G

Expresión de recuperación: son más de 40 GB durante los últimos 10 minutos

min(/servidor/vfs.fs.tamaño[/,gratis],10m)>40G

Expresiones con elementos no admitidos y valores desconocidos

Las versiones anteriores a Zabbix 3.2 son muy estrictas con respecto a los elementos no admitidos en un desencadenar la expresión. Cualquier elemento no admitido en la expresión inmediatamente convierte el valor de activación en Desconocido.

Desde Zabbix 3.2, existe un enfoque más flexible para los elementos no compatibles. admitiendo valores desconocidos en la evaluación de expresiones:

  • Para la función nodata(), los valores no se ven afectados por si un el elemento es compatible o no. La función se evalúa incluso si se refiere a un elemento no compatible.
  • Las expresiones lógicas con OR y AND se pueden evaluar a valores conocidos en dos casos independientemente de los operandos desconocidos:
    • "1 o No soportado_elemento1.alguna_función() o Unsupported_item2.some_function() or ..." se puede evaluar para '1' (Verdadero),
    • "0 y No admitido_elemento1.alguna_función() y Unsupported_item2.some_function() y ..." se puede evaluar a '0' (falso).
      Zabbix intenta evaluar expresiones lógicas tomando sin soporte elementos como valores 'desconocidos'. En los dos casos mencionados anteriormente, un se producirá un valor conocido; en otros casos, el valor de activación será ser Desconocido.
  • Si la evaluación de una función para el elemento admitido da como resultado un error, el el valor de la función es 'Desconocido' y participa en una expresión adicional evaluación.

Tenga en cuenta que los valores desconocidos pueden "desaparecer" solo en expresiones lógicas como descrito arriba. En expresiones aritméticas, los valores desconocidos siempre conducen a resultado Desconocido (excepto división por 0).

Si una expresión de activación con varios elementos no admitidos se evalúa como Desconocido el mensaje de error en la interfaz se refiere a la última elemento no compatible evaluado.