This is a translation of the original English documentation page. Help us make it better.

Sidebar

Zabbix Summit 2022
Register for Zabbix Summit 2022

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.

1 Fonctions

Deux choses à savoir, c'est comment définir un état problématique et combien de temps il faut pour agir. Ensuite, il existe deux façons de configurer un déclencheur signalant une situation indésirable potentielle. Premièrement : le déclencheur doit se déclencher lorsque le système après le "temps d'action" devrait être dans un état problématique. Deuxièmement : le déclencheur doit se déclencher lorsque le système va atteindre l'état du problème en moins de "temps d'action". Les fonctions de déclenchement 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.

2 Paramètres

Les deux fonctions utilisent presque le même ensemble de paramètres. Utilisez la liste des fonctions prises en charge pour référence.

2.1 Intervalle de temps

Tout d'abord, vous devez spécifier la période historique que Zabbix doit analyser pour arriver à la prédiction. Vous le faites de manière familière au moyen du paramètre time period et du décalage temporel facultatif comme vous le faites avec les fonctions avg, count, delta, max, min et sum.

2.2 Horizon de prévision

(forecast seulement)
Le paramètre time spécifie combien de temps dans le futur Zabbix doit extrapoler les dépendances trouvées dans les données historiques. Peu importe si vous utilisez time_shift ou non, time est toujours compté à partir du moment présent.

2.3 Seuil à atteindre

(timeleft seulement)
Le paramètre threshold spécifie une valeur que l'élément analysé doit atteindre, aucune différence si elle est au dessus ou en dessous. Après avoir 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 actuel, situé à droite du moment actuel, ou renvoyer 999999999999.9999 s’il n’existe pas de telles racines.

Lorsque les valeurs d'éléments s'approchent du seuil puis le dépassent, timeleft suppose que l'intersection est déjà passée et passe donc à la prochaine intersection avec le niveau de threshold, le cas échéant. La meilleure pratique consiste à utiliser les prévisions en complément des diagnostics de problèmes ordinaires, et non en tant que substitution.1

2.4 Fonctions d'ajustement

Par défaut, fit est une fonction linéaire. Mais si votre système supervisé est plus compliqué, vous aurez plus d'options à choisir.

fit x = f(t)
linéaire x = a + b*t
polynômeN2 x = a0 + a1*t + a2*t2 + ... + an*tn
exponentiel x = a*exp(b*t)
logarithmique x = a + b*log(t)
puissance x = a*tb
2.5 Modes

(forecast seulement)
Chaque fois qu'une fonction de déclenchement est évaluée, elle obtient des données de la période d'historique spécifiée et adapte une fonction spécifiée aux données. Donc, 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 à une heure future spécifiée, vous ne saurez rien sur le comportement attendu de l'élément analysé d'ici à ce moment-là. Pour certaines options de fit (comme polynôme), une simple valeur future peut être trompeuse.

mode résultat prévisionnel
value f(maintenant + time)
max maxmaintenant <= t <= maintenant + time f(t)
min minmaintenant <= t <= maintenant + time f(t)
delta max - min
avg moyenne de f(t) (maintenant <= t <= maintenant + time) selon la définition

3 Détails

Pour éviter les calculs avec de grands nombres, considérons l'horodatage de la première valeur de la période spécifiée plus 1 ns comme une nouvelle heure nulle (l'heure actuelle est de l'ordre de 109, l'époque au carré est de 1018, la double précision est d'environ 10-16). 1 ns est ajoutée pour fournir toutes les valeurs de temps positives pour les ajustements logarithmiques et les ajustements de puissance impliquant le calcul de log(t). Le décalage temporel n'affecte pas les calculs linéaires, polynomiaux, exponentiels (à l'exception des calculs plus faciles et plus précis), mais modifie la forme des fonctions logarithmiques et de puissance.

4 Erreurs potentielles

Les fonctions retournent -1 dans de telles situations :

  • 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éfini 3 ;
  • complications numériques (malheureusement, pour certains ensembles de données en entrée, la double précision et la virgule flottante sont 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 trop peu de données pour une prédiction précise.

5 Examples and dealing with errors

To get a warning when you are about to run out of free disk space on your host you may use a trigger expression like this:

{host:vfs.fs.size[/,free].timeleft(1h,,0)}<1h

However, error code -1 may come into play and put your trigger in a problem state. Generally it's good because you get a warning that your predictions don't work correctly and you should look at them more thoroughly to find out why. But sometimes it's bad because -1 can simply mean that there was no data about the host free disk space obtained in the last hour. If you are getting too many false positive alerts consider using more complicated trigger expression5:

{host:vfs.fs.size[/,free].timeleft(1h,,0)}<1h and {host:vfs.fs.size[/,free].timeleft(1h,,0)}<>-1

Situation is a bit more difficult with forecast. First of all, -1 may or may not put the trigger in a problem state depending on whether you have expression like {host:item.forecast(...)}<... or like {host:item.forecast(...)}>...

Furthermore, -1 may be a valid forecast if it's normal for the item value to be negative. But probability of this situation in the real world situation is negligible (see how operator = works). So add ... or {host:item.forecast(...)}=-1 or ... and {host:item.forecast(...)}<>-1 if you want or don't want to treat -1 as a problem respectively.

See also

  1. Predictive trigger functions (pdf) on zabbix.org

  1. For example, a simple trigger like {host:item.timeleft(1h,,X)} < 1h may go into problem state when the item value approaches X and then suddenly recover once value X is reached. If the problem is item value being below X use: {host:item.last()} < X or {host:item.timeleft(1h,,X)} < 1h If the problem is item value being above X use: {host:item.last()} > X or {host:item.timeleft(1h,,X)} < 1h↩︎

  2. Polynomial degree can be from 1 to 6, polynomial1 is equivalent to linear. However, use higher degree polynomials with caution. If the evaluation period contains less points than needed to determine polynomial coefficients, polynomial degree will be lowered (e.g polynomial5 is requested, but there are only 4 points, therefore polynomial3 will be fitted).↩︎

  3. For example fitting exponential or power functions involves calculating log() of item values. If data contains zeros or negative numbers you will get an error since log() is defined for positive values only.↩︎

  4. For linear, exponential, logarithmic and power fits all necessary calculations can be written explicitly. For polynomial only value can be calculated without any additional steps. Calculating avg involves computing polynomial antiderivative (analytically). Computing max, min and delta involves computing polynomial derivative (analytically) and finding its roots (numerically). Solving f(t) = 0 involves finding polynomial roots (numerically).↩︎

  5. But in this case -1 can cause your trigger to recover from the problem state. To be fully protected use: {host:vfs.fs.size[/,free].timeleft(1h,,0)}<1h and ({TRIGGER.VALUE}=0 and {host:vfs.fs.size[/,free].timeleft(1h,,0)}<>-1 or {TRIGGER.VALUE}=1)↩︎