A veces hay signos de un problema inminente. Estos signos pueden ser detectados 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 los datos históricos. Estas herramientas se implementan a través de funciones predictivas de trigger.
Antes de configurar un trigger, 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 trigger que señale una posible situación no deseada. Primero: el trigger debe activarse cuando se espera que el sistema esté en un estado de problema después del "tiempo para actuar". Segundo: el trigger debe activarse cuando el sistema vaya a alcanzar el estado de problema en menos del "tiempo para actuar". Las funciones de trigger 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 trigger de la forma que prefiera con resultados similares.
Ambas funciones utilizan casi el mismo conjunto de parámetros. Utilice la lista de funciones soportadas como referencia.
En primer lugar, debe especificar el período histórico que Zabbix debe analizar para obtener la predicción. Lo hace de la manera habitual mediante el parámetro período de tiempo y el desplazamiento de tiempo opcional, como lo hace con las funciones avg, count, delta, max, min y sum.
(sólo forecast)
El parámetro time especifica hasta dónde en el futuro Zabbix debe extrapolar las dependencias que encuentra en los datos históricos. No importa si utiliza time_shift o no, time siempre se cuenta a partir del momento actual.
(timeleft solamente)
El parámetro threshold especifica un valor que el item analizado 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 del item 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 de threshold, si existe. La mejor práctica debería ser usar las predicciones como complemento de los diagnósticos de problemas ordinarios, no como sustituto.1
La función fit por defecto 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 |
(forecast solamente)
Cada vez que se evalúa una función de trigger, 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 el item analizado 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(now + time) |
| max | maxnow <= t <= now + time f(t) |
| min | minnow <= t <= now + time f(t) |
| delta | max - min |
| avg | promedio de f(t) (now <= t <= now + time) según la 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, 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ítmicos y de potencia que implican calcular log(t). El desplazamiento de tiempo no afecta a los ajustes lineales, polinomiales, exponenciales (aparte de 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 muestran advertencias ni errores si el ajuste elegido describe mal 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 host, puede usar una expresión de trigger como esta:
Sin embargo, el código de error -1 puede entrar en juego y poner su trigger en estado de problema. Generalmente esto es bueno porque recibe una advertencia de que sus predicciones no funcionan correctamente y debería revisarlas más a fondo 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 host en la última hora. Si está recibiendo demasiadas alertas falsas positivas, considere usar una expresión de trigger más complicada 5:
La situación es un poco más difícil con forecast. En primer lugar, -1 puede o no poner el trigger 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 del item 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 trigger simple como timeleft(/host/item,1h,X) < 1h puede entrar en estado de problema cuando el valor del item se acerca a X y luego recuperarse repentinamente una vez que se alcanza el valor X. Si el problema es que el valor del item 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 item 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 item. Si los datos contienen ceros o números negativos, obtendrá un error ya que log() solo está definido 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 calcular 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 trigger 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)