Las expresiones utilizadas en iniciadores son muy flexibles. Puede utilizarlas para crear pruebas lógicas complejas relacionadas con las estadísticas monitoreadas.
Una expresión simple utiliza una función que se aplica a la métrica 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 y útil es function(/host/key,parameter)<operator><constant>.
Por ejemplo:
min(/Zabbix server/net.if.in[eth0,bytes],5m)>100K
se activará si la cantidad de bytes recibidos durante los últimos cinco minutos siempre fue superior a 100 kilobytes.
Si bien la sintaxis es exactamente la misma, desde el punto de vista funcional hay dos tipos de expresiones de iniciador:
Al definir una expresión de problema sola, esta expresión se utilizará tanto como umbral del problema como umbral de recuperación del problema. Tan pronto como la expresión del problema se evalúa como VERDADERA, hay un problema. Tan pronto como la expresión del problema se evalúa como FALSA, el problema se resuelve.
Al definir tanto la expresión del problema como la expresión de recuperación complementaria, la resolución del problema se vuelve más compleja: no solo la expresión del problema tiene que ser FALSA, sino que también la expresión de recuperación tiene que ser VERDADERA. Esto es útil para crear histéresis y evitar la oscilación del iniciador.
No resulta productivo utilizar la macro {TRIGGER.VALUE} en una expresión de recuperación porque esta expresión solo se evalúa cuando el iniciador está en el estado "Problema". En consecuencia, {TRIGGER.VALUE} siempre se resolverá en "1" (que indica un estado "Problema") mientras se evalúa la expresión.
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).
Los parámetros de función permiten especificar:
El host y la clave del ítem pueden especificarse como /host/key.
Si se omite el host (es decir, como en function(//key,parameter,...)), la función hará referencia al host actual.
El ítem referenciado debe estar en estado soportado (excepto para la función nodata(), que también se calcula para ítems no soportados).
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.
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 usar 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'Se admite un desplazamiento de hora opcional con recuento de tiempo o valor como parámetro de función. Este parámetro permite referenciar datos de un período de tiempo en el pasado.
El desplazamiento de hora comienza con "now", 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.
El desplazamiento de hora especificado en meses (M) y años (y) solo se admite para funciones de tendencia. 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 hora, por ejemplo, medianoche a medianoche por un día, de lunes a domingo por una semana, del primer al último día del mes por un mes.
El desplazamiento de tiempo para períodos de tiempo absolutos comienza con "now", especificando 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/s | La semana pasada |
| 1w:now/s+1s | Esta semana |
Los parámetros de función pueden contener otras expresiones, como en la siguiente sintaxis:
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)
Los siguientes operadores son compatibles con los iniciadores (en orden descendente por prioridad de ejecución):
| Prioridad | Operador | Definición | Notas para valores desconocidos | Forzar que el operando de conversión flote 1 |
|---|---|---|---|---|
| 1 | - | Unario menos | -Desconocido → Desconocido | Sí |
| 2 | not | NO lógico | no Desconocido → Desconocido | Sí |
| 3 | * | Multiplicación | 0 * Desconocido → Desconocido (sí, Desconocido, no 0 - para no perder Desconocido en operaciones aritméticas)<br >1.2 * Desconocido → Desconocido |
Sí |
| / | División | Desconocido / 0 → error Desconocido / 1.2 → Desconocido 0.0 / Desconocido → Desconocido |
Sí | |
| 4 | + | Aritmética más | 1.2 + Desconocido → Desconocido | Sí |
| - | Aritmética menos | 1.2 - Desconocido → Desconocido | Sí | |
| 5 | < | Menos de. 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í | |
| > | Más que. El operador se define como: A>B ⇔ (A>B+0.000001) |
Sí | ||
| >= | Mayor o igual a. El operador se define como: A>=B ⇔ (A≥B-0.000001) |
Sí | ||
| 6 | = | Es igual. El operador se define como: A=B ⇔ (A≥B-0.000001) y (A≤B+0.000001) |
No 1 | |
| <> | No iguales. El operador se define como: A<>B ⇔ (A<B-0.000001) o (A>B+0.000001) |
No 1 | ||
| 7 | and | Y lógico | 0 y Desconocido → 0 1 y Desconocido → Desconocido Desconocido y Desconocido → Desconocido |
Sí |
| 8 | or | Lógico O | 1 o Desconocido → 1 0 o Desconocido → Desconocido Desconocido o Desconocido → Desconocido |
Sí |
1 El operando de cadena todavía se convierte en numérico si:
(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 not, and y or distinguen entre mayúsculas y minúsculas y deben estar en minúscula. También deben estar rodeados de espacios o paréntesis.
Todos los operadores, excepto unario - y not, tienen operación de asociatividad de izquierda a derecha. Unario - y not no son asociativos (es decir -(-1) y not (not 1) deben usarse en lugar de --1 y not not 1).
Resultado de la evaluación:
Los valores necesarios para la evaluación del iniciador se almacenan en caché en el servidor Zabbix. Debido a esta evaluación del iniciador se produce una mayor carga de la base de datos durante algún tiempo después de que se reinicia el servidor. El caché de valores no se borra cuando se eliminan los valores del historial de elementos (ya sea manualmente o mediante el ama de llaves), por lo que el servidor usará los valores almacenados en caché hasta que sean más antiguos que los períodos de tiempo definidos en las funciones de activación o se reinicie el servidor.
Si no hay datos recientes en el caché y no hay un período de consulta definido en la función, Zabbix, de forma predeterminada, retrocederá hasta una semana en el pasado para consultar la base de datos en busca de valores históricos.
La carga del procesador es demasiado alta en el servidor Zabbix.
Al usar la función 'last()', estamos haciendo referencia al valor más reciente. /Zabbix server/system.cpu.load[all,avg1] da un nombre corto del parámetro monitoreado. Especifica que el equipo es 'Zabbix server' y la clave que se supervisa es 'system.cpu.load[all,avg1]'. Finalmente, >5 significa que el iniciador estará en el estado PROBLEMA siempre que la carga del procesador más reciente del servidor Zabbix sea superior a 5.
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)>2La 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.
/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)La expresión es verdadera cuando el valor anterior del checksum de /etc/passwd difiere del más reciente.
Expresiones similares podrían ser útiles para monitorear cambios en archivos importantes, como /etc/passwd, /etc/inetd.conf, /kernel, etc.
Alguien está descargando un archivo grande de Internet.
Uso de la función min:
La expresión es verdadera cuando el número de bytes recibidos en eth0 es mayor de 100 KB en los últimos 5 minutos.
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])=0La expresión es verdadera cuando ambos servidores SMTP están inactivos en ambos smtp1.ejemplo.com y smtp2.ejemplo.com.
El agente de Zabbix debe actualizarse.
Uso de la función buscar():
La expresión es verdadera si el agente Zabbix tiene la versión beta8.
El servidor es inalcanzable.
La expresión es verdadera si el equipo "example.example.com" es inalcanzable más de 5 veces en los últimos 30 minutos.
Sin latidos en los últimos 3 minutos.
Uso de la función nodata():
Para utilizar este iniciador, 'tick' debe definirse como una métrica de captura. El equipo debe enviar periódicamente datos para esta métrica utilizando zabbix_sender. Si no se reciben datos en 180 segundos, el valor del iniciador pasa a ser PROBLEMA.
Tenga en cuenta que 'nodata' puede usarse para cualquier tipo de métrica.
Actividad de la CPU durante la noche.
Uso de la función time():
El iniciador puede cambiar su estado a problema solo durante la noche (00:00 - 06:00).
Actividad de la CPU en cualquier momento con excepción.
Uso de la función time() y 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 iniciador puede cambiar su estado a problema en cualquier momento, excepto 2 horas en el cambio de semana (domingo, 23:00 - lunes, 01:00).
Compruebe si la hora local del cliente está sincronizada con la hora del servidor Zabbix.
Uso de la función fuzzytime():
El iniciador cambiará al estado de problema en caso de que la hora local esté activada. El servidor MySQL_DB y el servidor Zabbix difieren en más de 10 segundos. Tenga en cuenta que 'system.localtime' debe configurarse como comprobación pasiva.
Comparando la carga promedio de hoy con la carga promedio de la misma hora de ayer (usando el desplazamiento de tiempo como now-1d).
El disparador 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.
Usar el valor de otra métrica para obtener un umbral de activación:
last(/Template PfSense/hrStorageFree[{#SNMPVALUE}])<last(/Template PfSense/hrStorageSize[{#SNMPVALUE}])*0.1El iniciador se activará si el almacenamiento gratuito cae por debajo del 10 por ciento.
Usar resultado de la evaluación para obtener el número de iniciadores que superan 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)>=2El iniciador se activará si al menos dos de los iniciadores en la expresión se encuentran en un estado problemático.
Comparar valores de cadena de dos métricas: aquí los operandos son funciones que retornan cadenas.
Problema: cree una alerta si la versión de Ubuntu es diferente en diferentes equipos
last(/NY Zabbix server/vfs.file.contents[/etc/os-release])<>last(/LA Zabbix server/vfs.file.contents[/etc/os-release])Comparando dos valores de cadena, los operandos son:
Problema: detecta si el contenido del archivo /tmp/hello es igual a:
Opción 1) escribir la cadena directamente
Observe cómo se escapan los caracteres \ y " cuando se compara la cadena directamente.
Opción 2) usar una macro
en la expresión:
Comparación de períodos de largo plazo.
Problema: la carga del servidor Exchange aumentó más del 10% el mes pasado
También puede usar el campo de nombre de evento en la configuración del iniciador para crear 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ó en {{?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 iniciador para este tipo de problema.
¿Tiene un ejemplo de expresiones de iniciador que pueda ser útil para otros? Utilice el formulario de sugerencia de ejemplos para enviarlo a los desarrolladores de Zabbix.
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:
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! :::
La temperatura en la sala de servidores es demasiado alta.
Expresión del problema:
Expresión de recuperación:
El espacio libre en disco es demasiado bajo.
Expresión del problema: son menos de 10 GB durante los últimos 5 minutos
Expresión de recuperación: son más de 40 GB durante los últimos 10 minutos
Generalmente, un operando desconocido (como una métrica no soportada) en la expresión representará inmediatamente el valor de activación como "Desconocido".
Sin embargo, en algunos casos se admiten operandos desconocidos (métricas no soportadas, errores de función) en la evaluación de expresiones:
nodata() se evalúa independientemente de si la métrica a la que se hace referencia es compatible o no.1 or some_function(unsupported_item1) or some_function(unsupported_item2) or ..." can be evaluated to known result ('1' or "Problem"),0 and some_function(unsupported_item1) and some_function(unsupported_item2) and ..." can be evaluated to known result ('0' or "OK").Tenga en cuenta que los operandos desconocidos pueden "desaparecer" sólo en expresiones lógicas como las descritas arriba. En expresiones aritméticas los operandos desconocidos siempre conducen al ¡resultado "Desconocido" (excepto la división por 0).
Una expresión que da como resultado "Desconocido" no cambia el estado del iniciador ("Problema/OK"). Entonces, si fue "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 "Desconocida". y eso no cambia el estado de activación.
Si una expresión de iniciador con varias métricas no soportadas se evalúa como Desconocido el mensaje de error en la interfaz se refiere a la última métrica no soportada evaluada.