3 Trigera izteiksme
Pārskats
Šajā lapā ir aprakstīta trigera izteiksmes sintakse un novērtēšanas detaļas.
Vienkāršas izteiksmes sintakse ir:
function(/host/item,time_period)<operator><constant>
Šajā izteiksmē pirmais operands (pa kreisi no operatora) ir funkcija ar tās parametriem iekavās (parasti datu vienums un laika periods).
Funkcija tiek izmantota, lai analizētu saņemtos datus norādītajā laika periodā, kā rezultātā tiek iegūta aprēķināta vērtība.
Pēc tam šī vērtība tiek salīdzināta ar otro operandu, izmantojot operatoru. Šajā piemērā otrais operands ir konstante, taču tā var būt arī cita funkcija.
Piemēram:
min(/Zabbix server/net.if.in[eth0,bytes],5m)>100K
Šis trigeris nostrādā, ja saņemto baitu skaits uz eth0 pēdējo piecu minūšu laikā vienmēr ir bijis lielāks par 100 kilobaitiem. Šajā gadījumā izteiksme ir patiesa un tiek izveidota problēma.
Trigeru izteiksmes ir ārkārtīgi elastīgas. Sarežģītākās izteiksmēs var kombinēt vairākas funkcijas, operatorus un konstantes.
Skatiet arī:
- Trigeru piemēri
- Problēmu noteikšana ar trigeriem (vispārīgs ievads)
Funkcijas
Funkcijas ļauj analizēt savāktās vērtības, piemēram, aprēķināt vidējo vai atrast noteiktu virkni.
Noklikšķiniet uz attiecīgās funkciju grupas, lai skatītu sīkāku informāciju.
| Funkciju grupa | Funkcijas | |
|---|---|---|
| Agregācijas funkcijas | avg, bucket_percentile, count, histogram_quantile, item_count, kurtosis, mad, max, min, skewness, stddevpop, stddevsamp, sum, sumofsquares, varpop, varsamp | |
| Foreach funkcijas | avg_foreach, bucket_rate_foreach, count_foreach, exists_foreach, last_foreach, max_foreach, min_foreach, sum_foreach | |
| Bitu operāciju funkcijas | bitand, bitlshift, bitnot, bitor, bitrshift, bitxor | |
| Datuma un laika funkcijas | date, dayofmonth, dayofweek, now, time | |
| Vēstures funkcijas | change, changecount, count, countunique, find, first, firstclock, fuzzytime, last, lastclock, logeventid, logseverity, logsource, logtimestamp, monodec, monoinc, nodata, percentile, rate | |
| Tendenču funkcijas | baselinedev, baselinewma, trendavg, trendcount, trendmax, trendmin, trendstl, trendsum | |
| Matemātiskās funkcijas | 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 | |
| Operatoru funkcijas | between, in | |
| Prognozējošās funkcijas | forecast, timeleft | |
| Virkņu funkcijas | ascii, bitlength, bytelength, char, concat, insert, jsonpath, left, length, ltrim, mid, repeat, replace, right, rtrim, trim, xmlxpath | |
Ja vien nav norādīts citādi, šīs funkcijas tiek atbalstītas:
Foreach funkcijas tiek atbalstītas tikai agregācijas aprēķiniem.
Parasti funkcijas salīdzināšanai atgriež skaitliskas vērtības. Ja tiek atgrieztas virknes, salīdzināšana ir iespējama ar operatoriem = un <> (skatiet piemēru Neatbilstošas programmatūras noteikšana dažādos hostos).
Funkcijas parametri
Funkcijas parametri ļauj norādīt:
- vienuma atslēgu (kā
/hosts/key) funkcijām, kas atsaucas uz hosta vienuma vēsturi - laika periodu (un citus funkcijai specifiskus parametrus)
- citas izteiksmes
Vienuma atslēga
Norādītajam vienumam jābūt atbalstītā stāvoklī (izņemot funkciju nodata(), kas tiek aprēķināta arī neatbalstītiem vienumiem).
Hosta nosaukuma izlaišana pirmajā parametrā (t.i., kā function(//key,parameter,...)) tiek atbalstīta tikai noteiktos kontekstos:
- Aprēķināto vienumu formulā
- Izteiksmju makrosos, kurus var izmantot:
- Laukā Notikuma nosaukums
- Grafika nosaukumā
- "Hosts" un "Trigeris" kartes elementos
Šajos kontekstos varat izmantot arī makrosu {HOST.HOST}.
{HOST.HOST<1-9>} var izmantot lauka Notikuma nosaukums un kartes elementa "Trigeris" gadījumā, lai atsauktos uz konkrētu vienumu trigera izteiksmē.
Ja hosta nosaukums šajos kontekstos ir izlaists vai aizstāts ar {HOST.HOST}, atsauce norāda uz pirmo vienumu trigera izteiksmē vai uz pirmo vienumu grafikā.
Ārpus šiem atbalstītajiem kontekstiem hosta nosaukuma izlaišana trigeru izteiksmēs radīs kļūdu.
Skatiet piemēru Salīdzināt ilgtermiņa CPU slodzes, lai redzētu dubultās slīpsvītras lietojuma ilustrāciju Notikuma nosaukuma makrosos.
Laika periods
Funkcijai specifiskie parametri tiek novietoti aiz vienuma atslēgas un ir atdalīti no vienuma atslēgas ar komatu.
Lielākā daļa skaitlisko funkciju pieņem laika periodu kā parametru. Tas ļauj norādīt mūs interesējošo intervālu. To var norādīt kā laika periodu (30s, 10m, 1h) vai kā vērtību diapazonu (#5 — pēdējām piecām vērtībām).
Lai norādītu laika periodu, var izmantot sekundes vai laika sufiksus. Ja parametram priekšā ir restīte, tam ir cita nozīme:
| Expression | Description |
|---|---|
| sum(/host/key,10m) | Vērtību summa pēdējās 10 minūtēs. |
| sum(/host/key,#10) | Pēdējo desmit vērtību summa. |
Parametriem ar restīti funkcijā last ir cita nozīme — tie apzīmē N-to iepriekšējo vērtību, tādēļ, ja dotās vērtības ir 30, 70, 20, 60, 50 (no jaunākās uz vecāko):
last(/host/key,#2)atgriezīs '70'last(/host/key,#5)atgriezīs '50'
Laika periods tiek mērīts līdz "tagad" — kur "tagad" ir trigeris pēdējais pārrēķina laiks (skatiet Aprēķināšanas biežums); "tagad" nav serveris "tagad" laiks.
Laika periods nosaka vienu no šiem variantiem:
- Ņemt vērā visas vērtības starp "tagad-laika periods" un "tagad" (vai, ar laika nobīdi, starp "tagad-laika nobīde-laika periods" un "tagad-laika_nobīde")
- Ņemt vērā ne vairāk kā norādīto vērtību skaitu no pagātnes līdz
"tagad"
- Ja norādītajam laika periodam vai vērtību skaitam nav pieejama neviena vērtība, tad trigeris vai aprēķinātais vienums, kas izmanto šo funkciju, kļūst neatbalstīts
Ņemiet vērā:
- Ja trigerī tiek izmantota tikai viena funkcija (kas atsaucas uz datu vēsturi), "tagad" vienmēr ir pēdējā saņemtā vērtība. Piemēram, ja pēdējā vērtība tika saņemta pirms stundas, laika periods tiks uzskatīts par tādu, kas beidzas ar pēdējo vērtību pirms stundas.
- Jauns trigeris tiek aprēķināts, tiklīdz tiek saņemta pirmā vērtība (vēstures funkcijas); funkcijām date and time un nodata() tas tiks aprēķināts 30 sekunžu laikā. Tādējādi trigeris tiks aprēķināts pat tad, ja kopš trigeris izveides vēl nav pagājis iestatītais laika periods (piemēram, viena stunda). Trigeris tiks aprēķināts arī pēc pirmās vērtības saņemšanas, pat ja laika diapazons bija iestatīts, piemēram, uz pēdējām desmit vērtībām.
Laika nobīde
Kā funkcijas parametrs tiek atbalstīta neobligāta laika nobīde ar laiku vai vērtību skaitu. Šis parametrs ļauj atsaukties uz datiem no pagātnes laika perioda.
Laika nobīde sākas ar now — norādot pašreizējo laiku, un tai seko +N<time unit> vai -N<time unit> — lai pieskaitītu vai atņemtu N laika vienības.
Piemēram, avg(/host/key,1h:now-1d) atgriezīs vidējo vērtību par vienu stundu pirms vienas dienas.
Laika nobīde, kas norādīta mēnešos (M) un gados (y), tiek atbalstīta tikai tendenču funkcijām. Citas funkcijas atbalsta sekundes (s), minūtes (m), stundas (h), dienas (d) un nedēļas (w).
Laika nobīde ar absolūtiem laika periodiem
Laika nobīdes parametrā tiek atbalstīti absolūti laika periodi, piemēram, no pusnakts līdz pusnaktij dienai, no pirmdienas līdz svētdienai nedēļai, no mēneša pirmās līdz pēdējai dienai mēnesim.
Laika nobīde absolūtiem laika periodiem sākas ar now — norādot pašreizējo laiku, un tai seko jebkurš skaits laika operāciju: /<time unit> — nosaka laika vienības sākumu un beigas, piemēram, no pusnakts līdz pusnaktij dienai, +N<time unit> vai -N<time unit> — lai pieskaitītu vai atņemtu N laika vienības.
Lūdzu, ņemiet vērā, ka laika nobīdes vērtība var būt lielāka vai vienāda ar 0, savukārt laika perioda minimālā vērtība ir 1.
| Parameter | Description |
|---|---|
| 1d:now/d | Vakar |
| 1d:now/d+1d | Šodien |
| 2d:now/d+1d | Pēdējās 2 dienas |
| 1w:now/w | Pagājušā nedēļa |
| 1w:now/w+1w | Šī nedēļa |
Citas izteiksmes
Funkciju parametri var saturēt citas izteiksmes, kā parādīts šādā sintaksē:
min(min(/host/key,1h),min(/host2/key2,1h)*10)
Ņemiet vērā, ka citas izteiksmes nevar izmantot, ja funkcija atsaucas uz vienuma vēsturi. Piemēram, šāda sintakse nav atļauta:
min(/host/key,#5*10)
Lai gan citu trigeru izteiksmju izmantošana kā funkciju parametri ir ierobežota ar funkcijām, kas trigeros neizmanto vēsturi, šis ierobežojums neattiecas uz aprēķinātajiem vienumiem.
Operatori
Tālāk norādītie operatori tiek atbalstīti trigeriem (dilstošā izpildes prioritātes secībā):
| Prioritāte | Operators | Definīcija | Piezīmes par nezināmām vērtībām | Piespiedu operanda pārveidošana par float 1 |
|---|---|---|---|---|
| 1 | - | Unārais mīnuss | - Unknown → Unknown | Jā |
| 2 | not | Loģiskais NOT | not Unknown → Unknown | Jā |
| 3 | * | Reizināšana | 0 * Unknown → Unknown (jā, Unknown, nevis 0 — lai nezaudētu Unknown aritmētiskajās operācijās) 1.2 * Unknown → Unknown |
Jā |
| / | Dalīšana | Unknown / 0 → kļūda Unknown / 1.2 → Unknown 0.0 / Unknown → Unknown |
Jā | |
| 4 | + | Aritmētiskā saskaitīšana | 1.2 + Unknown → Unknown | Jā |
| - | Aritmētiskā atņemšana | 1.2 - Unknown → Unknown | Jā | |
| 5 | < | Mazāks par. Operators ir definēts šādi: A<B ⇔ (A<B-0.000001) |
1.2 < Unknown → Unknown | Jā |
| <= | Mazāks vai vienāds ar. Operators ir definēts šādi: A<=B ⇔ (A≤B+0.000001) |
Unknown <= Unknown → Unknown | Jā | |
| > | Lielāks par. Operators ir definēts šādi: A>B ⇔ (A>B+0.000001) |
Jā | ||
| >= | Lielāks vai vienāds ar. Operators ir definēts šādi: A>=B ⇔ (A≥B-0.000001) |
Jā | ||
| 6 | = | Vienāds ar. Operators ir definēts šādi: A=B ⇔ (A≥B-0.000001) and (A≤B+0.000001) |
Nē 1 | |
| <> | Nav vienāds ar. Operators ir definēts šādi: A<>B ⇔ (A<B-0.000001) or (A>B+0.000001) |
Nē 1 | ||
| 7 | and | Loģiskais AND | 0 and Unknown → 0 1 and Unknown → Unknown Unknown and Unknown → Unknown |
Jā |
| 8 | or | Loģiskais OR | 1 or Unknown → 1 0 or Unknown → Unknown Unknown or Unknown → Unknown |
Jā |
1 Virknes operands joprojām tiek pārveidots par skaitlisku, ja:
- otrs operands ir skaitlisks
- operandam tiek izmantots operators, kas nav = vai <>
(Ja pārveidošana neizdodas, skaitliskais operands tiek pārveidots par virknes operandu un abi operandi tiek salīdzināti kā virknes.)
Operatori not, and un or ir reģistrjutīgi, un tiem jābūt rakstītiem ar mazajiem burtiem. Tiem arī jābūt atdalītiem ar atstarpēm vai iekavām.
Visiem operatoriem, izņemot unāro - un not, ir asociativitāte no kreisās uz labo pusi. Unārais - un not nav asociatīvi (tas nozīmē, ka -(-1) un not (not 1) jāizmanto --1 un not not 1 vietā).
Novērtēšanas rezultāts:
- operatori <, <=, >, >=, =, <> trigera izteiksmē dod rezultātu '1', ja norādītā attiecība ir patiesa, un '0', ja tā ir aplama. Ja vismaz viens operands ir Unknown, rezultāts ir Unknown;
- and zināmiem operandiem dod '1', ja abi tā operandi nav vienādi ar '0'; pretējā gadījumā tas dod '0'; nezināmiem operandiem and dod '0' tikai tad, ja viens operands ir vienāds ar '0'; pretējā gadījumā tas dod 'Unknown';
- or zināmiem operandiem dod '1', ja kāds no tā operandiem nav vienāds ar '0'; pretējā gadījumā tas dod '0'; nezināmiem operandiem or dod '1' tikai tad, ja viens operands nav vienāds ar '0'; pretējā gadījumā tas dod 'Unknown';
- loģiskās noliegšanas operatora not rezultāts zināmam operandam ir '0', ja tā operanda vērtība nav vienāda ar '0'; '1', ja tā operanda vērtība ir vienāda ar '0'. Nezināmam operandam not dod 'Unknown'.
Nezināms izteiksmes stāvoklis
Iespējams, ka trigera izteiksmē parādās nezināms operands, ja:
- tiek izmantots neatbalstīts vienums
- funkcijas novērtēšana atbalstītam vienumam beidzas ar kļūdu
Šādā gadījumā trigera izteiksme parasti tiek novērtēta kā Unknown (jo to nevar novērtēt)
Ir iespējams saņemt paziņojumus par nezināmiem trigeriem.
Izņēmumi
Neraugoties uz nezināmu operandu, trigeru izteiksmes dažos gadījumos var tikt novērtētas ar zināmu rezultātu (Problem/OK):
- Funkcija
nodata()tiek novērtēta neatkarīgi no tā, vai atsauces vienums ir atbalstīts vai nav. - Izteiksmes ar AND/OR var tikt novērtētas ar zināmu rezultātu divos gadījumos:
- 1. gadījums: "
1 or some_function(unsupported_item1) or some_function(unsupported_item2) or ..." tiek novērtēta ar zināmu rezultātu ('1' vai "Problem"), - 2. gadījums: "
0 and some_function(unsupported_item1) and some_function(unsupported_item2) and ..." tiek novērtēta ar zināmu rezultātu ('0' vai "OK").
- 1. gadījums: "
- Ja funkcijas novērtēšana atbalstītam vienumam beidzas ar kļūdu, funkcijas vērtība kļūst par
Unknownun tā piedalās turpmākajā izteiksmes novērtēšanā kā nezināms operands.
Nezināmi operandi var "pazust" tikai loģiskajās izteiksmēs, kā aprakstīts iepriekš.
Aritmētiskajās izteiksmēs nezināmi operandi vienmēr noved pie Unknown (izņemot dalīšanu ar 0).
Nezināms izteiksmes stāvoklis nemaina trigera stāvokli (Problem/OK).
Tātad, ja trigera stāvoklis bija "Problem" (skatiet 1. gadījumu), tas paliek problēmas stāvoklī pat tad, ja zināmā daļa tiek atrisināta ('1' kļūst par '0'), jo izteiksme tagad tiek novērtēta kā Unknown, un tas nemaina trigera stāvokli.
Ja trigera izteiksme ar vairākiem neatbalstītiem vienumiem tiek novērtēta kā Unknown, kļūdas ziņojums lietotāja saskarnē attiecas uz pēdējo novērtēto neatbalstīto vienumu.
Vērtību kešošana
Vērtības, kas nepieciešamas trigeru novērtēšanai, tiek kešotas Zabbix serverī. Tāpēc pēc servera restartēšanas trigeru novērtēšana kādu laiku rada lielāku datubāzes noslodzi.
Vērtību kešatmiņa netiek notīrīta, kad vienuma vēstures vērtības tiek noņemtas (vai nu manuāli, vai ar housekeeper palīdzību), tāpēc serveris izmantos kešotās vērtības, līdz tās kļūs vecākas par laika periodiem, kas definēti trigeru funkcijās, vai līdz serveris tiks restartēts.
Ja kešatmiņā nav nesenu datu un funkcijā nav definēts vaicājuma periods, Zabbix pēc noklusējuma vaicās datubāzi par vēsturiskajām vērtībām, meklējot datus līdz pat vienai nedēļai pagātnē.