7 Métricas calculadas

Descripción general

Este tipo de item permite realizar cálculos sobre métricas que ya existen. Un item calculado no recopila ningún dato por sí mismo.

Por ejemplo, puede que desee:

  • Contar dos valores.
  • Calcular el promedio de varios valores de item.
  • Calcular el valor total para un grupo de items.

El valor resultante se almacena en la base de datos de Zabbix como cualquier otro item; se almacenan tanto los valores de historial como los de tendencias, y se pueden generar gráficos.

El cálculo se basa en una fórmula. La sintaxis de la fórmula es la misma que la de las expresiones de trigger.

De hecho, es posible mantener los triggers simples al colocar una lógica compleja de transformación de datos en un item calculado; luego, hacer referencia al item calculado en un trigger mediante la clave del item.

Existen dos posibilidades para especificar la fuente de datos para los cálculos:

  1. Especificar items en la fórmula.
  2. Realizar agregación de datos basada en un filtro que seleccione items.

La segunda opción permite calcular promedios de grupo, totales, etc.

Todos los cálculos los realiza Zabbix server; ni proxy ni agents intervienen en absoluto. Tenga en cuenta que el uso intensivo de items calculados con períodos de tiempo largos puede afectar al rendimiento del server.

Campos configurables

Para utilizar items calculados, elija el tipo de item Calculated.

La key es un identificador único del item (por host). Puede crear cualquier nombre de key utilizando los símbolos admitidos. La key permite hacer referencia al item calculado en los triggers.

La definición del cálculo debe introducirse en el campo Formula.

No existe ninguna conexión entre la fórmula y la key. Los parámetros de la key no se utilizan de ninguna manera en la fórmula.

A diferencia de las expresiones de trigger, Zabbix procesa los items calculados de acuerdo con el intervalo de actualización del item, no al recibir un valor nuevo.

Tenga en cuenta que, si selecciona Numeric (unsigned) como tipo de información y el resultado del cálculo es un valor float, este se recorta a un entero.

Fórmula de cálculo simple

La sintaxis de una fórmula simple es:

function(/host/key,<parameter1>,<parameter2>,...)

donde:

Elemento Descripción
function Una de las funciones compatibles: last, min, max, avg, count, etc.
host Host del item que se utiliza para el cálculo.
El host actual puede omitirse (es decir, como en function(//key,parameter,...)).
key Clave del item que se utiliza para el cálculo.
No se admiten los items que devuelven valores con el tipo de dato binario o JSON.
Si cambia la clave del item de un item referenciado, la clave debe actualizarse manualmente en la fórmula.
Todos los items a los que hacen referencia las funciones de historial deben existir y estar recopilando datos.
parameter(s) Parámetros de la función, si son necesarios.
Se admiten los sufijos de tiempo y los sufijos de tamaño de memoria.

Una fórmula más compleja puede utilizar una combinación de funciones, operadores y paréntesis.

Vea ejemplos de fórmulas de items calculados:

Algunas variables pueden pasarse a la fórmula con macros de usuario. Tenga en cuenta que las macros de usuario:

  • se resolverán: si se utilizan para hacer referencia a un parámetro de función, parámetro de filtro de item o una constante.
  • no se resolverán: si hacen referencia a una función, nombre de host, clave de item, parámetro de clave de item u operador.

Se permite la comparación con cadenas.

Si no hay datos recientes en la caché y no hay un período de consulta definido en la función, Zabbix, de forma predeterminada, buscará en el pasado hasta una semana para consultar la base de datos en busca de valores históricos.

Un item calculado puede pasar a no ser compatible en varios casos:

  • item referenciado
    • no se encuentra
    • está deshabilitado o pertenece a un host deshabilitado
    • no es compatible (excepto con la función nodata() y los operadores con valores desconocidos)
  • no hay datos para calcular una función
  • división por cero
  • se ha utilizado una sintaxis incorrecta

Agregaciones de datos

Las agregaciones de datos se basan en un filtro que selecciona varios items. Las agregaciones de datos también son un tipo de item calculado; sin embargo, en la fórmula se utiliza una sintaxis ligeramente diferente.

Para recuperar agregados, utilice una de las funciones de agregación compatibles: avg, max, min, sum, etc. Luego añada la función foreach como único parámetro y su filtro de item para seleccionar los items necesarios:

aggregate_function(function_foreach(/host/key?[group="host group"],timeperiod))

Una función foreach (por ejemplo, avg_foreach, count_foreach, etc.) devuelve un valor agregado por cada item seleccionado. Los items se seleccionan mediante el filtro de item (/host/key?[group="host group"]), a partir del historial del item. Para más detalles, consulte funciones foreach.

Si algunos de los items no tienen datos para el período solicitado, se ignoran en el cálculo. Si ningún item tiene datos, la función devolverá un error.

Como alternativa, puede enumerar varios items como parámetros para la agregación:

aggregate_function(function(/host/key,parameter),function(/host2/key2,parameter),...)

Tenga en cuenta que function aquí debe ser una función de historial/tendencia.

Vea ejemplos de cálculos agregados:

Se admiten macros de usuario y macros de descubrimiento de bajo nivel en:

  • parámetros de clave de item
  • parámetros de función
  • condiciones de filtro (nombre del grupo de hosts y nombre de etiqueta)
  • constantes de expresión

Un cálculo agregado puede pasar a no ser compatible si:

  • no se encuentra ninguno de los items referenciados (lo que puede ocurrir si la clave de item es incorrecta, ninguno de los items existe o todos los grupos incluidos son incorrectos)
  • no hay datos para calcular una función

Ejemplos de items calculados

(1) Tráfico total en la interfaz
last(//net.if.in[eth0,bytes])+last(//net.if.out[eth0,bytes])

Calcule el ancho de banda total en eth0.

(2) Porcentaje de espacio libre en disco
100*last(//vfs.fs.size[/,free])/last(//vfs.fs.size[/,total])

Zabbix tomará los valores más recientes del espacio libre y del espacio total en disco (en /) y calculará el porcentaje de acuerdo con la fórmula proporcionada.

(3) Porcentaje del tráfico entrante
100*last(//net.if.in[eth0,bytes])/(last(//net.if.in[eth0,bytes])+last(//net.if.out[eth0,bytes]))

Calcule el porcentaje de tráfico entrante del tráfico total.

(4) Número promedio de valores procesados
avg(/Zabbix server/zabbix[wcache,values],10m)

Calcula un promedio de 10 minutos del número de valores procesados por Zabbix.

(5) Tráfico entrante total para el host
sum(last_foreach(/host/net.if.in[*]))

Calcula el total de todos los items que coinciden con net.if.in[*] en el host.

(6) Espacio total en disco para el grupo
sum(last_foreach(/*/vfs.fs.size[/,total]?[group="MySQL Servers"]))

Calcule el espacio total en disco para todos los MySQL Servers.

(7) Carga media del procesador para el grupo
avg(last_foreach(/*/system.cpu.load[,avg1]?[group="MySQL Servers"]))

Calcula la carga media del procesador para todos los MySQL Servers.

(8) Carga media del procesador por grupo y etiqueta
avg(last_foreach(/*/system.cpu.load?[(group="Servers A" or group="Servers B" or group="Servers C") and (tag="Service:" or tag="Importance:High")]))

Calcular la carga media de CPU en todos los hosts de varios grupos de hosts que tienen etiquetas específicas.

(9) Número promedio de consultas para el grupo
avg(avg_foreach(/*/mysql.qps?[group="MySQL Servers"],5m))

Calcule el promedio de 5 minutos del número de consultas por segundo para MySQL Servers.

(10) Número total de comprobaciones DNS correctas
sum(last_foreach(/*/net.dns[*,*,*]))

Calcule el número total de comprobaciones DNS correctas en todos los hosts. La forma de item mostrada es net.dns[192.0.2.0,example.com,A] como ejemplo de una posible clave.

Tenga en cuenta que los comodines deben coincidir con el número de parámetros de la clave (aquí net.dns tiene tres parámetros: ip, name, type).

(11) Número total de items no soportados para el grupo
sum(last_foreach(/*/zabbix[host,,items_unsupported]?[group="Zabbix servers"]))

Calcule el número total de items no soportados para Zabbix servers.

(12) Estadísticas de interfaz para el grupo
sum(last_foreach(/*/net.if.out[eth0,bytes]?[group="video"])) / sum(last_foreach(/*/nginx_stat.sh[active]?[group="video"])) 

Calcular las estadísticas de interfaz para el grupo video.

Ejemplos de sintaxis correcta/incorrecta

Las expresiones (incluidas las llamadas a funciones) no pueden utilizarse como parámetros de función de historial, tendencias o foreach. Sin embargo, esas funciones en sí mismas pueden utilizarse en otros parámetros de función (no históricos).

Expresión Ejemplo
Válida avg(last(/host/key1),last(/host/key2)*10,last(/host/key1)*100)

max(avg(avg_foreach(/*/system.cpu.load?[group="Servers A"],5m)),avg(avg_foreach(/*/system.cpu.load?[group="Servers B"],5m)),avg(avg_foreach(/*/system.cpu.load?[group="Servers C"],5m)))
No válida sum(/host/key,10+2)

sum(/host/key, avg(10,2))

sum(/host/key,last(/host/key2))

Tenga en cuenta que en una expresión como:

sum(sum_foreach(//resptime[*],5m))/sum(count_foreach(//resptime[*],5m))

no se puede garantizar que ambas partes de la ecuación tengan siempre el mismo conjunto de valores. Mientras se evalúa una parte de la expresión, puede llegar un nuevo valor para el período solicitado y entonces la otra parte de la expresión tendrá un conjunto de valores diferente.