2 Expressió de trigger

Vista general

Les expressions emprades a [triggers(/manual/config/triggers) són molt flexibles. Podeu emprar-los per crear proves lògiques complexes de les estadístiques monitorades.

Una expressió senzilla empra una funció que s'aplica a l'element amb alguns paràmetres. La funció retorna un resultat que es compara amb el llindar, emprant un operador i una constant.

La sintaxi d'una expressió útil senzilla és function(/host/key,parameter)<operator><constant>.

Per exemple: min(/Servidor Zabbix/net.if.in[eth0,bytes],5m)>100K

s'activarà si el nombre d'octets rebuts en els darrers cinc minuts sempre ha estat superior a 100 koctets.

Tot i que la sintaxi és exactament la mateixa, funcionalment hi ha dos tipus d'expressions triggers:

  • expressió del problema - defineix les condicions del problema
  • expressió de recuperació (opcional) - defineix condicions addicionals per resoldre el problema

Quan es defineix una única expressió de problema, aquesta expressió s'emprarà tant com a llindar del problema com a llindar de recuperació del problema. Tan bon punt l'expressió del problema s'avalua com a "VERTADER", hi ha un problema. Tan bon punt l'expressió del problema s'avalua com a "FALS", el problema es resol.

Quan es defineix tant l'expressió del problema com l'expressió de recuperació addicional, la resolució del problema es fa més complexa: no només l'expressió del problema ha d'ésser "FALS", sinó que també l'expressió de recuperació ha de ser "VERTADER". Això és útil per evitar la fluctuació del trigger a la histèresi.

És improductiu emprar la macro {TRIGGER.VALUE} a una expressió de recuperació perquè aquesta expressió només s'avalua quan el trigger es troba en l'estat "Problema". En conseqüència, {TRIGGER.VALUE} sempre es resoldrà a "1" (que indica un estat "Problema") mentre s'avalua l'expressió.

Funcions

Les funcions permeten calcular els valors recollits (mitjana, mínim, màxim, suma), cercar cadenes, fer referència a l'hora actual i altres factors.

Hi ha disponible una llista completa de funcions admeses.

En general, les funcions retornen valors numèrics amb finalitats de comparació. Quan tornen cadenes, la comparació és possible amb els operadors = i <> (veieu l'exemple).

Paràmetres de la funció

Els paràmetres de funció permeten especificar:

  • l'equip i la clau de l'element (funcions referides només a l'historial de l'element de l'equip)
  • Paràmetres específics de la funció
  • altres expressions (no disponible per a funcions que fan referència a l'historial de l'element equip, veieu altres expressions per a exemples)

L'equip i la clau de l'element es poden especificar com a "/host/key".\Si s'omet un equip (és a dir, com a function(//key,parameter,...)), la funció farà referència a l'equip actual.
L'element referenciat ha d'estar en un estat compatible (excepte per a la funció nodata(), que també es calcula per als elements no compatibles).

Mentre que altres triggers com a paràmetres de funció es limiten a funcions no històriques en triggers, aquesta limitació no s'aplica als elements calculats.

Item key

The referenced item must be in a supported state (except for nodata() function, which is calculated for unsupported items as well).

Omission of the host name in the first parameter (i.e. as in function(//key,parameter,...)) is only supported in certain contexts:

  • In the formula of calculated items
  • In expression macros, which can be used in:

In these contexts, you may also use the {HOST.HOST} macro. {HOST.HOST<1-9>} could be used in the case of the Event name field and the "Trigger" map element to refer to a specific item in the trigger expression. When the host name is omitted or replaced by {HOST.HOST} in these contexts, the reference points to the first item in the trigger expression or to the first item in the graph. Outside of these supported contexts, omitting the host name in trigger expressions will result in an error. See Compare long-term CPU loads example for an illustration of double-slash usage in Event name macros.

Paràmetres específics de la funció

Els paràmetres específics de la funció es posen després de la clau d'element i es separen de la clau d'element per una coma. Veieu les funcions compatibles per obtindre una llista completa d'aquests paràmetres.

La majoria de les funcions numèriques accepten el temps com a paràmetre. Podeu emprar segons o sufixos de temps per indicar l'hora. Precedit d'una marca de hash, el paràmetre té un altre significat:

Expressió Descripció
sum(/host/key,10m) Suma dels valors dels darrers 10 minuts.
sum(/host/key,#10) Suma dels darrers deu valors.

Els paràmetres amb una marca de hash tenen un significat diferent amb la funció darrera: denoten l'enèsim valor anterior, de manera que tinguent en compte els valors 30, 70, 20, 60, 50 (del més nou al més antic):

  • last(/host/key,#2) retornaria '70'
  • last(/host/key,#5) retornaria '50'
Desplaçament temporal

S'admet un desplaçament temporal opcional amb temps o nombre de valors com a paràmetre de funció. Empreu aquest paràmetre per fer referència a dades d'un període de temps anterior.

El desplaçament de temps comença amb "ara" - especificant l'hora actual, i va seguit de "+N<unitat de temps>" o "-N<unitat de temps>" - per sumar o restar N unitats de temps.

Per exemple, avg(/host/key,1h:now-1d) retornarà el valor mitjà d'una hora de fa un dia.

Diferència horària amb períodes de temps absoluts

Els períodes de temps absoluts s'admeten a la configuració de compensació horària, per exemple, de mitjanit a mitjanit durant un dia, de dilluns a diumenge durant una setmana, del primer al darrer dia del mes durant un mes.

El desplaçament de temps per a períodes de temps absoluts comença amb "ara" - especificant el l'hora actual, i va seguida de qualsevol nombre d'operacions de temps: /<unitat de temps> - defineix l'inici i el final de la unitat de temps, per exemple, de mitjanit a mitjanit durant un dia, +N<unitat de temps> o -N<unitat de temps> - per sumar o restar N unitats de temps.

Tingueu en compte que el valor de compensació temporal pot ser superior o igual a 0, mentre que el valor del període mínim és 1.

Paràmetre Descripció
1d:now/d Ahir
1d:ara/d+1d Avui
2d:ara/d+1d Darrers 2 dies
1w:now/w La setmana passada
1w:now/w+1w Aquesta setmana
altres expressions

Els paràmetres de funció poden contindre altres expressions, com a la sintaxi següent:

min(min(/host/key,1h),min(/host2/key2,1h)*10)

Veieu que altres expressions no es poden pas emprar si la funció fa referència a l'històric de l'element. Per exemple, la sintaxi següent no és pas permesa:

min(/host/key,#5*10)

Operadors

Els triggers admeten els operadors següents (en prioritat d'execució descendent):

Prioritat Operador Definició Notes per a valors desconeguts Forçar l'operand a flotant1
1 - Menys unitari -Desconegut → Desconegut Sí
2 no NO lògic no Desconegut → Desconegut Sí
3 * Multiplicació 0 * Desconegut → Desconegut
(sí, Desconegut, no 0 - per no perdre
Desconegut en operacions aritmètiques) <br >1,2 * Desconegut → Desconegut
Sí
/ Divisió Desconegut / 0 → error
Desconegut / 1.2 → Desconegut
0.0 / Desconegut → Desconegut
Sí
4 + Signe més aritmètic 1,2 ***** Desconegut → Desconegut Sí
- Signe menys aritmètic 1,2 - Desconegut → Desconegut Sí
5 < L'operador es defineix com a menor de:

A<B ⇔ (A<B-0,000001)
1,2 < Desconegut → Desconegut Sí
<= L'operador es defineix com inferior o igual a:

A<=B ⇔ (A≤B+0,000001)
Desconegut <= Desconegut → Desconegut Sí
> L'operador es defineix com més gran que:

A>B ⇔ (A>B+0,000001)
Sí
>= L'operador es defineix com més gran o igual a:

A>=B ⇔ (A≥B-0,000001)
Sí
**6*** = L'operador es defineix com a igual:

A=B ⇔ (A≥B-0,000001) i (A≤B+0,000001)
No 1
<> DL'operador es defineix com a diferent:

A<>B ⇔ (A<B-0,000001) o (A>B+0,000001)
No 1
7 i I lògic 0 i Desconegut → 0
1 i Desconegut → Desconegut
Desconegut i Desconegut → Desconegut
Sí
8 o O lògic 1 o Desconegut → 1
0 o Desconegut → Desconegut
Desconegut o Desconegut → Desconegut
Sí

1 L'operand de cadena sempre es converteix a numèric si:

  • un altre operand és numèric
  • S'empra un operador diferent de = o <> en un operand

(Si la conversió falla, l'operand numèric es converteix en un operand de cadena i els dos operands es comparen com a cadenes.)

Els operadors no, i i o distingeixen entre majúscules i minúscules i han d'ésser minúscules. També s'han d'envoltar per espais o parèntesis.

Tots els operadors excepte els unaris - i no tenen associativitat d'esquerra a dreta. Els unitaris - i no no són associatius (és a dir, -(-1) i no (no 1) s'han d'emprar en comptes de --1 i no no 1).

Resultat de l'avaluació:

  • Els operadors <, <=, >, >=, =, <> han de donar '1' a l'expressió del trigger si la relació especificada és certa i '0' si és falsa. Si almenys un operand és desconegut, el resultat és Desconegut;
  • i per als operands coneguts ha de retornar '1' si els dos operands no són '0'; en cas contrari, retorna '0'; per a operands desconeguts i retorna '0' només si un operand és '0'; en cas contrari, dóna 'desconegut';
  • o per a operands coneguts, retorna '1' si un dels seus operands no és '0'; en cas contrari, retorna '0'; per a operands desconeguts o només retorna '1' si un operand no és '0'; en cas contrari, dóna "desconegut";
  • El resultat de l'operador de negació lògica no per a un operand conegut és '0' si el valor del seu operand no és igual a '0'; '1' si el valor del seu operand és '0'. Per a l'operand desconegut no dóna 'Desconegut'.

Unknown expression state

It is possible that an unknown operand appears in a trigger expression when:

  • unsupported item is used
  • function evaluation, for a supported item, results in error

In this case the trigger expression generally evaluates to Unknown (as it cannot be evaluated)

It is possible to get notified on unknown triggers.

Exceptions

Despite an unknown operand, trigger expressions can be evaluated to known result (Problem/OK) in some cases:

  • The nodata() function is evaluated regardless of whether the referenced item is supported or not.
  • Expressions with AND/OR can be evaluated to known result in two cases:
    • Case 1: "1 or some_function(unsupported_item1) or some_function(unsupported_item2) or ..." evaluates to known result ('1' or "Problem"),
    • Case 2: "0 and some_function(unsupported_item1) and some_function(unsupported_item2) and ..." evaluates to known result ('0' or "OK").
  • If the function evaluation for a supported item results in error, the function value becomes Unknown and it takes part as unknown operand in further expression evaluation.

Unknown operands may "disappear" only in logical expressions as described above. In arithmetic expressions unknown operands always lead to Unknown (except division by 0).

Unknown expression state does not change the trigger state (Problem/OK). So, if trigger state was "Problem" (see Case 1), it stays in the problem state even if the known part is resolved ('1' becomes '0'), because the expression is now evaluated to Unknown and that does not change the trigger state.

If a trigger expression with several unsupported items evaluates to Unknown, the error message in the frontend refers to the last unsupported item evaluated.

Emmagatzematge en memòria cau de valors

El servidor Zabbix guarda a la memòria cau els valors necessaris per a l'avaluació del trigger. A causa d'aquesta avaluació del trigger, la càrrega de la base de dades és més alta durant un temps després de reiniciar el servidor. La memòria cau de valors no s'esborra quan s'esborren els valors de l'historial d'elements (manualment o mitjançant el procediment de neteja), de manera que el servidor emprarà els valors de la memòria cau fins que siguin més antics en els períodes definits a les funcions de trigger o el servidor es reiniciï.

Si no hi ha dades recents a la memòria cau i no hi ha un període de consulta definit a la funció, Zabbix es remuntarà per defecte a la darrera setmana per consultar a la base de dades els valors històrics.