7 Prognozējošās trigeru funkcijas

Pārskats

Dažkārt ir pazīmes, kas liecina par gaidāmu problēmu. Šīs pazīmes var pamanīt, lai savlaicīgi varētu veikt darbības un novērst problēmu vai vismaz samazināt tās ietekmi.

Zabbix ir rīki, kas ļauj prognozēt uzraudzītās sistēmas turpmāko uzvedību, pamatojoties uz vēsturiskajiem datiem. Šie rīki ir realizēti, izmantojot prognozējošās trigeru funkcijas.

Funkcijas

Pirms trigera iestatīšanas ir nepieciešams definēt, kas ir problēmas stāvoklis un cik daudz laika ir nepieciešams, lai veiktu darbības. Pēc tam ir divi veidi, kā iestatīt trigeri, kas signalizē par iespējamu nevēlamu situāciju. Pirmais: trigerim jāaktivizējas, kad tiek sagaidīts, ka sistēma pēc "time to act" būs problēmas stāvoklī. Otrais: trigerim jāaktivizējas, kad sistēma nonāks problēmas stāvoklī mazāk nekā "time to act" laikā. Atbilstošās izmantojamās trigeru funkcijas ir forecast un timeleft. Ņemiet vērā, ka pamatā esošā statistiskā analīze abām funkcijām ir būtībā identiska. Jūs varat iestatīt trigeri jebkurā sev vēlamā veidā, un rezultāti būs līdzīgi.

Parametri

Abas funkcijas izmanto gandrīz vienu un to pašu parametru kopu. Atsaucei izmantojiet supported functions sarakstu.

Laika intervāls

Vispirms jums jānorāda vēsturiskais periods, ko Zabbix vajadzētu analizēt, lai iegūtu prognozi. To var izdarīt ierastā veidā, izmantojot time period parametru un izvēles laika nobīdi, tāpat kā to darāt ar avg, count, delta, max, min un sum funkcijām.

Prognozēšanas horizonts

(tikai prognoze)
Parametrs time nosaka, cik tālu nākotnē Zabbix vajadzētu ekstrapolēt atkarības, ko tas atrod vēsturiskajos datos. Neatkarīgi no tā, vai izmantojat time_shift vai nē, time vienmēr tiek skaitīts, sākot no pašreizējā brīža.

Slieksnis, kas jāsasniedz

(tikai timeleft)
Parametrs threshold norāda vērtību, kuru analizētajam vienumam ir jāsasniedz, nav nozīmes, vai no augšas vai no apakšas. Kad esam noteikuši f(t) (skatīt tālāk), mums jāatrisina vienādojums f(t) = threshold un jāatgriež sakne, kas ir tuvāk tagadnei un atrodas pa labi no tagadnes, vai 1.7976931348623158E+308, ja šādas saknes nav.

Kad vienuma vērtības tuvojas slieksnim un pēc tam to šķērso, timeleft pieņem, ka krustpunkts jau ir pagātnē, un tāpēc pāriet uz nākamo krustpunktu ar threshold līmeni, ja tāds ir. Labākā prakse ir izmantot prognozes kā papildinājumu parastai problēmu diagnostikai, nevis kā aizstājēju.1

Pielāgošanas funkcijas

Noklusējuma fit ir lineārā funkcija. Taču, ja jūsu uzraudzītā sistēma ir sarežģītāka, jums ir pieejamas citas izvēles iespējas.

fit x = f(t)
lineārā x = a + b*t
polinomiālāN2 x = a~0~ + a~1~*t + a~2~*t2 + ... + a~n~*tn
eksponenciālā x = a*exp(b*t)
logaritmiskā x = a + b*log(t)
pakāpes x = a*tb
Režīmi

(tikai forecast)
Katru reizi, kad tiek novērtēta trigeris funkcija, tā iegūst datus no norādītā vēstures perioda un pielāgo datiem norādīto funkciju. Tāpēc, ja dati nedaudz atšķiras, pielāgotā funkcija arī būs nedaudz atšķirīga. Ja mēs vienkārši aprēķinām pielāgotās funkcijas vērtību noteiktā laikā nākotnē, jūs neko neuzzināsiet par to, kā analizētais vienums tiek prognozēts uzvesties starp tagadni un šo nākotnes brīdi. Dažām fit opcijām (piemēram, polynomial) vienkārša vērtība no nākotnes var būt maldinoša.

mode forecast rezultāts
value f(now + time)
max max~now\ <=\ t\ <=\ now\ +\ time~ f(t)
min min~now\ <=\ t\ <=\ now\ +\ time~ f(t)
delta max - min
avg f(t) vidējā vērtība (now <= t <= now + time) saskaņā ar definīciju

Detaļas

Lai izvairītos no aprēķiniem ar ļoti lieliem skaitļiem, mēs uzskatām norādītā perioda pirmās vērtības laika zīmogu plus 1 ns par jaunu nulles laiku (pašreizējais epoch laiks ir aptuveni 109, epoch kvadrāts ir 1018, dubultprecizitāte ir aptuveni 10-16). 1 ns tiek pievienots, lai nodrošinātu visus pozitīvos laika vērtību logaritmiskajām un pakāpes pielāgošanām, kas ietver log(t) aprēķināšanu. Laika nobīde neietekmē lineāro, polinomiālo, eksponenciālo (izņemot vienkāršākus un precīzākus aprēķinus) pielāgojumus, taču maina logaritmisko un pakāpes funkciju formu.

Iespējamās kļūdas

Funkcijas šādās situācijās atgriež -1:

  • norādītais novērtēšanas periods nesatur datus;
  • matemātiskās darbības rezultāts nav definēts3;
  • skaitliskas komplikācijas (diemžēl dažiem ievaddatu kopumiem dubultprecizitātes peldošā komata formāta diapazons un precizitāte kļūst nepietiekami)4.

Brīdinājumi vai kļūdas netiek atzīmēti, ja izvēlētais pielāgojums slikti raksturo sniegtos datus vai arī datu ir pārāk maz precīzai prognozei.

Piemēri un darbs ar kļūdām

Lai saņemtu brīdinājumu, kad jūsu hostā drīz beigsies brīvā diska vieta, varat izmantot trigeri ar šādu izteiksmi:

timeleft(/host/vfs.fs.size[/,free],1h,0)}<1h

Tomēr var tikt ņemts vērā kļūdas kods -1, un tas var novest jūsu trigeri uz problēmas stāvokli. Kopumā tas ir labi, jo jūs saņemat brīdinājumu, ka jūsu prognozes nedarbojas pareizi un tās vajadzētu rūpīgāk pārskatīt, lai noskaidrotu iemeslu. Taču dažkārt tas ir slikti, jo -1 var vienkārši nozīmēt, ka pēdējās stundas laikā nav iegūti dati par hosta brīvo diska vietu. Ja saņemat pārāk daudz kļūdainu pozitīvu brīdinājumu, apsveriet iespēju izmantot sarežģītāku trigeru izteiksmi 5:

timeleft(/host/vfs.fs.size[/,free],1h,0)<1h and timeleft(/host/vfs.fs.size[/,free],1h,0)<>-1

Situācija ar forecast ir nedaudz sarežģītāka. Pirmkārt, -1 var vai nu var arī nevar novest trigeri uz problēmas stāvokli atkarībā no tā, vai jums ir izteiksme forecast(/host/item,(...))<... vai forecast(/host/item,(...))>...

Turklāt -1 var būt derīga prognoze, ja ir normāli, ka vienuma vērtība ir negatīva. Taču šādas situācijas varbūtība reālajā pasaulē ir niecīga (skatiet darbojas operators =). Tāpēc pievienojiet ... or forecast(/host/item,(...))=-1 vai ... and forecast(/host/item,(...))<>-1, ja attiecīgi vēlaties vai nevēlaties uzskatīt -1 par problēmu.

Piezīmes

1 Piemēram, vienkāršs trigeris, piemēram timeleft(/host/item,1h,X) < 1h, var nonākt problēmas stāvoklī, kad vienuma vērtība tuvojas X un pēc tam pēkšņi atjaunoties, tiklīdz X tiek sasniegta. Ja problēma ir tāda, ka vienuma vērtība ir zem X, izmantojiet: last(/host/item) < X or timeleft(/host/item,1h,X) < 1h Ja problēma ir tāda, ka vienuma vērtība ir virs X, izmantojiet: last(/host/item) > X or timeleft(/host/item,1h,X) < 1h

2 Polinoma pakāpe var būt no 1 līdz 6, polynomial1 ir ekvivalents linear. Tomēr augstākas pakāpes polinomus izmantojiet piesardzīgi. Ja novērtēšanas periodā ir mazāk punktu, nekā nepieciešams polinoma koeficientu noteikšanai, polinoma pakāpe tiks samazināta (piemēram, tiek pieprasīts polynomial5, bet ir tikai 4 punkti, tāpēc tiks pielāgots polynomial3).

3 Piemēram, exponential vai power funkciju pielāgošana ietver log() aprēķināšanu no vienumu vērtībām. Ja datos ir nulles vai negatīvi skaitļi, tiks saņemta kļūda, jo log() ir definēts tikai pozitīvām vērtībām.

4 linear, exponential, logarithmic un power pielāgojumiem visus nepieciešamos aprēķinus var uzrakstīt tieši. Savukārt polynomial gadījumā bez papildu soļiem var aprēķināt tikai value. avg aprēķināšana ietver polinoma primitīvās funkcijas aprēķināšanu (analītiski). max, min un delta aprēķināšana ietver polinoma atvasinājuma aprēķināšanu (analītiski) un tā sakņu atrašanu (skaitliski). Atrisinot f(t) = 0, tiek meklētas polinoma saknes (skaitliski).

5 Taču šajā gadījumā -1 var izraisīt to, ka jūsu trigeris atjaunojas no problēmas stāvokļa. Lai būtu pilnībā aizsargāti, izmantojiet: timeleft(/host/vfs.fs.size[/,free],1h,0)<1h and ({TRIGGER.VALUE}=0 and timeleft(/host/vfs.fs.size[/,free],1h,0)<>-1 or {TRIGGER.VALUE}=1)