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.

7 Funciones de disparador predictivas

Descripción general

A veces hay señales de un problema inminente. Estas señales pueden ser detectadas para que se puedan tomar medidas con antelación para prevenir o al menos minimizar el impacto del problema.

Zabbix dispone de herramientas para predecir el comportamiento futuro del sistema monitorizado basándose en datos históricos. Estas herramientas se implementan a través de funciones de disparador predictivas.

Funciones

Antes de configurar un disparador, es necesario definir qué es un estado de problema y cuánto tiempo se necesita para tomar medidas. Luego, hay dos formas de configurar un disparador que señale una posible situación no deseada. Primero: el disparador debe activarse cuando se espera que el sistema esté en un estado de problema después del "tiempo para actuar". Segundo: el disparador debe activarse cuando el sistema vaya a alcanzar el estado de problema en menos de "tiempo para actuar". Las funciones de disparador correspondientes a utilizar son forecast y timeleft. Tenga en cuenta que el análisis estadístico subyacente es básicamente idéntico para ambas funciones. Puede configurar un disparador de la forma que prefiera con resultados similares.

Parámetros

Ambas funciones utilizan casi el mismo conjunto de parámetros. Utilice la lista de funciones soportadas como referencia.

Intervalo de tiempo

En primer lugar, debe especificar el período histórico que Zabbix debe analizar para realizar la predicción. Lo hace de la manera habitual mediante el parámetro período de tiempo y un desplazamiento de tiempo opcional, como lo hace con las funciones avg, count, delta, max, min y sum.

Horizonte de previsión

(forecast solo)
El parámetro time especifica hasta qué punto en el futuro Zabbix debe extrapolar las dependencias que encuentra en los datos históricos. Independientemente de si utiliza time_shift o no, time siempre se cuenta a partir del momento actual.

Umbral a alcanzar

(timeleft solamente)
El parámetro threshold especifica un valor que la métrica analizada debe alcanzar, sin importar si es desde arriba o desde abajo. Una vez que hemos determinado f(t) (ver más abajo), debemos resolver la ecuación f(t) = threshold y devolver la raíz que esté más cerca del momento actual y a la derecha del momento actual o 1.7976931348623158E+308 si no existe tal raíz.

Cuando los valores de la métrica se acercan al umbral y luego lo cruzan, timeleft asume que la intersección ya está en el pasado y por lo tanto cambia a la siguiente intersección con el nivel threshold, si existe. La mejor práctica debería ser utilizar las predicciones como complemento al diagnóstico ordinario de problemas, no como sustituto.1

Funciones de ajuste

Por defecto, fit es la función lineal. Pero si su sistema monitorizado es más complicado, tiene más opciones para elegir.

fit x = f(t)
linear x = a + b*t
polynomialN2 x = a0 + a1*t + a2*t2 + ... + an*tn
exponential x = a*exp(b*t)
logarithmic x = a + b*log(t)
power x = a*tb
Modos

(forecast solamente)
Cada vez que se evalúa una función de disparador, obtiene datos del período de historial especificado y ajusta una función especificada a los datos. Por lo tanto, si los datos son ligeramente diferentes, la función ajustada será ligeramente diferente. Si simplemente calculamos el valor de la función ajustada en un momento especificado en el futuro, no sabrá nada sobre cómo se espera que se comporte la métrica analizada entre ahora y ese momento en el futuro. Para algunas opciones de fit (como polynomial) un valor simple del futuro puede ser engañoso.

mode forecast resultado
value f(ahora + time)
max maxahora <= t <= ahora + time f(t)
min minahora <= t <= ahora + time f(t)
delta max - min
avg promedio de f(t) (ahora <= t <= ahora + time) según la definición

Detalles

Para evitar cálculos con números enormes, consideramos la marca de tiempo del primer valor en el período especificado más 1 ns como un nuevo tiempo cero (el tiempo de época actual es del orden de 109, la época al cuadrado es 1018, la precisión doble es de aproximadamente 10-16). Se añade 1 ns para proporcionar todos los valores de tiempo positivos para los ajustes logarítmico y potencial, que implican calcular log(t). El desplazamiento de tiempo no afecta a los ajustes lineal, polinómico, exponencial (aparte de facilitar y hacer más precisos los cálculos), pero cambia la forma de las funciones logarítmica y potencial.

Errores potenciales

Las funciones devuelven -1 en las siguientes situaciones:

  • el período de evaluación especificado no contiene datos;
  • el resultado de la operación matemática no está definido3;
  • complicaciones numéricas (desafortunadamente, para algunos conjuntos de datos de entrada, el rango y la precisión del formato de coma flotante de doble precisión se vuelven insuficientes)4.

No se muestran advertencias ni errores si el ajuste elegido describe mal los datos proporcionados o si hay muy pocos datos para una predicción precisa.

Ejemplos y manejo de errores

Para recibir una advertencia cuando esté a punto de quedarse sin espacio libre en disco en su equipo, puede usar una expresión de disparador como esta:

timeleft(/host/vfs.fs.size[/,free],1h,0)<1h

Sin embargo, el código de error -1 puede entrar en juego y poner su disparador en un estado de problema. En general, esto es bueno porque recibe una advertencia de que sus predicciones no funcionan correctamente y debe revisarlas más detenidamente para averiguar por qué. Pero a veces es malo porque -1 puede simplemente significar que no se obtuvo ningún dato sobre el espacio libre en disco del equipo en la última hora. Si está recibiendo demasiadas alertas de falsos positivos, considere usar una expresión de disparador más complicada 5:

timeleft(/host/vfs.fs.size[/,free],1h,0)<1h and timeleft(/host/vfs.fs.size[/,free],1h,0)<>-1

La situación es un poco más difícil con forecast. En primer lugar, -1 puede o no poner el disparador en estado de problema dependiendo de si tiene una expresión como forecast(/host/item,(...))<... o como forecast(/host/item,(...))>...

Además, -1 puede ser una predicción válida si es normal que el valor de la métrica sea negativo. Pero la probabilidad de esta situación en el mundo real es insignificante (vea cómo funciona el operador =). Así que agregue ... or forecast(/host/item,(...))=-1 o ... and forecast(/host/item,(...))<>-1 si desea o no desea tratar -1 como un problema respectivamente.

Notas al pie

1 Por ejemplo, un disparador simple como timeleft(/host/item,1h,X) < 1h puede entrar en estado de problema cuando el valor de la métrica se acerca a X y luego recuperarse repentinamente una vez que se alcanza el valor X. Si el problema es que el valor de la métrica está por debajo de X, use: last(/host/item) < X or timeleft(/host/item,1h,X) < 1h Si el problema es que el valor de la métrica está por encima de X use: last(/host/item) > X or timeleft(/host/item,1h,X) < 1h

2 El grado del polinomio puede ser de 1 a 6, polynomial1 es equivalente a linear. Sin embargo, use polinomios de mayor grado con precaución. Si el período de evaluación contiene menos puntos de los necesarios para determinar los coeficientes del polinomio, el grado del polinomio se reducirá (por ejemplo, se solicita polynomial5, pero solo hay 4 puntos, por lo tanto se ajustará polynomial3).

3 Por ejemplo, ajustar funciones exponential o power implica calcular log() de los valores de la métrica. Si los datos contienen ceros o números negativos, obtendrá un error ya que log() está definido solo para valores positivos.

4 Para los ajustes linear, exponential, logarithmic y power todos los cálculos necesarios pueden escribirse explícitamente. Para polynomial solo se puede calcular value sin pasos adicionales. Calcular avg implica computar la antiderivada del polinomio (analíticamente). Calcular max, min y delta implica computar la derivada del polinomio (analíticamente) y encontrar sus raíces (numéricamente). Resolver f(t) = 0 implica encontrar raíces del polinomio (numéricamente).

5 Pero en este caso -1 puede hacer que su disparador se recupere del estado de problema. Para estar completamente protegido use: timeleft(/host/vfs.fs.size[/,free],1h,0)<1h and ({TRIGGER.VALUE}=0 and timeleft(/host/vfs.fs.size[/,free],1h,0)<>-1 or {TRIGGER.VALUE}=1)