This is the documentation page for an unsupported version of Zabbix.
Is this not what you were looking for? Switch to the current version or choose one from the drop-down menu.

2 Expression de déclencheur

Aperçu

Les expressions utilisées dans les déclencheurs sont très flexibles. Vous pouvez les utiliser pour créer des tests logiques complexes concernant les statistiques surveillées.

Une expression simple et utile peut ressembler à ceci :

{<server>:<key>.<function>(<parameter>)}<operator><constant>

Bien que la syntaxe soit exactement la même, du point de vue fonctionnel, il existe deux types d'expressions de déclencheur :

  • expression du problème - définit les conditions du problème
  • expression de récupération (facultatif) - définit des conditions supplémentaires pour la résolution du problème

Lors de la définition d'une seule expression problématique, cette expression sera utilisée à la fois comme seuil de problème et seuil de récupération du problème. Dès que l'expression problème a pour résultat "VRAI", il y a un problème. Dès que l'expression du problème est évaluée à "FAUX", le problème est résolu.

Lors de la définition à la fois de l'expression du problème et de l'expression de récupération supplémentaire, la résolution du problème devient plus complexe : non seulement l'expression du problème doit être "FAUX", mais également l'expression de récupération doit être "VRAI". Ceci est utile pour éviter le bagotage de déclenchement dans l'hystérésis.

Fonctions

Les fonctions de déclenchement permettent de référencer les valeurs collectées, l'heure actuelle et d'autres facteurs.

Une liste complète des fonctions supportées est disponible.

Paramètres des fonctions

La plupart des fonctions numériques acceptent un nombre de secondes comme paramètre.

Vous pouvez utiliser le préfixe # pour spécifier qu'un paramètre a une signification différente :

APPEL DE FONCTION SIGNIFICATION
sum(600) Somme de toutes les valeurs pendant 600 secondes
sum(#5) Somme des 5 dernières valeurs

La fonction last utilise une signification différente pour les valeurs lorsqu'elle est préfixée par un hashtag - il lui permet de choisir la nième valeur précédente, ainsi les valeurs 3, 7, 2, 6, 5 (du plus récent au moins récent), last(#2) renverrait 7 et last(#5) renverrait 5.

Plusieurs fonctions prennent en charge un deuxième paramètre time_shift. Ce paramètre permet de référencer les données d'une période passée. Par exemple, avg(1h,1d) renvoie la valeur moyenne pour une heure il y a un jour.

Vous pouvez utiliser les symboles d'unités supportés dans les expressions des déclencheurs, par exemple '5m' (minutes) au lieu de '300' secondes ou '1d' (jour) au lieu de '86400' secondes. '1K' représentera '1024' octets.

Les nombres avec le signe '​+'​ ne sont pas supportés.

Opérateurs

Les opérateurs suivants sont supportés pour les déclencheurs (en priorité descendante d'exécution) :

PRIORITÉ OPERATEUR DÉFINITION Notes pour les valeurs inconnues
1 - Moins unaire -Inconnu → Inconnu
2 not NON logique not Inconnu → Inconnu
3 * Multiplication 0 * Inconnu → Inconnu
(oui, Inconnu, pas 0 - pour ne pas perdre
Inconnu dans les opérations arithmétiques)
1.2 * Inconnu → Inconnu
/ Division Inconnu / 0 → erreur
Inconnu / 1.2 → Inconnu
0.0 / Inconnu → Inconnu
4 + Signe plus arithmétique 1.2 + Inconnu → Inconnu
- Signe moins arithmétique 1.2 - Inconnu → Inconnu
5 < Inférieur à. L'opérateur est défini comme :

A<B ⇔ (A<B-0.000001)
1.2 < Inconnu → Inconnu
<= Inférieur ou égal à. L'opérateur est défini comme :

A<=B ⇔ (A≤B+0.000001)
Inconnu <= Inconnu → Inconnu
> Supérieur à. L'opérateur est défini comme :

A>B ⇔ (A>B+0.000001)
>= Supérieur ou égal à. L'opérateur est défini comme :

A>=B ⇔ (A≥B-0.000001)
6 = Est égal. L'opérateur est défini comme :

A=B ⇔ (A≥B-0.000001) et (A≤B+0.000001)
<> Différent. L'opérateur est défini comme :

A<>B ⇔ (A<B-0.000001) ou (A>B+0.000001)
7 and ET logique 0 and Inconnu → 0
1 and Inconnu → Inconnu
Inconnu and Inconnu → Inconnu
8 or OU logique 1 or Inconnu → 1
0 or Inconnu → Inconnu
Inconnu or Inconnu → Inconnu

Les opérateurs not, and et or sont sensibles à la casse et doivent être en minuscules. Ils doivent également être entourés par des espaces ou des parenthèses.

Tous les opérateurs, sauf le - unaire et not, ont une associativité de gauche à droite. Le - unaire et not sont non-associatif (signifiant -(-1) et not(not 1) devraient être utilisé à la place de --1 et not not 1).

Résultat de l'évaluation :

  • Les opérateurs <, <=, >, >=, =, <> doivent donner '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 inconnu, le résultat est Inconnu ;
  • and pour les opérandes connus doit donner '1' si les deux opérandes ne valent pas '0' ; sinon, il donne '0' ; pour les opérandes inconnus and ne donne '0' que si un opérande vaut '0' ; dans le cas contraire, il donne 'inconnu' ;
  • or pour des opérandes connus, donne '1' si l'un de ses opérandes ne vaut pas '0' ; sinon, il donne '0' ; pour les opérandes inconnus or donne '1' seulement si un opérande ne vaut pas '0' ; dans le cas contraire, il donne "inconnu" ;
  • 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 ne vaut pas '0' ; '1' si la valeur de son opérande est égale à '0'. Pour l'opérande inconnu not donne 'Inconnu'.

Valeur mise en cache

Les valeurs requises pour l'évaluation du déclencheur sont mises en cache par le serveur Zabbix. Cette évaluation de déclencheur entraîne une charge de la base de données plus élevée pendant un certain temps après le redémarrage du serveur. Le cache de valeurs n'est pas effacé lorsque les valeurs d'élément de l'historique sont supprimées (manuellement ou par la procédure de nettoyage). 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éclenchement ou que le serveur soit redémarré.

Exemples de déclencheurs

Exemple 1

La charge du processeur est trop élevée sur www.zabbix.com

{www.zabbix.com:system.cpu.load[all,avg1].last()}>5

'www.zabbix.com:system.cpu.load[all,avg1]' donne le nom court du paramètre surveillé. Il indique que le serveur est 'www.zabbix.com' et que la clé surveillée est 'system.cpu.load[all,avg1]'. En utilisant la fonction 'last()', nous faisons référence à la valeur la plus récente. Enfin, '>5' signifie que le déclencheur est dans l'état PROBLÈME lorsque la mesure de charge la du processeur la plus récente sur www.zabbix.com est supérieure à 5.

Exemple 2

www.zabbix.com est surchargé

{www.zabbix.com:system.cpu.load[all,avg1].last()}>5 or {www.zabbix.com:system.cpu.load[all,avg1].min(10m)}>2 

L'expression est vraie lorsque la charge du processeur actuel est supérieure à 5 ou que la charge du processeur était supérieure à 2 au cours des 10 dernières minutes.

Exemple 3

/etc/passwd a été modifié

Utilisation de la fonction diff :

{www.zabbix.com:vfs.file.cksum[/etc/passwd].diff()}=1

L'expression est vraie lorsque la valeur précédente du checksum de /etc/passwd diffère de la plus récente.

Des expressions similaires pourraient être utiles pour surveiller les changements dans les fichiers importants, tels que /etc/passwd, /etc/inetd.conf, /kernel, etc.

Exemple 4

Quelqu'un télécharge un gros fichier sur Internet

Utilisation de la fonction min :

{www.zabbix.com:net.if.in[eth0,bytes].min(5m)}>100K

L'expression est vraie lorsque le nombre d'octets reçus sur eth0 est supérieur à 100 Ko dans les 5 dernières minutes.

Exemple 5

Les deux nœuds du serveur SMTP en cluster sont en panne

Notez l'utilisation de deux hôtes différents dans une expression :

{smtp1.zabbix.com:net.tcp.service[smtp].last()}=0 and {smtp2.zabbix.com:net.tcp.service[smtp].last()}=0

L'expression est vraie lorsque les deux serveurs SMTP sont désactivés sur smtp1.zabbix.com et smtp2.zabbix.com.

Exemple 6

L'agent Zabbix doit être mis à jour

Utilisation de la fonction str() :

{zabbix.zabbix.com:agent.version.str("beta8")}=1

L'expression est vraie si l'agent Zabbix est en version beta8 (vraisemblablement 1.0beta8).

Exemple 7

Le serveur est inaccessible

{zabbix.zabbix.com:icmpping.count(30m,0)}>5

L'expression est vraie si l'hôte "zabbix.zabbix.com" est inaccessible plus de 5 fois au cours des 30 dernières minutes.

Exemple 8

Aucun heartbeat dans les 3 dernières minutes

Utilisation de la fonction nodata() :

{zabbix.zabbix.com:tick.nodata(3m)}=1

Pour utiliser ce déclencheur, 'tick' doit être défini comme un élément trappeur Zabbix. L'hôte doit envoyer périodiquement des données pour cet élément à l'aide de zabbix_sender. Si aucune donnée n'est reçue dans les 180 secondes, la valeur de déclenchement devient PROBLÈME.

Notez que 'nodata' peut être utilisé pour n'importe quel type d'élément.

Exemple 9

Activité du processeur pendant la nuit

Utilisation de la fonction time() :

{zabbix:system.cpu.load[all,avg1].min(5m)}>2 and {zabbix:system.cpu.load[all,avg1].time()}>000000 and {zabbix:system.cpu.load[all,avg1].time()}<060000

Le déclencheur peut changer son statut à VRAI, uniquement la nuit (00:00-06:00).

Example 10

CPU activity at any time with exception

Use of function time() and not operator:

{zabbix:system.cpu.load[all,avg1].min(5m)}>2
       and not ({zabbix:system.cpu.load[all,avg1].dayofweek(0)}=7 and {zabbix:system.cpu.load[all,avg1].time(0)}>230000) 
       and not ({zabbix:system.cpu.load[all,avg1].dayofweek(0)}=1 and {zabbix:system.cpu.load[all,avg1].time(0)}<010000)

The trigger may change its state to true at any time, except for 2 hours on a week change (Sunday, 23:00 - Monday, 01:00).

Exemple 10

Vérifiez si l'heure locale du client est synchronisée avec l'heure du serveur Zabbix

Utilisation de la fonction fuzzytime() :

{MySQL_DB:system.localtime.fuzzytime(10)}=0

Le déclencheur passera à l'état ‘problème’ dans le cas où l'heure locale sur le serveur MySQL_DB et le serveur Zabbix diffère de plus de 10 secondes. Notez que 'system.localtime' doit être configuré comme vérification passive.

Exemple 11

Comparaison de la charge moyenne d’aujourd'hui avec la charge moyenne de la même heure hier (en utilisant un second paramètre time_shift).

{server:system.cpu.load.avg(1h)}/{server:system.cpu.load.avg(1h,1d)}>2

Cette expression se déclenchera si la charge moyenne de la dernière heure dépasse la charge moyenne de la même heure hier plus de deux fois.

Exemple 12

Utilisation de la valeur d'un autre élément pour obtenir un seuil de déclenchement :

{Template PfSense:hrStorageFree[{#SNMPVALUE}].last()}<{Template PfSense:hrStorageSize[{#SNMPVALUE}].last()}*0.1

Le déclencheur se déclenchera si le stockage libre tombe en dessous de 10%.

Exemple 13

Utilisation du résultat de l'évaluation pour obtenir le nombre de déclencheurs sur un seuil :

({server1:system.cpu.load[all,avg1].last()}>5) + ({server2:system.cpu.load[all,avg1].last()}>5) + ({server3:system.cpu.load[all,avg1].last()}>5)>=2

Le déclencheur se déclenchera si au moins deux des déclencheurs de l'expression sont supérieurs à 5.

Hystérésis

Parfois, un intervalle est nécessaire entre les états problème et récupération, plutôt qu'un simple seuil. Par exemple, si nous voulons définir un déclencheur signalant un problème lorsque la température de la salle des serveurs dépasse 20°C et que nous souhaitons qu'il reste dans l'état du problème jusqu'à ce que la température descende sous 15°C, un seuil de déclenchement simple à 20°C ne suffira pas.

Au lieu de cela, nous devons d'abord définir une expression de déclenchement pour l'événement problématique (température supérieure à 20°C). Ensuite, nous devons définir une condition de récupération supplémentaire (température inférieure à 15°C). Pour ce faire, vous définissez un paramètre Expression de récupération supplémentaire lors de la définition du déclencheur.

Dans ce cas, la récupération du problème se fera en deux étapes :

  • Tout d’abord, l’expression du problème (température supérieure à 20°C) devra être évaluée à FAUX
  • Deuxièmement, l'expression de récupération (température inférieure à 15°C) devra être évaluée à VRAI

L'expression de récupération sera évaluée uniquement lorsque l'événement posant problème est résolu en premier.

L'expression de récupération seule à VRAI ne résout pas le problème si l'expression du problème est toujours VRAI !

Exemple 1

La température dans la salle des serveurs est trop élevée.

Expression du problème :

{server:temp.last()}>20

Expression de récupération :

{server:temp.last()}<=15
Exemple 2

L'espace disque disponible est trop faible.

Expression du problème : il est inférieur à 10 Go pour les 5 dernières minutes

{server:vfs.fs.size[/,free].max(5m)}<10G

Expression de récupération : elle est supérieure à 40 Go pour les 10 dernières minutes

{server:vfs.fs.size[/,free].min(10m)}>40G

Expressions avec des éléments non supportés et des valeurs inconnues

Les versions antérieures à Zabbix 3.2 sont très strictes sur les éléments non supportés dans une expression de déclencheur. Tout élément non supporté dans l'expression rend immédiatement la valeur de déclenchement Inconnue.

Depuis Zabbix 3.2, il existe une approche plus flexible des éléments non supportés en admettant des valeurs inconnues dans l'évaluation de l'expression :

  • Pour certaines fonctions, leurs valeurs ne sont pas affectées par la prise en charge ou le non-support d'un élément. Ces fonctions sont maintenant évaluées même si elles se réfèrent à des éléments non supporté. Voir la liste dans les fonctions et les éléments non supportés.
  • Les expressions logiques avec OR et AND peuvent être évaluées à des valeurs connues dans deux cas, indépendamment des opérandes inconnus :
    • "1 or Unsuported_item1.some_function() or Unsuported_item2.some_function() or ..." peut être évalué à '1' (Vrai),
    • "0 and Unsuported_item1.some_function() and Unsuported_item2.some_function() and ..." peut être évalué à '0' (Faux).
      Zabbix essaie d'évaluer les expressions logiques prenant des éléments non supporté en tant que valeurs Inconnues. Dans les deux cas mentionnés ci-dessus, une valeur connue sera produite ; dans d'autres cas, la valeur de déclenchement sera Inconnue.
  • Si une évaluation de fonction pour un élément supporté entraîne une erreur, la valeur de la fonction est Inconnue et participe à l'évaluation de l'expression.

Notez que les valeurs inconnues peuvent "disparaître" uniquement dans les expressions logiques comme décrit ci-dessus. Dans les expressions arithmétiques, les valeurs inconnues conduisent toujours au résultat Inconnu (sauf pour la division par 0).

Si une expression de déclencheur avec plusieurs éléments non supportés est évaluée à Inconnue le message d'erreur dans l'interface fait référence au dernier élément non supporté évalué.