Table of Contents

4.12 Déclencheurs

Un déclencheur est défini comme une expression logique et représente l'état du système.

Le statut des déclencheurs (expression) est recalculé chaque fois que le serveur Zabbix reçoit une nouvelle valeur, si cette valeur fait partie de cette expression. L'expression peut contenir les valeurs suivantes:

VALEURDESCRIPTION
VRAISignifie généralement que quelque chose s'est passé. Par exemple, la charge processeur est trop élevée.
FAUXC'est l'état normal du déclencheur.
INCONNUDans ce cas, Zabbix ne peut pas évaluer l'expression du déclencheur. Cela peut être causé par plusieurs raisons:
Le serveur est inaccessible
L'expression du déclencheur ne peut être évaluée
L'expression du déclencheur a été récemment modifiée

4.12.1 Expression des déclencheurs

Les expressions utilisées pour les déclencheurs sont très flexible. Vous pouvez les utiliser pour créer des tests logiques complexes concernant les statistiques supervisées Les opérateurs suivant sont supportés pour les déclencheurs (classé par ordre de priorité):

PRIORITÉOPÉRATEURDÉFINITION
1 / Division
2 * Multiplication
3 - Moins arithmétique
4 + Plus arithmétique
5 < Inférieur à
6 > Supérieur à
7 # Non égal. L'opérateur est défini comme:
A=B ⇔ (A<B-0.000001) | (A>B+0.000001)
8 = Est égal. L'opérateur est défini comme:
A=B ⇔ (A>B-0.000001) & (A<B+0.000001)
9 & ET logique
10 | OU logique

4.12.2 Fonctions des déclencheurs

Les fonctions suivantes sont supportées:

Toutes les fonctions retournent uniquement des valeurs numériques.Par exemple, la comparaison de chaînes de caractères n'est pas supportées.
FONCTIONARGUMENTTYPES DE VALEURS SUPPORTÉESDÉFINITION
abschange ignoré float, int, str, text, log Retourne la valeur absolue de la différence entre les deux dernières valeurs.
Pour les chaînes:
0 – les valeurs sont égales
1 – les valeurs diffèrent
avg sec or #num float, int Valeur moyenne pour la période de temps. Le paramètre définit la longueur de la période de temps en seconde.
change ignoré float, int, str, text, log Retourne la différence entre les deux dernières valeurs.
Pour les chaînes:
0 – les valeurs sont égales
1 – les valeurs diffèrent
count sec or #num float, int, str, text, log Nombre de valeurs dans l'historique pour la période de temps en seconde ou nombre de dernières #num valeurs qui correspondent à la condition.
La fonction accepte un second paramètre optionnel pattern et un troisième paramètre operation.
Par exemple,
count(600,12) retournera le nombre exact de valeur stockées dans l'historique égales à '12'.
Items entier: correspondance exacte
Items décimaux: correspondance à 0.00001 près
Items composés de Chaînes, texte et log: correspondance si contient le modèle.
Le troisième paramètre fonctionne uniquement pour les valeurs entières ou décima.
Opérateurs supportés:
eq – égal
ne – non égal
gt – supérieur
ge – supérieur ou égal
lt – inférieur
le – inférieur ou égal
Par exemple,
count(600,12,“gt”) retournera le nombre exacte de valeurs stockées dans l'historique qui sont supérieures à '12' durant les 600 dernières secondes.
Un autre exemple:
count(#10,12,“gt”) retournera le nombre exacte de valeurs stockées dans l'historique qui sont supérieures à '12' parmi les 10 dernières valeurs.
Paramètre #num supporté depuis Zabbix 1.6.1.
date ignoré tous Retourne la date actuelle au format AAAAMMJJ.
Par exemple: 20031025
dayofweek ignoré tous Retourne le jour de la semaine dans l'ordre de 1 à 7. Lun – 1, Dim – 7.
delta sec or #num float, int identique à max()-min()
diff ignoré float, int, str, text, log Retourne:
1 – si il y a une différence entre les deux dernières valeurs
0 – les valeurs sont identiques
fuzzytime sec float, int Retourne 1 si le timestamp (la valeur de l'item) ne diffère pas du temps du serveur Z plus de N secondes, 0 – Sinon.
Utilisé fréquemment avec system.localtime pour vérifier que le temps local est bien synchronisé avec le temps local du serveur Zabbix.
iregexp 1st – string
2nd – sec or #num
str, log, text Cette fonction n'est pas sensible à la casse, contrairement à la fonction analogue de regexp.
last sec
#num
float, int, str, text, log La dernière (ou plus récente) valeur. Paramètres:
sec – ignoré
#num – la num (énième) dernière valeur
Par exemple,
last(0) est toujours égale à last(#1)
last(#3) – la troisième plus récente valeur
ZAbbix ne garantie pas l'ordre exact des valeurs si plus de deux valeurs existent et ont moins d'une seconde de différence dans l'historique.
Paramètre #num est supporté depuis la version 1.6.2 de Zabbix.
logseverity ignoré log Retourne le niveau de sévérité de la dernière entrée du log. Le paramètre est ignoré.
0 – niveau de sévérité par défaut
N – niveau de sévérité (l'integer est le plus utilisé pour les événements des logs de Windows). Zabbix prend le niveau de sévérité dans le champs Information des fichiers de log de Windows.
logsource string log Vérifie si la dernière entrée du fichier de log s'applique aux paramètres .
0 – ne correspond pas
1 – correspond
Habituellement utilisé sur les événements des log Windows. Par exemple, logsource(“VMWare Server”)
max sec, #num float, int Valeur maximale pour une période de temps donnée.
Le paramètre définit la période à traiter en secondes.
min sec, #num float, int Valeur minimale pour une période de temps donnée.
Le paramètre définit la période à traiter en secondes.
nodata sec tous Retourne :
1 – si aucune donnée n'a été reçu lors de la période définit (en secondes). La période a traité ne doit pas être inférieure à 30 secondes.
0 - sinon
now ignoré tous Retourne le nombre de secondes depuis l'Epoch (00:00:00 UTC, 1 Janvier 1970).
prev ignoré float, int, str, text, log Retourne la valeur précédente. Le paramètre est ignoré.
Est équivalent à last(#2)
regexp 1st – string
2nd – sec or #num
str, log, text Vérifie si la dernière valeur correspond à l'expression régulière. Le paramètre définit l'expression régulière, sous la forme Posix.
Le second paramètre est optionnel, il s'agit du nombre de secondes ou du nombre de lignes à analyser. Dans ce cas, plus d'une seule valeur sera traité.
Cette fonction est sensible à la casse.
Retourne:
1 – Trouvée
0 - sinon
str 1st – string
2nd – sec or #num
str, log, text Recherche une string dans la dernière valeur (la plus récente). La paramètre définit la string à trouver. Attention à la casse !
Le paramètre optionnel est le nombre de secondes ou de ligne à analyser. Dans ce cas, plus d'une seule valeur sera traité.
Returns:
1 – trouvée
0 – sinon
sum sec, #num float, int Somme des valeur sur une période données. Le paramètre définit la période en secondes.
time ignorétous Retourne la date actuelle sous la forme HHMMSS . Exemple: 123055
Certaines fonctions ne peuvent pas être utilisées pour des paramètres non numériques!

La plupart des fonctions numérique acceptent le nombre de secondes comme argument. Vous pouvez aussi utiliser le préfixe # pour spécifier que l'argument a un sens différent:

ARGUMENTDEFINITION
sum(600)Somme de toutes les valeurs des 600 dernières secondes
sum(#5)Somme des 5 dernières valeurs

Les constantes suivantes sont supportées dans les triggers:

CONSTANTDEFINITION
<nombre>Nombre positif flotant.
Exemples: 0, 1, 0.15, 123.55
<nombre><K|M|G>K – 1024*N
M – 1024*1024*N
G – 1024*1024*1024*N
Exemples: 2K, 4G, 0.5M

Une expression simple et utile pourrait ressembler à ça :

{<serveur>:<clef>.<fonction>(<parametre>)}<operateur><const>

Le paramètre ne doit pas être omis dans ces fonctions, même s'il est ignoré. Par exemple : last(0)

Exemple 1

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

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

‘zabbix.com:system.cpu.load[all,avg1]’ fait référence à un paramètre surveillé. On spécifie le serveur avec ‘zabbix.com’ et la clef à surveiller est ‘system.cpu.load[all,avg1]’. En utilisant la fonction ‘last()’, nous faisons référence à la valeur la plus récente. Finalement, ‘>5’ signifie que le déclencheur passe à vrai (PROBLEM) seulement si la valeur la plus récente de la charge du processeur du serveur zabbix.com est supérieure à 5.

Exemple 2

zabbix.com est surchargé

{zabbix.com:system.cpu.load[all,avg1].last(0)}>5|{zabbix.com:system.cpu.load[all,avg1].min(600)}>2 

L'expression retourne vraie (PROBLEM) lorsque la charge du processeur est supérieure à 5 OU que la charge du processeur est supérieure à 2 lors des 10 dernières minutes (600 secondes)

Exemple 3

/etc/passwd a été changé

Utilisation de la fonction diff:

{zabbix.com:vfs.file.cksum[/etc/passwd].diff(0)}>0

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

Des expressions similaires peuvent se révéler très utile pour surveiller des fichiers importants comme /etc/passwd, /etc/shadow, /etc/inetd.conf, /kernel, etc.

Exemple 4

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

Utilisation de la fonction min:

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

L'expression renvoie vrai (PROBLEM) quand le nombre d'octets reçus sur eth0 est supérieur à 100Ko sur les 5 dernières minutes.

Example 5

Les deux serveurs SNMP sont tombés

Notez l'utilisation de deux machines (host) différentes dans une même expression :

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

L'expression retourne vrai (PROBLEM) si les serveurs SNMP des deux machines (smtp1.zabbix.com et smtp2.zabbix.com) sont tombés.

Exemple 6

L'agent Zabbix a besoin d'être mise à jour

Utilisation de la fonction str() :

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

L'expression retourne vrai (PROBLEM) si l'agent Zabbix du serveur zabbix.zabbix.com est actuellement à la version beta8 (il s'agit d'une sous-chaine de 1.0beta8).

Exemple 7

Le serveur ne répond pas

{zabbix.zabbix.com:status.last(0)}=2

La dernière valeur du statut de zabbix.zabbix.com correspond à 2 (aucune réponse)

La valeur 2 ici se réfère à une valeur mappée
Le ‘status’ est un paramètre spécial qui est calculé si et seulement si il correspond à une machine (host) et qu'au moins un paramètre est surveillé actuellement. Voir la description de ‘status’ pour plus de détails.
Example 8

Plus de réception de données lors des trois dernières minutes

Utilisation de la fonction nodata():

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

‘tick’ doit être de type ‘Zabbix trapper’. Dans l'ordre, afin d'avoir un déclencheur fonctionnel, un item ‘tick’ doit être préalablement défini. La machine enverra régulièrement des données sur cet objet en utilisant le binaire zabbix_sender. Si aucune donnée n'est reçue depuis 180 secondes, le déclencheur passe à vrai (PROBLEM).

Exemple 9

Activité du CPU pendant la nuit

Utilisation de la fonction time() :

{zabbix:system.cpu.load[all,avg1].min(300)}>2&{zabbix:system.cpu.load[all,avg1].time(0)}>000000&{zabbix:system.cpu.load[all,avg1].time(0)}<060000

La déclencheur passera à vrai si la valeur minimale du avg1 des 300 dernières secondes de relevé est supérieure à 2 et qu'il est entre 00:00 et 06:00.

4.12.3 Les dépendances dans les déclencheurs

Les dépendances des déclencheurs peuvent être utilisé pour définir des relations entre des déclencheurs.

Ces dépendance sont une très bonne façon de limiter le nombre de messages à envoyer dans le cas où un événement appartient à plusieurs ressources.

Par exemple, une machine Host est derrière un routeur Routeur2 et le Routeur2 est derrière le Routeur1 Nous avons ce schéma :

Zabbix - Routeur1 – Routeur2 - Host

Si le Routeur1 tombe, il parait normal que Host et Routeur2 ne soit plus accessibles. On ne veut pas recevoir les trois notifications de Routeur1, Routeur2 et Host. C'est là que les dépendances de déclencheurs deviennent très utiles.

Dans ce cas, nous allons définir les dépendances suivantes:

le déclencheur ‘Host est tombé’ dépend du trigger ‘Router2 est tombé’
le déclencheur ‘Routeur2 est tombé’ dépend du trigger ‘Router1 est tombé’

Ainsi, avant de changer le statut du déclencheur ‘Host est tombé’, Zabbix va vérifié s'il n'y a pas de dépendances de déclencheurs définies. Si c'est le cas, et si l'un des déclencheurs est à vrai (PROBLEM), alors le statut du déclencheur ne changera pas et donc les actions ne seront pas exécutées et les notifications, pas envoyées.

Zabbix effectue cette vérification récursivement. Si Routeur1 ou Routeur2 n'est pas disponible, le déclencheur de Host ne sera pas mis à jour.

4.12.4 Sévérité des déclencheurs

La sévérité des déclencheurs détermine l'importance d'un déclencheur. Zabbix propose ces différents niveaux de sévérité:

SEVERITÉDEFINITIONCOULEUR
Non classé Sévérité inconnue. Gris.
Information A titre d'information. Vert clair.
Avertissement Pour être averti Jaune clair.
Moyen Problème d'importance moyenne. Rouge grisé.
Haut Quelque chose d'important vient de se produire. Rouge.
Désastre Un désastre. Pertes financières, etc. Rouge vif.

Les sévérités sont utilisées afin :

4.12.5 Hystérésis

Parfois, un déclencheur peut avoir différentes conditions pour différents états. Par exemple, nous voulons créer un déclencheur qui passerai à vrai (PROBLEM) quand la température de la salle des serveurs est supérieure à 20°C et qui resterai à vrai (PROBLEM) tant que la température n'est pas en dessous de 15°C.

Afin de faire ça, nous allons créer le déclencheur suivant :

Exemple 1

La température dans la salle serveur est trop haute

({TRIGGER.VALUE}=0&{server:temp.last(0)}>20)|
({TRIGGER.VALUE}=1&{server:temp.last(0)}>15)

Notez l'utilisation de la macro {TRIGGER.VALUE}. Cette macro retourne la valeur actuelle du déclencheur.