7 Fonctions prédictives de déclenchement
Aperçu
Parfois, il y a des signes du problème à venir. Ces signes peuvent être repérés afin que des actions puissent être prises à l'avance pour prévenir ou au moins minimiser l'impact du problème.
Zabbix dispose d’outils permettant de prédire le comportement futur du système supervisé sur la base de données historiques. Ces outils sont exécutées via des fonctions prédictives de déclenchement.
Fonctions
Avant de définir un déclencheur, il est nécessaire de définir ce qu'est un état de problème et combien de temps est nécessaire pour agir. Il existe ensuite deux façons de configurer un déclencheur signalant une situation potentiellement indésirable. Premièrement : le déclencheur doit se déclencher lorsque le système est censé être dans un état de problème après le "temps d'action". Deuxièmement : le déclencheur doit se déclencher lorsque le système va atteindre l'état de problème dans moins de "temps d'action".
Les fonctions de déclencheur correspondantes à utiliser sont forecast et timeleft. Notez que l'analyse statistique sous-jacente est essentiellement identique pour les deux fonctions. Vous pouvez configurer un déclencheur de l'une ou l'autre manière, avec des résultats similaires.
Paramètres
Les deux fonctions utilisent presque le même ensemble de paramètres. Utilisez la liste des fonctions prises en charge comme référence.
Intervalle de temps
Tout d'abord, vous devez spécifier la période historique que Zabbix doit analyser pour établir la prédiction. Vous le faites de manière habituelle au moyen du paramètre time period et d'un décalage temporel facultatif, comme vous le faites avec les fonctions avg, count, delta, max, min et sum.
Horizon de prévision
(forecast uniquement)
Le paramètre time spécifie jusqu'à quel point dans le futur Zabbix doit extrapoler les dépendances qu'il trouve dans les données historiques. Que vous utilisiez time_shift ou non, time est toujours compté à partir du moment actuel.
Seuil à atteindre
(timeleft uniquement)
Le paramètre threshold spécifie une valeur que l'élément analysé doit atteindre,
peu importe qu'elle soit atteinte par le haut ou par le bas. Une fois que nous avons déterminé f(t)
(voir ci-dessous), nous devons résoudre l'équation f(t) = threshold et renvoyer la
racine la plus proche de maintenant et située à droite de maintenant, ou
1.7976931348623158E+308 s'il n'existe pas une telle racine.
Lorsque les valeurs de l'élément approchent le seuil puis le franchissent,
timeleft considère que l'intersection appartient déjà au passé et
passe donc à la prochaine intersection avec le niveau threshold, s'il y en a une. La bonne pratique consiste à utiliser les prédictions comme complément du diagnostic habituel des problèmes, et non comme substitut.1
Fonctions d'ajustement
fit par défaut est la fonction linéaire. Mais si votre système surveillé est plus complexe, vous avez davantage d'options parmi lesquelles choisir.
fit |
x = f(t) |
|---|---|
| linéaire | x = a + b*t |
| polynomialN2 | x = a~0~ + a~1~*t + a~2~*t2 + ... + a~n~*tn |
| exponentielle | x = a*exp(b*t) |
| logarithmique | x = a + b*log(t) |
| puissance | x = a*tb |
Modes
(forecast uniquement)
Chaque fois qu'une fonction de déclencheur est évaluée, elle récupère les données de la période d'historique spécifiée et ajuste une fonction spécifiée aux données. Ainsi, si les données sont légèrement différentes, la fonction ajustée sera légèrement différente. Si nous calculons simplement la valeur de la fonction ajustée à un moment spécifié dans le futur, vous ne saurez rien de la manière dont l'élément analysé est censé se comporter entre maintenant et ce moment futur. Pour certaines options de fit (comme polynomial), une simple valeur issue du futur peut être trompeuse.
mode |
résultat forecast |
|---|---|
| value | f(now + time) |
| max | max~now\ <=\ t\ <=\ now\ +\ time~ f(t) |
| min | min~now\ <=\ t\ <=\ now\ +\ time~ f(t) |
| delta | max - min |
| avg | moyenne de f(t) (now <= t <= now + time) selon la définition |
Détails
Pour éviter des calculs avec des nombres énormes, nous considérons l’horodatage de la première valeur dans la période spécifiée, plus 1 ns, comme un nouveau temps zéro (le temps d’époque actuel est de l’ordre de 109, le carré de l’époque est 1018, la précision double est d’environ 10-16). 1 ns est ajouté afin de fournir toutes les valeurs de temps positives pour les ajustements logarithmiques et de puissance, qui impliquent le calcul de log(t). Le décalage temporel n’affecte pas les ajustements linéaires, polynomiaux, exponentiels (à part des calculs plus simples et plus précis), mais modifie la forme des fonctions logarithmiques et de puissance.
Erreurs potentielles
Les fonctions renvoient -1 dans les situations suivantes :
- la période d'évaluation spécifiée ne contient aucune donnée ;
- le résultat de l'opération mathématique n'est pas défini3 ;
- complications numériques (malheureusement, pour certains ensembles de données d'entrée, la plage et la précision du format à virgule flottante en double précision deviennent insuffisantes)4.
Aucun avertissement ni erreur n'est signalé si l'ajustement choisi décrit mal les données fournies ou s'il y a simplement trop peu de données pour une prédiction précise.
Exemples et gestion des erreurs
Pour obtenir un avertissement lorsque vous êtes sur le point de manquer d'espace disque libre sur votre hôte, vous pouvez utiliser une expression de déclencheur comme celle-ci :
timeleft(/host/vfs.fs.size[/,free],1h,0)<1h
Cependant, le code d'erreur -1 peut entrer en jeu et mettre votre déclencheur dans un état de problème. En général, c'est une bonne chose, car vous recevez un avertissement indiquant que vos prévisions ne fonctionnent pas correctement et que vous devriez les examiner plus attentivement pour en déterminer la cause. Mais parfois, c'est problématique, car -1 peut simplement signifier qu'aucune donnée concernant l'espace disque libre de l'hôte n'a été obtenue au cours de la dernière heure. Si vous obtenez trop de fausses alertes positives, envisagez d'utiliser une expression de déclencheur plus complexe 5 :
timeleft(/host/vfs.fs.size[/,free],1h,0)<1h and timeleft(/host/vfs.fs.size[/,free],1h,0)<>-1
La situation est un peu plus difficile avec forecast. Tout d'abord,
-1 peut ou non mettre le déclencheur dans un état de problème selon
que vous avez une expression comme forecast(/host/item,(...))<... ou
comme forecast(/host/item,(...))>...
En outre, -1 peut être une prévision valide si la valeur de l'élément est normalement négative. Mais la probabilité de cette situation dans le monde réel est négligeable (voir
comment l'opérateur = fonctionne). Ajoutez donc ... or forecast(/host/item,(...))=-1 ou
... and forecast(/host/item,(...))<>-1 si vous souhaitez ou non
traiter -1 comme un problème, respectivement.
Notes de bas de page
1 Par exemple, un déclencheur simple comme
timeleft(/host/item,1h,X) < 1h peut passer à l'état de problème lorsque la
valeur de l'élément approche X, puis se rétablir soudainement une fois la valeur X atteinte. Si le problème est que la valeur de l'élément est inférieure à X, utilisez :
last(/host/item) < X or timeleft(/host/item,1h,X) < 1h Si le
problème est que la valeur de l'élément est supérieure à X, utilisez :
last(/host/item) > X or timeleft(/host/item,1h,X) < 1h
2 Le degré du polynôme peut aller de 1 à 6, polynomial1 est équivalent à linear. Cependant, utilisez les polynômes de degré supérieur avec prudence. Si la période d'évaluation contient moins de points que nécessaire pour déterminer les coefficients du polynôme, le degré du polynôme sera abaissé (par exemple, polynomial5 est demandé, mais il n'y a que 4 points, donc polynomial3 sera ajusté).
3 Par exemple, l'ajustement des fonctions exponential ou power implique le calcul de log() des valeurs de l'élément. Si les données contiennent des zéros ou des nombres négatifs, vous obtiendrez une erreur, car log() est défini uniquement pour les valeurs positives.
4 Pour les ajustements linear, exponential, logarithmic et power, tous les calculs nécessaires peuvent être écrits explicitement. Pour polynomial, seule value peut être calculée sans étapes supplémentaires. Le calcul de avg implique le calcul de l'antidérivée du polynôme (analytiquement). Le calcul de max, min et delta implique le calcul de la dérivée du polynôme (analytiquement) et la recherche de ses racines (numériquement). Résoudre f(t) = 0 implique de trouver les racines du polynôme (numériquement).
5 Mais dans ce cas, -1 peut amener votre déclencheur à se rétablir
de l'état de problème. Pour être totalement protégé, utilisez :
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)