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

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:

Š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
2 not Loģiskais NOT not Unknown → Unknown
3 * Reizināšana 0 * Unknown → Unknown
(jā, Unknown, nevis 0 — lai nezaudētu
Unknown aritmētiskajās operācijās)
1.2 * Unknown → Unknown
/ Dalīšana Unknown / 0 → kļūda
Unknown / 1.2 → Unknown
0.0 / Unknown → Unknown
4 + Aritmētiskā saskaitīšana 1.2 + Unknown → Unknown
- Aritmētiskā atņemšana 1.2 - Unknown → Unknown
5 < Mazāks par. Operators ir definēts šādi:

A<B ⇔ (A<B-0.000001)
1.2 < Unknown → Unknown
<= Mazāks vai vienāds ar. Operators ir definēts šādi:

A<=B ⇔ (A≤B+0.000001)
Unknown <= Unknown → Unknown
> Lielāks par. Operators ir definēts šādi:

A>B ⇔ (A>B+0.000001)
>= Lielāks vai vienāds ar. Operators ir definēts šādi:

A>=B ⇔ (A≥B-0.000001)
6 = Vienāds ar. Operators ir definēts šādi:

A=B ⇔ (A≥B-0.000001) and (A≤B+0.000001)
1
<> Nav vienāds ar. Operators ir definēts šādi:

A<>B ⇔ (A<B-0.000001) or (A>B+0.000001)
1
7 and Loģiskais AND 0 and Unknown → 0
1 and Unknown → Unknown
Unknown and Unknown → Unknown
8 or Loģiskais OR 1 or Unknown → 1
0 or Unknown → Unknown
Unknown or Unknown → Unknown

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").
  • Ja funkcijas novērtēšana atbalstītam vienumam beidzas ar kļūdu, funkcijas vērtība kļūst par Unknown un 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ē.