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 :
Bien que la syntaxe soit exactement la même, du point de vue fonctionnel, il existe deux types d'expressions de déclencheur :
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.
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.
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.
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 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é.
La charge du processeur est trop élevée sur www.zabbix.com
'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.
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.
/etc/passwd a été modifié
Utilisation de la fonction diff :
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.
Quelqu'un télécharge un gros fichier sur Internet
Utilisation de la fonction min :
L'expression est vraie lorsque le nombre d'octets reçus sur eth0 est supérieur à 100 Ko dans les 5 dernières minutes.
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.
L'agent Zabbix doit être mis à jour
Utilisation de la fonction str() :
L'expression est vraie si l'agent Zabbix est en version beta8 (vraisemblablement 1.0beta8).
Le serveur est inaccessible
L'expression est vraie si l'hôte "zabbix.zabbix.com" est inaccessible plus de 5 fois au cours des 30 dernières minutes.
Aucun heartbeat dans les 3 dernières minutes
Utilisation de la fonction nodata() :
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.
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).
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).
Vérifiez si l'heure locale du client est synchronisée avec l'heure du serveur Zabbix
Utilisation de la fonction fuzzytime() :
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.
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
).
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.
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%.
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.
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 :
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 !
La température dans la salle des serveurs est trop élevée.
Expression du problème :
Expression de récupération :
L'espace disque disponible est trop faible.
Expression du problème : il est inférieur à 10 Go pour les 5 dernières minutes
Expression de récupération : elle est supérieure à 40 Go pour les 10 dernières minutes
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 :
or
Unsuported_item1.some_function() or
Unsuported_item2.some_function() or
..." peut être évalué à '1' (Vrai),and
Unsuported_item1.some_function() and
Unsuported_item2.some_function() and
..." peut être évalué à '0' (Faux).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
.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é.