Espressione del trigger e funzioni

Panoramica

Questa pagina descrive la sintassi delle espressioni dei trigger e i dettagli della loro valutazione.

La sintassi di un'espressione semplice è:

function(/host/item,time_period)<operator><constant>

In questa espressione, il primo operando (a sinistra dell'operatore) è una funzione con i relativi parametri tra parentesi (in genere il data item e il periodo di tempo).

La funzione viene utilizzata per analizzare i dati ricevuti durante il periodo di tempo impostato, producendo un valore calcolato.

Questo valore viene quindi confrontato con il secondo operando, utilizzando l'operatore. In questo esempio il secondo operando è una costante, ma può anche essere un'altra funzione.

Per esempio:

min(/Zabbix server/net.if.in[eth0,bytes],5m)>100K

Questo trigger si attiva se il numero di byte ricevuti su eth0 durante gli ultimi cinque minuti è stato sempre superiore a 100 kilobyte. In questo caso l'espressione è vera e viene creato un problema.

Le espressioni dei trigger sono estremamente flessibili. Nelle espressioni più complesse, è possibile combinare più funzioni, operatori e costanti.

Vedi anche:

Funzioni

Le funzioni consentono di analizzare i valori raccolti, ad esempio calcolando la media o cercando una stringa specifica.

Fare clic sul gruppo di funzioni desiderato per visualizzare ulteriori dettagli.

Gruppo di funzioni Funzioni
Funzioni aggregate avg, bucket_percentile, count, histogram_quantile, item_count, kurtosis, mad, max, min, skewness, stddevpop, stddevsamp, sum, sumofsquares, varpop, varsamp
Funzioni Foreach avg_foreach, bucket_rate_foreach, count_foreach, exists_foreach, last_foreach, max_foreach, min_foreach, sum_foreach
Funzioni bitwise bitand, bitlshift, bitnot, bitor, bitrshift, bitxor
Funzioni di data e ora date, dayofmonth, dayofweek, now, time
Funzioni della cronologia change, changecount, count, countunique, find, first, firstclock, fuzzytime, jsonpath, last, lastclock, logeventid, logseverity, logsource, logtimestamp, monodec, monoinc, nodata, percentile, rate, xmlxpath
Funzioni delle tendenze baselinedev, baselinewma, trendavg, trendcount, trendmax, trendmin, trendstl, trendsum
Funzioni matematiche abs, acos, asin, atan, atan2, avg, cbrt, ceil, cos, cosh, cot, degrees, e, exp, expm1, floor, log, log10, max, min, mod, pi, power, radians, rand, round, signum, sin, sinh, sqrt, sum, tan, truncate
Funzioni degli operatori between, in
Funzioni predittive forecast, timeleft
Funzioni stringa ascii, bitlength, bytelength, char, concat, contains, insert, jsonpath, left, length, ltrim, mid, repeat, replace, right, rtrim, substring, trim, xmlxpath

Salvo diversa indicazione, queste funzioni sono supportate in:

Le funzioni Foreach sono supportate solo per i calcoli aggregati.

In genere, le funzioni restituiscono valori numerici per il confronto. Quando restituiscono stringhe, il confronto è possibile con gli operatori = e <> (vedere l'esempio Rilevare software non corrispondente su host diversi).

Parametri delle funzioni

I parametri delle funzioni consentono di specificare:

  • la chiave dell'item (come /host/key) per le funzioni che fanno riferimento alla cronologia di un item del host
  • il periodo di tempo (e altri parametri specifici della funzione)
  • altre espressioni
Chiave item

L'item di riferimento deve trovarsi in uno stato supportato (ad eccezione della funzione nodata(), che viene calcolata anche per gli item non supportati).

L'omissione del nome del host nel primo parametro (cioè come in function(//key,parameter,...)) è supportata solo in determinati contesti:

  • Nella formula degli item calcolati
  • Nelle macro di espressione, che possono essere utilizzate in:

In questi contesti, è anche possibile utilizzare la macro {HOST.HOST}. {HOST.HOST<1-9>} può essere utilizzata nel caso del campo Nome evento e dell'elemento della mappa "Trigger" per fare riferimento a uno specifico item nell'espressione del trigger. Quando il nome del host viene omesso o sostituito da {HOST.HOST} in questi contesti, il riferimento punta al primo item nell'espressione del trigger o al primo item nel grafico. Al di fuori di questi contesti supportati, l'omissione del nome del host nelle espressioni trigger comporterà un errore. Per un'illustrazione dell'uso della doppia barra nelle macro del Nome evento, vedere l'esempio Compare long-term CPU loads.

Periodo di tempo

I parametri specifici della funzione vengono inseriti dopo la chiave dell'item e sono separati dalla chiave dell'item da una virgola.

La maggior parte delle funzioni numeriche accetta un periodo di tempo come parametro. Consente di specificare l'intervallo di interesse. Può essere specificato come periodo di tempo (30s, 10m, 1h) oppure come intervallo di valori (#5 - per gli ultimi cinque valori).

È possibile utilizzare i secondi o i suffissi temporali per indicare il periodo di tempo. Se preceduto da un cancelletto, il parametro assume un significato diverso:

Expression Description
sum(/host/key,10m) Somma dei valori degli ultimi 10 minuti.
sum(/host/key,#10) Somma degli ultimi dieci valori.

I parametri preceduti da un cancelletto hanno un significato diverso con la funzione last: indicano l'N-esimo valore precedente. Pertanto, dati i valori 30, 70, 20, 60, 50 (dal più recente al meno recente):

  • last(/host/key,#2) restituirebbe '70'
  • last(/host/key,#5) restituirebbe '50'

Il periodo di tempo viene misurato fino a "now", dove "now" è l'ultimo momento di ricalcolo del trigger (vedere Frequenza di calcolo); "now" non corrisponde all'ora "now" del server.

Il periodo di tempo specifica:

  • Tutti i valori compresi tra "now - periodo di tempo" e "now" (oppure, con uno scostamento temporale applicato, tra "now - scostamento temporale - periodo di tempo" e "now").
  • Il numero specificato di valori passati, fino a "now".

Se non esistono dati per il periodo di valutazione specificato, il trigger o l'item calcolato che utilizza questa funzione diventa non supportato.

Tenere presente che:

  • Se nel trigger viene utilizzata una sola funzione (che fa riferimento alla cronologia dei dati), "now" corrisponde sempre all'ultimo valore ricevuto. Ad esempio, se l'ultimo valore è stato ricevuto un'ora fa, il periodo di tempo verrà considerato fino all'ultimo valore ricevuto un'ora fa.
  • Un nuovo trigger viene calcolato non appena viene ricevuto il primo valore (funzioni della cronologia); per le funzioni data e ora e nodata(), verrà calcolato entro 30 secondi. Pertanto, il trigger verrà calcolato anche se il periodo di tempo impostato (ad esempio, un'ora) non è ancora trascorso dalla creazione del trigger. Il trigger verrà inoltre calcolato dopo il primo valore, anche se l'intervallo di tempo è stato impostato, ad esempio, sugli ultimi dieci valori.
Scostamento temporale

È supportato uno scostamento temporale facoltativo con il tempo o il conteggio dei valori come parametro della funzione. Questo parametro consente di fare riferimento ai dati di un periodo passato.

Lo scostamento temporale inizia con now, che specifica l'ora corrente, ed è seguito da +N<unità di tempo> o -N<unità di tempo>, per aggiungere o sottrarre N unità di tempo.

Ad esempio, avg(/host/key,1h:now-1d) restituisce il valore medio di un'ora di un giorno fa.

Lo scostamento temporale specificato in mesi (M) e anni (y) è supportato solo per le funzioni trend. Le altre funzioni supportano secondi (s), minuti (m), ore (h), giorni (d) e settimane (w).

Scostamento temporale con periodi di tempo assoluti

Nel parametro dello scostamento temporale sono supportati i periodi di tempo assoluti, ad esempio da mezzanotte a mezzanotte per un giorno, da lunedì a domenica per una settimana, dal primo all'ultimo giorno del mese per un mese.

Lo scostamento temporale per i periodi di tempo assoluti inizia con now, che specifica l'ora corrente, ed è seguito da un numero qualsiasi di operazioni temporali: /<unità di tempo> definisce l'inizio e la fine dell'unità di tempo, ad esempio da mezzanotte a mezzanotte per un giorno; +N<unità di tempo> o -N<unità di tempo> aggiunge o sottrae N unità di tempo.

Tenere presente che il valore dello scostamento temporale può essere maggiore o uguale a 0, mentre il valore minimo del periodo di tempo è 1.

Parametro Descrizione
1d:now/d Ieri
1d:now/d+1d Oggi
2d:now/d+1d Gli ultimi 2 giorni
1w:now/w La settimana scorsa
1w:now/w+1w Questa settimana
Altre espressioni

I parametri delle funzioni possono contenere altre espressioni, come nella sintassi seguente:

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

Si noti che non è possibile utilizzare altre espressioni se la funzione fa riferimento alla cronologia dell'item. Ad esempio, la sintassi seguente non è consentita:

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

Sebbene nelle espressioni trigger altre espressioni usate come parametri di funzione siano limitate alle funzioni che non fanno riferimento alla cronologia, questa limitazione non si applica ai calculated items.

Operatori

Per i trigger sono supportati i seguenti operatori (in ordine decrescente di priorità di esecuzione):

Priorità Operatore Definizione Note per i valori sconosciuti Forza il cast dell'operando a float 1
1 - Meno unario -Unknown → Unknown Sì
2 not NOT logico not Unknown → Unknown Sì
3 * Moltiplicazione 0 * Unknown → Unknown
(sì, Unknown, non 0 - per non perdere
Unknown nelle operazioni aritmetiche)
1.2 * Unknown → Unknown
Sì
/ Divisione Unknown / 0 → errore
Unknown / 1.2 → Unknown
0.0 / Unknown → Unknown
Sì
4 + Addizione aritmetica 1.2 + Unknown → Unknown Sì
- Sottrazione aritmetica 1.2 - Unknown → Unknown Sì
5 < Minore di. L'operatore è definito come:

A<B ⇔ (A<B-0.000001)
1.2 < Unknown → Unknown Sì
<= Minore o uguale a. L'operatore è definito come:

A<=B ⇔ (A≤B+0.000001)
Unknown <= Unknown → Unknown Sì
> Maggiore di. L'operatore è definito come:

A>B ⇔ (A>B+0.000001)
Sì
>= Maggiore o uguale a. L'operatore è definito come:

A>=B ⇔ (A≥B-0.000001)
Sì
6 = Uguale a. L'operatore è definito come:

A=B ⇔ (A≥B-0.000001) and (A≤B+0.000001)
No 1
<> Diverso da. L'operatore è definito come:

A<>B ⇔ (A<B-0.000001) or (A>B+0.000001)
No 1
7 and AND logico 0 and Unknown → 0
1 and Unknown → Unknown
Unknown and Unknown → Unknown
Sì
8 or OR logico 1 or Unknown → 1
0 or Unknown → Unknown
Unknown or Unknown → Unknown
Sì

1 L'operando stringa viene comunque convertito in numerico se:

  • l'altro operando è numerico
  • su un operando viene usato un operatore diverso da = o <>

(Se la conversione fallisce, l'operando numerico viene convertito in un operando stringa ed entrambi gli operandi vengono confrontati come stringhe.)

Gli operatori not, and e or sono case-sensitive e devono essere in minuscolo. Devono inoltre essere circondati da spazi o parentesi.

Tutti gli operatori, eccetto - unario e not, hanno associatività da sinistra a destra. - unario e not non sono associativi (ciò significa che devono essere usati -(-1) e not (not 1) invece di --1 e not not 1).

Risultato della valutazione:

  • gli operatori <, <=, >, >=, =, <> devono produrre '1' nell'espressione del trigger se la relazione specificata è vera e '0' se è falsa. Se almeno un operando è Unknown, il risultato è Unknown;
  • and per operandi noti deve produrre '1' se entrambi i suoi operandi risultano diversi da '0'; altrimenti produce '0'; per operandi sconosciuti and produce '0' solo se un operando risulta uguale a '0'; altrimenti produce 'Unknown';
  • or per operandi noti deve produrre '1' se uno qualsiasi dei suoi operandi risulta diverso da '0'; altrimenti produce '0'; per operandi sconosciuti or produce '1' solo se un operando risulta diverso da '0'; altrimenti produce 'Unknown';
  • il risultato dell'operatore di negazione logica not per un operando noto è '0' se il valore del suo operando risulta diverso da '0'; '1' se il valore del suo operando risulta uguale a '0'. Per un operando sconosciuto not produce 'Unknown'.

Stato dell'espressione sconosciuto

È possibile che un operando sconosciuto compaia in un'espressione di trigger quando:

  • viene usato un item non supportato
  • la valutazione di una funzione, per un item supportato, termina con un errore

In questo caso, l'espressione del trigger in genere viene valutata come Unknown (poiché non può essere valutata)

È possibile ricevere una notifica sui trigger sconosciuti.

Eccezioni

Nonostante un operando sconosciuto, in alcuni casi le espressioni del trigger possono essere valutate con un risultato noto (Problem/OK):

  • La funzione nodata() viene valutata indipendentemente dal fatto che l'item referenziato sia supportato o meno.
  • Le espressioni con AND/OR possono essere valutate con un risultato noto in due casi:
    • Caso 1: "1 or some_function(unsupported_item1) or some_function(unsupported_item2) or ..." viene valutata con un risultato noto ('1' o "Problem"),
    • Caso 2: "0 and some_function(unsupported_item1) and some_function(unsupported_item2) and ..." viene valutata con un risultato noto ('0' o "OK").
  • Se la valutazione della funzione per un item supportato termina con un errore, il valore della funzione diventa Unknown e partecipa come operando sconosciuto nelle valutazioni successive dell'espressione.

Gli operandi sconosciuti possono "scomparire" solo nelle espressioni logiche, come descritto sopra. Nelle espressioni aritmetiche, gli operandi sconosciuti portano sempre a Unknown (tranne la divisione per 0).

Lo stato dell'espressione sconosciuto non modifica lo stato del trigger (Problem/OK). Quindi, se lo stato del trigger era "Problem" (vedi Caso 1), rimane nello stato di problema anche se la parte nota viene risolta ('1' diventa '0'), perché l'espressione viene ora valutata come Unknown e questo non modifica lo stato del trigger.

Se un'espressione del trigger con diversi item non supportati viene valutata come Unknown, il messaggio di errore nel frontend fa riferimento all'ultimo item non supportato valutato.

Cache dei valori

I valori richiesti per la valutazione dei trigger vengono memorizzati nella cache dal server Zabbix. Per questo motivo, la valutazione dei trigger provoca un carico più elevato sul database per un certo periodo di tempo dopo il riavvio del server.

La cache dei valori non viene svuotata quando i valori della cronologia degli item vengono rimossi (manualmente o dal processo housekeeper), quindi il server utilizzerà i valori memorizzati nella cache finché non saranno più vecchi dei periodi di tempo definiti nelle funzioni dei trigger o finché il server non verrà riavviato.

Se nella cache non sono presenti dati recenti e nella funzione non è definito alcun periodo di interrogazione, per impostazione predefinita Zabbix risalirà fino a una settimana nel passato per interrogare il database alla ricerca di valori storici.