Trigeru izteiksme un funkcijas

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ī:

Funkcijas

Funkcijas ļauj analizēt apkopotās vērtības, piemēram, aprēķināt vidējo vērtību vai atrast noteiktu virkni.

Noklikšķiniet uz attiecīgās funkciju grupas, lai skatītu papildinformāciju.

Funkciju grupa Funkcijas
Apkopošanas 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, jsonpath, last, lastclock, logeventid, logseverity, logsource, logtimestamp, monodec, monoinc, nodata, percentile, rate, xmlxpath
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ēšanas funkcijas forecast, timeleft
Virkņu funkcijas ascii, bitlength, bytelength, char, concat, contains, insert, jsonpath, left, length, ltrim, mid, repeat, replace, right, rtrim, substring, trim, xmlxpath

Ja vien nav norādīts citādi, šīs funkcijas tiek atbalstītas:

Foreach funkcijas tiek atbalstītas tikai apkopošanas aprēķiniem.

Parasti funkcijas atgriež skaitliskas vērtības salīdzināšanai. 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).

Funkciju parametri

Funkciju parametri ļauj norādīt:

  • vienuma atslēgu (kā /host/key) funkcijām, kas atsaucas uz hosts 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:

Š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

Funkcijām specifiskie parametri tiek norādīti aiz vienuma atslēgas un no tās atdalīti 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 - piecas jaunākās vērtības).

Laika perioda norādīšanai varat izmantot sekundes vai laika sufiksus.
Ja parametra priekšā ir jaucējzīme, tam ir cita nozīme:

Izteiksme Apraksts
sum(/host/key,10m) Pēdējo 10 minūšu vērtību summa.
sum(/host/key,#10) Pēdējo desmit vērtību summa.

Parametriem ar jaucējzīmi ir cita nozīme funkcijā last - tie apzīmē N-to iepriekšējo vērtību. Piemēram, ja vērtības ir 30, 70, 20, 60, 50 (no jaunākās līdz vecākajai):

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

Laika periods tiek mērīts līdz "tagad" - brīdim, kad trigeris tika pārrēķināts pēdējo reizi (skatiet sadaļu Aprēķināšanas biežums); "tagad" nav servera pašreizējais laiks.

Laika periods norāda vienu no šīm iespējām:

  • Visas vērtības starp "tagad - laika periods" un "tagad" (vai, ja tiek lietota laika nobīde, starp "tagad - laika nobīde - laika periods" un "tagad - laika nobīde").
  • Norādīto pagātnes vērtību skaitu līdz "tagad".

Ja norādītajā novērtēšanas periodā nav datu, 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 aprēķināts līdz vērtībai, kas tika saņemta pirms stundas.
  • Jaunam trigerim aprēķins tiek veikts, tiklīdz tiek saņemta pirmā vērtība (vēstures funkcijas); datuma un laika un nodata() funkcijām aprēķins tiek veikts 30 sekunžu laikā. Tādējādi trigeris tiks aprēķināts, pat ja kopš trigera 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 ir iestatīts, piemēram, uz desmit jaunākajām vērtībām.
Laika nobīde

Ar laiku vai vērtību skaitu kā funkcijas parametru var izmantot neobligātu laika nobīdi. Šis parametrs ļauj atsaukties uz datiem no kāda pagātnes laika perioda.

Laika nobīde sākas ar now, kas norāda 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 vienai stundai pirms vienas dienas.

Laika nobīde, kas norādīta mēnešos (M) un gados (y), tiek atbalstīta tikai tendenču funkcijās. 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 vienai dienai, no pirmdienas līdz svētdienai vienai nedēļai, no mēneša pirmās līdz pēdējai dienai vienam mēnesim.

Laika nobīde absolūtiem laika periodiem sākas ar now, kas norāda pašreizējo laiku, un tai seko jebkāds skaits laika darbību: /<time unit> nosaka laika vienības sākumu un beigas, piemēram, no pusnakts līdz pusnaktij vienai dienai, +N<time unit> vai -N<time unit>, lai pieskaitītu vai atņemtu N laika vienības.

Ņ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 Vakardiena
1d:now/d+1d Šodiena
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 nezināms operands parādās trigeris izteiksmē, ja:

  • tiek izmantots neatbalstīts vienums
  • funkcijas novērtēšana atbalstītam vienumam beidzas ar kļūdu

Šādā gadījumā trigeris izteiksme parasti tiek novērtēta kā Unknown (jo to nevar novērtēt)

Ir iespējams saņemt paziņojumu par nezināmiem trigeriem.

Izņēmumi

Neraugoties uz nezināmu operandu, trigeris izteiksmes dažos gadījumos var tikt novērtētas līdz zināmam rezultātam (Problem/OK):

  • nodata() funkcija tiek novērtēta neatkarīgi no tā, vai atsauces vienums ir atbalstīts vai nē.
  • Izteiksmes ar AND/OR var tikt novērtētas līdz zināmam rezultātam divos gadījumos:
    • 1. gadījums: "1 or some_function(unsupported_item1) or some_function(unsupported_item2) or ..." tiek novērtēta līdz zināmam rezultātam ('1' vai "Problem"),
    • 2. gadījums: "0 and some_function(unsupported_item1) and some_function(unsupported_item2) and ..." tiek novērtēta līdz zināmam rezultātam ('0' vai "OK").
  • Ja funkcijas novērtēšana atbalstītam vienumam beidzas ar kļūdu, funkcijas vērtība kļūst par Unknown, un tā turpmākajā izteiksmes novērtēšanā piedalās kā nezināms operands.

Nezināmi operandi var "pazust" tikai loģiskās izteiksmēs, kā aprakstīts iepriekš. Aritmētiskās izteiksmēs nezināmi operandi vienmēr noved pie Unknown (izņemot dalīšanu ar 0).

Nezināms izteiksmes stāvoklis nemaina trigeris stāvokli (Problem/OK). Tātad, ja trigeris stāvoklis bija "Problem" (skat. 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 trigeris stāvokli.

Ja trigeris izteiksme ar vairākiem neatbalstītiem vienumiem tiek novērtēta kā Unknown, kļūdas ziņojums lietotāja saskarne 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ē.