3 Espressione del trigger
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:
- Esempi di trigger
- Rilevamento dei problemi con i trigger (introduzione generale)
Funzioni
Le funzioni consentono di analizzare i valori raccolti, ad esempio calcolare la media o trovare una stringa specifica.
Fare clic sul rispettivo gruppo di funzioni per visualizzare maggiori 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 bit a bit | bitand, bitlshift, bitnot, bitor, bitrshift, bitxor | |
| Funzioni di data e ora | date, dayofmonth, dayofweek, now, time | |
| Funzioni dello storico | change, changecount, count, countunique, find, first, firstclock, fuzzytime, last, lastclock, logeventid, logseverity, logsource, logtimestamp, monodec, monoinc, nodata, percentile, rate | |
| Funzioni dei trend | 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 operatore | between, in | |
| Funzioni predittive | forecast, timeleft | |
| Funzioni stringa | ascii, bitlength, bytelength, char, concat, insert, jsonpath, left, length, ltrim, mid, repeat, replace, right, rtrim, 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 della funzione
I parametri della funzione consentono di specificare:
- chiave item (come
/host/key) per le funzioni che fanno riferimento alla cronologia degli item del host - 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:
- Il campo Nome evento
- Il nome del grafico
- L'etichetta degli elementi della mappa "Host" e "Trigger" map elements
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. Questo consente di specificare l'intervallo che ci interessa. Può essere specificato come periodo di tempo (30s, 10m, 1h) oppure come intervallo di valori (#5 - per gli ultimi cinque valori).
È possibile usare i secondi o i suffissi temporali per indicare il periodo di tempo. Se preceduto da un cancelletto, il parametro ha un significato diverso:
| Expression | Description |
|---|---|
| sum(/host/key,10m) | Somma dei valori negli ultimi 10 minuti. |
| sum(/host/key,#10) | Somma degli ultimi dieci valori. |
I parametri con cancelletto hanno un significato diverso con la funzione last: indicano l'N-esimo valore precedente, quindi 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 "ora", dove "ora" è l'ultimo momento di ricalcolo del trigger (vedere Frequenza di calcolo); "ora" non è l'ora corrente del server.
Il periodo di tempo specifica uno dei seguenti casi:
- Considerare tutti i valori tra "ora-periodo di tempo" e "ora" (oppure, con spostamento temporale, tra "ora-spostamento temporale-periodo di tempo" e "ora-time_shift")
- Considerare non più di num valori del passato, fino a "ora"
- Se sono disponibili 0 valori per il periodo di tempo o il conteggio num specificato, allora il trigger o l'item calcolato che utilizza questa funzione diventa non supportato
Si noti che:
- Se nel trigger viene utilizzata una sola funzione (che fa riferimento allo storico dei dati), "ora" è sempre l'ultimo valore ricevuto. Ad esempio, se l'ultimo valore è stato ricevuto un'ora fa, il periodo di tempo sarà considerato fino all'ultimo valore ricevuto un'ora fa.
- Un nuovo trigger viene calcolato non appena viene ricevuto il primo valore (funzioni dello storico); verrà calcolato entro 30 secondi per le funzioni data e ora e nodata(). Pertanto il trigger verrà calcolato anche se forse 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 temporale era impostato, ad esempio, sugli ultimi dieci valori.
Scostamento temporale
È supportato uno scostamento temporale opzionale con il tempo o il conteggio dei valori come parametro della funzione. Questo parametro consente di fare riferimento ai dati di un periodo di tempo nel passato.
Lo scostamento temporale inizia con now - che specifica l'ora corrente, ed è seguito da +N<time unit> oppure -N<time unit> - per aggiungere o sottrarre N unità di tempo.
Ad esempio, avg(/host/key,1h:now-1d) restituirà il valore medio per un'ora di un giorno fa.
Lo scostamento temporale specificato in mesi (M) e anni (y) è supportato solo per le funzioni di trend. Le altre funzioni supportano secondi (s), minuti (m), ore (h), giorni (d) e settimane (w).
Scostamento temporale con periodi di tempo assoluti
I periodi di tempo assoluti sono supportati nel parametro di scostamento temporale, 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: /<time unit> - definisce l'inizio e la fine dell'unità di tempo, ad esempio, da mezzanotte a mezzanotte per un giorno, +N<time unit> oppure -N<time unit> - per aggiungere o sottrarre N unità di tempo.
Si noti che il valore dello scostamento temporale può essere maggiore o uguale a 0, mentre il valore minimo del periodo di tempo è 1.
| Parameter | Description |
|---|---|
| 1d:now/d | Ieri |
| 1d:now/d+1d | Oggi |
| 2d:now/d+1d | Ultimi 2 giorni |
| 1w:now/w | 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 sconosciuto dell'espressione
È possibile che in un'espressione di trigger compaia un operando sconosciuto quando:
- viene utilizzato un item non supportato
- la valutazione della funzione, per un item supportato, restituisce un errore
In questo caso, l'espressione di trigger viene generalmente valutata come Unknown (poiché non può essere valutata)
È possibile ricevere una notifica sui trigger sconosciuti.
Eccezioni
Nonostante la presenza di un operando sconosciuto, in alcuni casi le espressioni di trigger possono essere valutate con un risultato noto (Problem/OK):
- La funzione
nodata()viene valutata indipendentemente dal fatto che l'item di riferimento 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' oppure "Problem"), - Caso 2: "
0 and some_function(unsupported_item1) and some_function(unsupported_item2) and ..." viene valutata con un risultato noto ('0' oppure "OK").
- Caso 1: "
- Se la valutazione della funzione per un item supportato restituisce un errore, il valore della funzione diventa
Unknowne partecipa come operando sconosciuto alla successiva valutazione 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 nel caso della divisione per 0).
Lo stato sconosciuto dell'espressione non modifica lo stato del trigger (Problem/OK).
Quindi, se lo stato del trigger era "Problem" (vedere Caso 1), rimane nello stato di problema anche se la parte nota viene risolta ('1' diventa '0'), perché l'espressione ora viene valutata come Unknown e ciò non modifica lo stato del trigger.
Se un'espressione di 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.