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.
Antes de configurar un iniciador, es necesario definir qué es un estado problemático y cuánto tiempo se necesita para tomar medidas. Luego, hay dos formas de configurar un iniciador que indique una posible situación no deseada. Primero: el iniciador debe activarse cuando se espera que el sistema esté en un estado problemático después del "tiempo para actuar". Segundo: el iniciador debe activarse cuando el sistema va a alcanzar el estado problemático en menos del "tiempo para actuar". Las funciones de iniciador correspondientes que se pueden utilizar son previsión y tiempo restante. Tenga en cuenta que el análisis estadístico subyacente es básicamente idéntico para ambas funciones. Puede configurar un iniciador de la forma que prefiera con resultados similares.
Ambas funciones utilizan prácticamente el mismo conjunto de parámetros. Utilice la lista de funciones admitidas como referencia.
En primer lugar, debe especificar el período histórico que Zabbix debe analizar para realizar la predicción. Puede hacerlo de la manera habitual mediante el parámetro time period
y el cambio de hora opcional, como lo hace con las funciones avg, count, delta, max, min y sum.
(solo forecast)
El parámetro time
especifica qué tan lejos en el futuro Zabbix debe extrapolar las dependencias que encuentra en los datos históricos. No importa si usa time_shift
o no, time
siempre se cuenta a partir del momento actual.
(solo timeleft)
El parámetro threshold
especifica un valor que la métrica analizada debe alcanzar, sin diferencia si es desde arriba o desde abajo. Una vez que hayamos determinado f(t) (ver a continuación), debemos resolver la ecuación f(t) = threshold
y devolver la 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 las métricas 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 nivel threshold
, si la hay. La mejor práctica debería ser utilizar las predicciones como un complemento a los diagnósticos de problemas ordinarios, no como una sustitución.1
El "ajuste" predeterminado es la función lineal. Pero si su sistema monitoreado es más complicado tiene más opciones para elegir.
ajuste |
x = f(t) |
---|---|
lineal | 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 |
(solo forecast)
Cada vez que se evalúa una función de iniciador, obtiene datos del período histórico 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 específico 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 ajuste
(como polinomio), un valor simple del futuro puede ser engañoso.
modo |
resultado de forecast |
---|---|
value | f(ahora + tiempo ) |
max | máxahora <= t <= ahora + tiempo f(t) |
min | mínahora <= t <= ahora + tiempo f(t) |
delta | max - min |
avg | promedio de f(t) (ahora <= t <= ahora + tiempo ) según definición |
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, el cuadrado de la época es 1018, la precisión doble es aproximadamente 10-16). Se agrega 1 ns para proporcionar todos los valores de tiempo positivos para ajustes logarítmicos y de potencia que implican el cálculo de log(t). El cambio de tiempo no afecta a los lineales, polinómicos ni exponenciales (aparte de los cálculos más fáciles y precisos), pero cambia la forma de las funciones logarítmicas y de potencia.
Las funciones devuelven -1 en las siguientes situaciones:
No se marcan advertencias ni errores si el ajuste elegido no describe bien los datos proporcionados o si hay muy pocos datos para una predicción precisa.
Para recibir una advertencia cuando esté a punto de quedarse sin espacio libre en disco en su equipo, puede utilizar una expresión de disparador como la siguiente:
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 simplemente puede significar que no se obtuvieron datos 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 compleja 5:
La situación es un poco más difícil con forecast. En primer lugar, -1 puede o no poner el disparador en un 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 previsión válida si es normal que el valor del elemento 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.
1 Por ejemplo, un disparador simple como timeleft(/host/item,1h,X) < 1h
puede entrar en estado de problema cuando el valor del elemento se acerca a X y luego recuperarse repentinamente una vez que se alcanza el valor X. Si el problema es que el valor del elemento está por debajo de X, use: last(/host/item) < X or timeleft(/host/item,1h,X) < 1h
Si el problema es que el valor del elemento 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 del elemento. 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 calcular 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)