7 Funciones predictivas de iniciador

Visión general

A veces hay signos del problema que se avecina. Estos signos pueden detectarse para que se puedan tomar acciones con anticipación para prevenir o al menos minimizar el impacto del problema.

Zabbix tiene herramientas para predecir el comportamiento futuro del sistema monitoreado basado en datos históricos. Estas herramientas se realizan a través de funciones predictivas del iniciador.

1 Funciones

Antes de establecer un desencadenante, es necesario definir qué es un estado problemático y cómo Se necesita mucho tiempo para tomar medidas. Entonces hay dos maneras de configurar un desencadenar señales sobre una posible situación no deseada. Primero el El gatillo debe dispararse cuando se espera que el sistema esté en un estado problemático después del "tiempo de actuar". Segundo: el gatillo debe dispararse cuando el sistema está llegaremos al estado problemático en menos de "tiempo para actuar". Las funciones de activación correspondientes a utilizar son pronóstico y tiempo restante. Tenga en cuenta que el análisis estadístico subyacente es básicamente idéntico para ambas funciones. Puede configurar un activador de cualquier forma que desee. prefiere con resultados similares.

2 Parámetros

Ambas funciones usan casi el mismo conjunto de parámetros. Usa la lista de funciones admitidas como referencia.

2.1 Intervalo de tiempo

En primer lugar, debe especificar el período histórico en el que Zabbix debe analizar para llegar a la predicción. Lo haces de una manera familiar por medio del parámetro 'período de tiempo' y el cambio de tiempo opcional como lo hace con avg, count, delta, max, min y sum funciones

2.2 Horizonte de previsión

(solo pronóstico)
El parámetro time especifica qué tan lejos en el futuro debe Zabbix extrapolar las dependencias que encuentra en los datos históricos. No importa si usas time_shift o no, time siempre se cuenta a partir del actual momento.

2.3 Umbral a alcanzar

(solo tiempo restante)
El parámetro "umbral" especifica un valor que debe alcanzar el elemento analizado, No hay diferencia si desde arriba o desde abajo. Una vez que hemos determinado f(t) (ver más abajo), deberíamos resolver la ecuación f(t) = umbral y devolver el raíz que está más cerca de ahora y a la derecha de ahora o 1.7976931348623158E+308 si no existe dicha raíz.

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

2.4 Funciones de ajuste

El "ajuste" predeterminado es la función lineal. Pero si su sistema monitoreado es más complicado tienes más opciones para elegir.

ajuste x = f(t)
lineal x = a + b*t
polinomioN2 x = a0 + a1*t + a2*t2 + ... + an*tn
exponencial x = a*exp(b*t)
logarítmico x = a + b*log(t)
potencia x = a*tb
2.5 Modos

(solo pronóstico)
Cada vez que se evalúa una función de disparo, obtiene datos del periodo histórico especificado y ajusta una función específica a los datos. Asi que, 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 tiempo especificado en el futuro no sabrá nada acerca de cómo el se espera que el elemento analizado se comporte entre ahora y ese momento en el futuro. Para algunas opciones fit (como polinomio) un valor simple de el futuro puede ser engañoso.

modo resultado del pronóstico
valor f(ahora + tiempo)
max maxahora <= t <= ahora + tiempo f(t)
min minahora <= t <= ahora + tiempo f(t)
delta máx - mín
promedio promedio de f(t) (ahora <= t <= ahora + tiempo) según definición

3 Detalles

Para evitar cálculos con números grandes, consideramos la marca de tiempo del primer valor en el período especificado más 1 ns como un nuevo tiempo cero (actual el tiempo de época es del orden de 109, la época al cuadrado es 1018, doble precisión es aproximadamente 10-16). Se agrega 1 ns para proporcionar todos los valores de tiempo positivos para Ajustes logarítmicos y potenciales que implican el cálculo de log(t). Tiempo cambio no afecta lineal, polinomio, exponencial (aparte de cálculos más fáciles y precisos) pero cambia la forma de Funciones logarítmicas y potenciales.

4 Errores potenciales

Las funciones devuelven -1 en tales 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 punto flotante de doble precisión se vuelven insuficiente)4.

No se marcan advertencias ni errores si la elección no se ajusta bien describe los datos proporcionados o simplemente hay muy pocos datos para una precisión predicción.

5 Ejemplos y manejo de errores

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

tiempo restante(/host/vfs.fs.size[/,gratis],1h,0)}<1h

Sin embargo, el código de error -1 puede entrar en juego y poner su gatillo en un estado del problema Por lo general, es bueno porque recibe una advertencia de que su las predicciones no funcionan correctamente y deberías mirarlas más a fondo para averiguar por qué. Pero a veces es malo porque -1 puede simplemente significa que no hubo datos sobre el espacio libre en disco del host obtenidos en la última hora. Si recibe demasiadas alertas de falsos positivos considere usar una expresión desencadenante más complicada 5:

tiempo restante(/host/vfs.fs.size[/,gratis],1h,0)<1h y timeleft(/host/vfs.fs.size[/,gratis],1h,0)<>-1

La situación es un poco más difícil con pronóstico. Ante todo, -1 puede o no poner el gatillo en un estado problemático dependiendo de ya sea que tenga una expresión como forecast(/host/item,(...))<... o como pronóstico(/host/elemento,(...))>...

Además, -1 puede ser un pronóstico válido si es normal para el artículo valor sea negativo. Pero la probabilidad de esta situación en el real situación mundial es insignificante (ver cómo funciona el operador =). Asi que agregar ... o pronóstico(/host/elemento,(...))=-1 o ... y pronóstico(/host/elemento,(...))<>-1 si quiere o no quiere tratar -1 como un problema respectivamente.


  1. por ejemplo, un disparador simple como timeleft(/host/item,1h,X) < 1h puede entrar en estado de problema cuando el el valor del artículo se acerca a X y luego se recupera repentinamente una vez que el valor X es alcanzó. Si el problema es que el valor del artículo está por debajo de X, use: last(/host/item) < X o timeleft(/host/item,1h,X) < 1h Si el el problema es que el valor del artículo está por encima de X use: last(/host/item) > X o timeleft(/host/item,1h,X) < 1h↩︎

  2. el grado del polinomio puede ser de 1 a 6, polinomio1 es equivalente a lineal. Sin embargo, utilice polinomios de mayor grado con precaución. Si el período de evaluación contiene menos puntos de los necesarios para determinar coeficientes polinómicos, el grado polinomial se reducirá (por ejemplo, Se pide polinomio5, pero solo hay 4 puntos, por lo tanto se ajustará polinomio3).↩︎

  3. Por ejemplo, ajustar funciones exponenciales o potenciales implica calculando log() de valores de artículos. Si los datos contienen ceros o negativos números obtendrá un error ya que log () está definido para positivo valores solamente.↩︎

  4. Para lineal, exponencial, logarítmico y potencia se adapta a todos los cálculos necesarios se pueden escribir explícitamente. Para polinomio solo se puede calcular valor sin ningún paso adicional. Calcular avg implica calcular la antiderivada polinomial (analíticamente). Calcular max, min y delta implica calcular la derivada polinomial (analíticamente) y encontrar sus raíces (numéricamente). Resolver f(t) = 0 implica encontrar raíces polinómicas (numéricamente).↩︎

  5. Pero en este caso, -1 puede hacer que su disparador se recupere del estado del 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 o {VALOR.DISPARADOR}=1)↩︎