Áú»¢¶Ä²©

This is the documentation page for an unsupported version of Áú»¢¶Ä²©.
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'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 »å¨¦´Ú¾±²Ô¾±³Ù¾±´Ç²Ô ¨¤ 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'³ó²â²õ³Ù¨¦°ù¨¦²õ¾±²õ.

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.

°¿±è¨¦°ù²¹³Ù±ð³Ü°ù²õ

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 Áú»¢¶Ä²©. 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 Áú»¢¶Ä²© doit ¨ºtre mis ¨¤ jour

Utilisation de la fonction str() :

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

L'expression est vraie si l'agent Áú»¢¶Ä²© 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 Áú»¢¶Ä²©. 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 Áú»¢¶Ä²©

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 Áú»¢¶Ä²© 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.

±á²â²õ³Ù¨¦°ù¨¦²õ¾±²õ

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 »å¨¦´Ú¾±²Ô¾±³Ù¾±´Ç²Ô 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 ¨¤ Áú»¢¶Ä²© 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 Áú»¢¶Ä²© 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).
      Áú»¢¶Ä²© 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¨¦.