3 Expression de déclencheur
Aperçu
Cette page décrit la syntaxe des expressions de déclencheur et les détails de leur évaluation.
La syntaxe d'une expression simple est la suivante :
function(/host/item,time_period)<operator><constant>
Dans cette expression, le premier opérande (à gauche de l'opérateur) est une fonction avec ses paramètres entre parenthèses (généralement l'élément de données et la période).
La fonction est utilisée pour analyser les données reçues pendant la période définie, ce qui produit une valeur calculée.
Cette valeur est ensuite comparée au second opérande à l'aide de l'opérateur. Dans cet exemple, le second opérande est une constante, mais il peut également s'agir d'une autre fonction.
Par exemple :
min(/Zabbix server/net.if.in[eth0,bytes],5m)>100K
Ce déclencheur se déclenche si le nombre d'octets reçus sur eth0 au cours des cinq dernières minutes a toujours été supérieur à 100 kilo-octets. Dans ce cas, l'expression est vraie et un problème est créé.
Les expressions de déclencheur sont extrêmement flexibles. Dans des expressions plus complexes, plusieurs fonctions, opérateurs et constantes peuvent être combinés.
Voir aussi :
- Exemples de déclencheurs
- Détection des problèmes avec les déclencheurs (introduction générale)
Fonctions
Les fonctions permettent d'analyser les valeurs collectées, par exemple de calculer la moyenne ou de trouver une chaîne spécifique.
Cliquez sur le groupe de fonctions correspondant pour voir plus de détails.
| Groupe de fonctions | < | Fonctions | |
|---|---|---|---|
| Fonctions d'agrégation | < | avg, bucket_percentile, count, histogram_quantile, item_count, kurtosis, mad, max, min, skewness, stddevpop, stddevsamp, sum, sumofsquares, varpop, varsamp | |
| Fonctions foreach | avg_foreach, bucket_rate_foreach, count_foreach, exists_foreach, last_foreach, max_foreach, min_foreach, sum_foreach | ||
| Fonctions bit à bit | < | bitand, bitlshift, bitnot, bitor, bitrshift, bitxor | |
| Fonctions de date et d'heure | < | date, dayofmonth, dayofweek, now, time | |
| Fonctions d'historique | < | change, changecount, count, countunique, find, first, firstclock, fuzzytime, last, lastclock, logeventid, logseverity, logsource, logtimestamp, monodec, monoinc, nodata, percentile, rate | |
| Fonctions de tendances | < | baselinedev, baselinewma, trendavg, trendcount, trendmax, trendmin, trendstl, trendsum | |
| Fonctions mathématiques | < | abs, acos, asin, atan, atan2, avg, cbrt, ceil, cos, cosh, cot, degrees, e, exp, expm1, floor, log, log10, max, min, mod, pi, power, radians, rand, round, signum, sin, sinh, sqrt, sum, tan, truncate | |
| Fonctions d'opérateur | < | between, in | |
| Fonctions prédictives | < | forecast, timeleft | |
| Fonctions de chaîne | < | ascii, bitlength, bytelength, char, concat, insert, jsonpath, left, length, ltrim, mid, repeat, replace, right, rtrim, trim, xmlxpath | |
Sauf indication contraire, ces fonctions sont prises en charge dans :
Les fonctions foreach sont prises en charge uniquement pour les calculs agrégés.
En règle générale, les fonctions renvoient des valeurs numériques à des fins de comparaison. Lorsqu'elles renvoient des chaînes, la comparaison est possible avec les opérateurs = et <> (voir l'exemple Détecter des logiciels non concordants sur différents hôtes).
Paramètres de fonction
Les paramètres de fonction permettent de spécifier :
- la clé d’élément (sous la forme
/host/key) pour les fonctions faisant référence à l’historique d’un élément d’hôte - la période de temps (et d’autres paramètres spécifiques à la fonction)
- d’autres expressions
Clé d’élément
L’élément référencé doit être dans un état pris en charge (à l’exception de la fonction nodata(), qui est également calculée pour les éléments non pris en charge).
L’omission du nom d’hôte dans le premier paramètre (c’est-à-dire comme dans function(//key,parameter,...)) n’est prise en charge que dans certains contextes :
- Dans la formule des éléments calculés
- Dans les macros d’expression, qui peuvent être utilisées dans :
- le champ Nom de l’événement
- le nom du graphique
- l’étiquette des éléments de carte « Host » et « Trigger »
Dans ces contextes, vous pouvez également utiliser la macro {HOST.HOST}.
{HOST.HOST<1-9>} peut être utilisée dans le cas du champ Nom de l’événement et de l’élément de carte « Trigger » pour faire référence à un élément spécifique dans l’expression du déclencheur.
Lorsque le nom d’hôte est omis ou remplacé par {HOST.HOST} dans ces contextes, la référence pointe vers le premier élément de l’expression du déclencheur ou vers le premier élément du graphique.
En dehors de ces contextes pris en charge, l’omission du nom d’hôte dans les expressions de déclencheur entraînera une erreur.
Voir l’exemple Comparer les charges CPU à long terme pour une illustration de l’utilisation de la double barre oblique dans les macros de nom d’événement.
Période de temps
Les paramètres spécifiques à une fonction sont placés après la clé d’élément et sont séparés de la clé d’élément par une virgule.
La plupart des fonctions numériques acceptent une période de temps comme paramètre. Elle permet de spécifier l’intervalle qui nous intéresse. Elle peut être indiquée comme une période de temps (30s, 10m, 1h) ou comme une plage de valeurs (#5 - pour les cinq dernières valeurs).
Vous pouvez utiliser des secondes ou des suffixes de temps pour indiquer la période de temps. Précédé d’un dièse, le paramètre a une signification différente :
| Expression | Description |
|---|---|
| sum(/host/key,10m) | Somme des valeurs des 10 dernières minutes. |
| sum(/host/key,#10) | Somme des dix dernières valeurs. |
Les paramètres précédés d’un dièse ont une signification différente avec la fonction last : ils désignent la Nième valeur précédente ; ainsi, étant donné les valeurs 30, 70, 20, 60, 50 (de la plus récente à la plus ancienne) :
last(/host/key,#2)renverrait '70'last(/host/key,#5)renverrait '50'
La période de temps est mesurée jusqu’à « maintenant » — où « maintenant » correspond à la dernière heure de recalcul du déclencheur (voir Fréquence de calcul) ; « maintenant » n’est pas l’heure « actuelle » du serveur.
La période de temps spécifie soit :
- de prendre en compte toutes les valeurs entre « maintenant - période de temps » et « maintenant » (ou, avec décalage temporel, entre « maintenant - décalage temporel - période de temps » et « maintenant - time_shift »)
- de ne pas prendre en compte plus que le nombre num de valeurs passées, jusqu’à
« maintenant »
- S’il y a 0 valeur disponible pour la période de temps ou le nombre num spécifié, alors le déclencheur ou l’élément calculé qui utilise cette fonction devient non pris en charge
Notez que :
- Si une seule fonction (référençant l’historique des données) est utilisée dans le déclencheur, « maintenant » correspond toujours à la dernière valeur reçue. Par exemple, si la dernière valeur a été reçue il y a une heure, la période de temps sera considérée jusqu’à cette dernière valeur reçue il y a une heure.
- Un nouveau déclencheur est calculé dès que la première valeur est reçue (fonctions d’historique) ; il sera calculé dans les 30 secondes pour les fonctions date and time et nodata(). Ainsi, le déclencheur sera calculé même si la période de temps définie (par exemple, une heure) ne s’est pas encore écoulée depuis la création du déclencheur. Le déclencheur sera également calculé après la première valeur, même si la plage temporelle a été définie, par exemple, sur les dix dernières valeurs.
Décalage temporel
Un décalage temporel facultatif est pris en charge avec le temps ou le nombre de valeurs comme paramètre de fonction. Ce paramètre permet de référencer des données provenant d’une période passée.
Le décalage temporel commence par now — qui indique l’heure actuelle — et est suivi de +N<time unit> ou -N<time unit> — pour ajouter ou soustraire N unités de temps.
Par exemple, avg(/host/key,1h:now-1d) renverra la valeur moyenne sur une heure, un jour auparavant.
Le décalage temporel spécifié en mois (M) et en années (y) n’est pris en charge que pour les fonctions de tendances. Les autres fonctions prennent en charge les secondes (s), les minutes (m), les heures (h), les jours (d) et les semaines (w).
Décalage temporel avec des périodes absolues
Les périodes absolues sont prises en charge dans le paramètre de décalage temporel, par exemple de minuit à minuit pour une journée, de lundi à dimanche pour une semaine, du premier au dernier jour du mois pour un mois.
Le décalage temporel pour les périodes absolues commence par now — qui indique l’heure actuelle — et est suivi d’un nombre quelconque d’opérations temporelles : /<time unit> — définit le début et la fin de l’unité de temps, par exemple de minuit à minuit pour une journée, +N<time unit> ou -N<time unit> — pour ajouter ou soustraire N unités de temps.
Veuillez noter que la valeur du décalage temporel peut être supérieure ou égale à 0, tandis que la valeur minimale de la période est 1.
| Paramètre | Description |
|---|---|
| 1d:now/d | Hier |
| 1d:now/d+1d | Aujourd’hui |
| 2d:now/d+1d | Les 2 derniers jours |
| 1w:now/w | Semaine dernière |
| 1w:now/w+1w | Cette semaine |
Autres expressions
Les paramètres de fonction peuvent contenir d'autres expressions, comme dans la syntaxe suivante :
min(min(/host/key,1h),min(/host2/key2,1h)*10)
Notez que d'autres expressions ne peuvent pas être utilisées si la fonction référence l'historique d'un élément. Par exemple, la syntaxe suivante n'est pas autorisée :
min(/host/key,#5*10)
Bien que les autres expressions de déclencheur en tant que paramètres de fonction soient limitées aux fonctions sans historique dans les déclencheurs, cette limitation ne s'applique pas aux éléments calculés.
Opérateurs
Les opérateurs suivants sont pris en charge pour les déclencheurs (par ordre décroissant de priorité d'exécution) :
| Priorité | Opérateur | Définition | Remarques pour les valeurs inconnues | Forcer la conversion de l'opérande en float 1 |
|---|---|---|---|---|
| 1 | - | Moins unaire | -Unknown → Unknown | Oui |
| 2 | not | NON logique | not Unknown → Unknown | Oui |
| 3 | * | Multiplication | 0 * Unknown → Unknown (oui, Unknown, et non 0 - afin de ne pas perdre Unknown dans les opérations arithmétiques) 1.2 * Unknown → Unknown |
Oui |
| / | Division | Unknown / 0 → error Unknown / 1.2 → Unknown 0.0 / Unknown → Unknown |
Oui | |
| 4 | + | Plus arithmétique | 1.2 + Unknown → Unknown | Oui |
| - | Moins arithmétique | 1.2 - Unknown → Unknown | Oui | |
| 5 | < | Inférieur à. L'opérateur est défini comme suit : A<B ⇔ (A<B-0.000001) |
1.2 < Unknown → Unknown | Oui |
| <= | Inférieur ou égal à. L'opérateur est défini comme suit : A<=B ⇔ (A≤B+0.000001) |
Unknown <= Unknown → Unknown | Oui | |
| > | Supérieur à. L'opérateur est défini comme suit : A>B ⇔ (A>B+0.000001) |
Oui | ||
| >= | Supérieur ou égal à. L'opérateur est défini comme suit : A>=B ⇔ (A≥B-0.000001) |
Oui | ||
| 6 | = | Égal à. L'opérateur est défini comme suit : A=B ⇔ (A≥B-0.000001) and (A≤B+0.000001) |
Non 1 | |
| <> | Différent de. L'opérateur est défini comme suit : A<>B ⇔ (A<B-0.000001) or (A>B+0.000001) |
Non 1 | ||
| 7 | and | ET logique | 0 and Unknown → 0 1 and Unknown → Unknown Unknown and Unknown → Unknown |
Oui |
| 8 | or | OU logique | 1 or Unknown → 1 0 or Unknown → Unknown Unknown or Unknown → Unknown |
Oui |
1 Un opérande de type chaîne est tout de même converti en valeur numérique si :
- l'autre opérande est numérique
- un opérateur autre que = ou <> est utilisé sur un opérande
(Si la conversion échoue, l'opérande numérique est converti en chaîne et les deux opérandes sont comparés comme des chaînes.)
Les opérateurs not, and et or sont sensibles à la casse et doivent être en minuscules. Ils doivent également être entourés d'espaces ou de parenthèses.
Tous les opérateurs, à l'exception de - unaire et not, ont une associativité de gauche à droite. - unaire et not ne sont pas associatifs (ce qui signifie que -(-1) et not (not 1) doivent être utilisés à la place de --1 et not not 1).
Résultat de l'évaluation :
- les opérateurs <, <=, >, >=, =, <> doivent produire '1' dans l'expression du déclencheur si la relation spécifiée est vraie, et '0' si elle est fausse. Si au moins un opérande est Unknown, le résultat est Unknown ;
- and pour des opérandes connus doit produire '1' si ses deux opérandes sont différents de '0' ; sinon, il produit '0' ; pour des opérandes inconnus, and produit '0' uniquement si un opérande est égal à '0' ; sinon, il produit 'Unknown' ;
- or pour des opérandes connus doit produire '1' si l'un de ses opérandes est différent de '0' ; sinon, il produit '0' ; pour des opérandes inconnus, or produit '1' uniquement si un opérande est différent de '0' ; sinon, il produit 'Unknown' ;
- le résultat de l'opérateur de négation logique not pour un opérande connu est '0' si la valeur de son opérande est différente de '0' ; '1' si la valeur de son opérande est égale à '0'. Pour un opérande inconnu, not produit 'Unknown'.
État d'expression inconnu
Il est possible qu'un opérande inconnu apparaisse dans une expression de déclencheur lorsque :
- un élément non pris en charge est utilisé
- l'évaluation d'une fonction, pour un élément pris en charge, entraîne une erreur
Dans ce cas, l'expression de déclencheur est généralement évaluée à Unknown (car elle ne peut pas être évaluée)
Il est possible de recevoir une notification concernant des déclencheurs inconnus.
Exceptions
Malgré la présence d'un opérande inconnu, les expressions de déclencheur peuvent, dans certains cas, être évaluées à un résultat connu (Problem/OK) :
- La fonction
nodata()est évaluée независимо du fait que l'élément référencé soit pris en charge ou non. - Les expressions avec AND/OR peuvent être évaluées à un résultat connu dans deux cas :
- Cas 1 : "
1 or some_function(unsupported_item1) or some_function(unsupported_item2) or ..." est évaluée à un résultat connu ('1' ou "Problem"), - Cas 2 : "
0 and some_function(unsupported_item1) and some_function(unsupported_item2) and ..." est évaluée à un résultat connu ('0' ou "OK").
- Cas 1 : "
- Si l'évaluation de la fonction pour un élément pris en charge entraîne une erreur, la valeur de la fonction devient
Unknownet elle participe comme opérande inconnu à l'évaluation ultérieure de l'expression.
Les opérandes inconnus ne peuvent "disparaître" que dans les expressions logiques comme décrit ci-dessus.
Dans les expressions arithmétiques, les opérandes inconnus conduisent toujours à Unknown (sauf en cas de division par 0).
L'état d'expression inconnu ne modifie pas l'état du déclencheur (Problem/OK).
Ainsi, si l'état du déclencheur était "Problem" (voir Cas 1), il reste à l'état de problème même si la partie connue est résolue ('1' devient '0'), car l'expression est maintenant évaluée à Unknown et cela ne modifie pas l'état du déclencheur.
Si une expression de déclencheur avec plusieurs éléments non pris en charge est évaluée à Unknown, le message d'erreur dans le frontend fait référence au dernier élément non pris en charge évalué.
Mise en cache des valeurs
Les valeurs requises pour l’évaluation des déclencheurs sont mises en cache par le serveur Zabbix. Pour cette raison, l’évaluation des déclencheurs entraîne une charge plus élevée sur la base de données pendant un certain temps après le redémarrage du serveur.
Le cache des valeurs n’est pas vidé lorsque les valeurs d’historique des éléments sont supprimées (manuellement ou par le housekeeper) ; le serveur utilisera donc les valeurs mises en cache jusqu’à ce qu’elles soient plus anciennes que les périodes définies dans les fonctions de déclencheur ou jusqu’au redémarrage du serveur.
S’il n’y a pas de données récentes dans le cache et qu’aucune période d’interrogation n’est définie dans la fonction, Zabbix remontera par défaut jusqu’à une semaine dans le passé pour interroger la base de données à la recherche de valeurs historiques.