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 iniciador, es necesario definir qué es un estado problemático y cuanto tiempo se necesita para tomar medidas. Entonces hay dos maneras de configurar una señal de iniciador sobre una posible situación no deseada. Primero el iniciador debe dispararse cuando se espera que el sistema esté en un estado problemático después del "momento de actuar". Segundo: el iniciador debe dispararse cuando el sistema está en un estado problemático cuando ya no hay "tiempo para actuar". Las funciones de activación 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 iniciador de cualquier forma que desee 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 999999999999.9999 si no existe tal raíz.

Cuando los valores de los artículos se acercan al umbral y luego 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 'umbral', si ningún. La mejor práctica debería ser utilizar las predicciones como complemento de diagnósticos de problemas ordinarios, no como una 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 Posibles errores

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 se ajusta mal describe los datos proporcionados o simplemente hay muy pocos datos para ser precisos. 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)↩︎