Fonctions de déclencheur prédictives
Vue d’ensemble
Il arrive parfois que des signes annoncent un problème à venir. Ces signes peuvent être détectés afin que des mesures puissent être prises à l’avance pour prévenir le problème ou au moins en minimiser l’impact.
Zabbix dispose d’outils permettant de prédire le comportement futur du système surveillé sur la base des données historiques. Ces outils sont mis en œuvre au moyen de fonctions de déclencheur prédictives.
Fonctions
Avant de configurer un déclencheur, il est nécessaire de définir ce qu’est un état de problème et de déterminer combien de temps est nécessaire pour intervenir. 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’intervention ». Deuxièmement : le déclencheur doit se déclencher lorsque le système va atteindre l’état de problème dans un délai inférieur au « temps d’intervention ». Les fonctions de déclencheur correspondantes à utiliser sont forecast et timeleft. Notez que l’analyse statistique sous-jacente est fondamentalement identique pour les deux fonctions. Vous pouvez configurer un déclencheur de la manière que vous préférez, 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 afin d’établir la prédiction. Vous le faites de manière familière 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,
qu’il l’atteigne 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 du moment présent et située à droite de celui-ci, ou
1.7976931348623158E+308 s’il n’existe pas de telle racine.
Lorsque les valeurs de l’élément s’approchent du seuil puis le franchissent,
timeleft suppose que cette intersection se situe déjà dans le passé et
passe donc à l’intersection suivante avec le niveau threshold, s’il y en a
une. La bonne pratique consiste à utiliser les prédictions en complément du
diagnostic ordinaire des problèmes, et non comme substitut.1
Fonctions d’ajustement
La fonction 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) |
|---|---|
| linear | x = a + b*t |
| polynomialN2 | x = a~0~ + a~1~*t + a~2~*t2 + ... + a~n~*tn |
| exponential | x = a*exp(b*t) |
| logarithmic | x = a + b*log(t) |
| power | 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 à ces 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 donné 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 future peut être trompeuse.
mode |
Résultat de 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 les calculs avec de très grands nombres, 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 epoch actuel est de l’ordre de 109, l’epoch au carré est de 1018, la précision double est d’environ 10-16). 1 ns est ajouté afin de fournir uniquement des 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 fonctions linéaires, polynomiales, exponentielles (hormis 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 ;
- des complications numériques surviennent (malheureusement, pour certains ensembles de données d’entrée, l’étendue et la précision du format à virgule flottante en double précision deviennent insuffisantes)4.
Aucun avertissement ni aucune erreur ne sont signalés si l’ajustement choisi décrit mal les données fournies ou s’il y a tout 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 placer 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 en détail pour en comprendre la raison. Mais parfois, c’est problématique, car -1 peut simplement signifier qu’aucune donnée sur l’espace disque libre de l’hôte n’a été obtenue au cours de la dernière heure. Si vous recevez 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 placer 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 s’il est normal que la valeur de l’élément soit négative. Mais la probabilité de cette situation dans un contexte réel est négligeable (voir comment fonctionne l’opérateur =). Ajoutez donc ... or forecast(/host/item,(...))=-1 ou ... and forecast(/host/item,(...))<>-1 si vous souhaitez respectivement traiter ou ne pas traiter -1 comme un problème.
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 de 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, par conséquent polynomial3 sera ajusté).
3 Par exemple, l’ajustement de 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() n’est défini que 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 étape supplémentaire. Le calcul de avg implique le calcul de la primitive 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). La résolution de f(t) = 0 implique la recherche des racines du polynôme (numériquement).
5 Mais dans ce cas, -1 peut amener votre déclencheur à sortir 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)