7 Предиктивне функције окидача

Преглед

Понекад постоје знаци предстојећег проблема. Ови знаци могу бити уочено тако да се унапред могу предузети радње за спречавање или бар минимизирајте утицај проблема.

Zabbix има алате за предвиђање будућег понашања надгледаног система на основу историјских података. Ови алати се реализују кроз предиктивне функције окидача.

Функције

Пре подешавања окидача, потребно је дефинисати шта је проблемско стање и колико времена је потребно за предузимање акције. Затим, постоје два начина за подешавање окидача који сигнализира о потенцијалној нежељеној ситуацији. Прво: окидач мора да се активира када се очекује да ће систем бити у проблемском стању након "времена за акцију". Друго: окидач мора да се активира када систем ће достићи проблемско стање за мање од "времена за акцију". Одговарајуће функције окидача које треба користити су прогноза и преостало време. Имајте на уму да је основна статистичка анализа у основи идентична за обе функције. Можете подесити окидач на било који начин који желите са сличним резултатима.

Параметри

Обе функције користе скоро исти скуп параметара. Користите листу подржаних функција за референцу.

Временски интервал

Прво, требало би да наведете историјски период који Zabbix треба да анализира да би дошао до предвиђања. То радите на познат начин помоћу параметра time period и опционог временског померања као што то радите са функцијама avg, count, delta, max, min и sum.

Хоризонт прогнозирања

(само прогноза)
Параметар time одређује колико далеко у будућности Zabbix треба да екстраполира зависности које пронађе у историјским подацима. Без обзира да ли користите time_shift или не, time се увек рачуна почев од тренутног тренутка.

Праг који треба достићи

(само timeleft)
Параметар threshold одређује вредност коју анализирана ставка мора да достигне, без разлике да ли је одозго или одоздо. Када одредимо f(t) (видети доле), требало би да решимо једначину f(t) = threshold и вратимо корен који је ближи садашњем тренутку и десно од садашњег тренутка или 1.7976931348623158E+308 ако такав корен не постоји.

Када се вредности ставки приближе прагу, а затим га пређу, timeleft претпоставља да је пресек већ у прошлости и стога прелази на следећи пресек са нивоом threshold, ако га има. Најбоља пракса би требало да буде коришћење предвиђања као допуна обичној дијагностици проблема, а не као замена.1

Функције за подешавање

Подразумевана функција подешавање је линеарна функција. Али ако је ваш праћени систем компликованији, имате више опција за избор.

fit x = f(t)
linear x = a + b*t
polynomialN2 x = a0 + a1*t + a2*t2 + ... + an*tn
exponential x = a*exp(b*t)
logarithmic x = a + b*log(t)
power x = a*tb
Режими

(само прогноза)
Сваки пут када се окидачка функција израчунава, она добија податке из одређеног периода историје и прилагођава одређену функцију подацима. Дакле, ако су подаци мало другачији, прилагођавање функције ће бити мало другачије. Ако једноставно израчунамо вредност прилагођавања функције у одређеном тренутку у будућности, нећете знати ништа о томе како се очекује да ће се анализирана ставка понашати између садашњег тренутка и тог тренутка у будућности. За неке опције прилагођавања (као што је полином) једноставна вредност из будућности може бити обмањујућа.

mode forecast result
value f(now + time)
max maxnow <= t <= now + time f(t)
min minnow <= t <= now + time f(t)
delta max - min
avg average of f(t) (now <= t <= now + time) according to definition

Детаљи

Да бисмо избегли прорачуне са огромним бројевима, временску ознаку прве вредности у наведеном периоду плус 1 нс сматрамо новим нултим временом (тренутно време епохе је реда величине 109, квадрат епохе је 1018, двострука прецизност је око 10-16). Додаје се 1 ns да би се обезбедиле све позитивне временске вредности за логаритамска и степена подешавања која укључују израчунавање log(t). Временски помак не утиче на линеарне, полиномске, експоненцијалне (осим лакших и прецизнијих прорачуна), али мења облик логаритамских и степених функција.

Потенцијалне грешке

Функције враћају -1 у таквим ситуацијама:

  • наведени период евалуације не садржи податке;
  • резултат математичке операције није дефинисан3;
  • нумеричке компликације (нажалост, за неке скупове улазних података опсег и прецизност формата двоструке прецизности са покретним зарезом постају недовољни)4.

Нема упозорења или грешака ако изабрани подаци лоше одговарају описују дате податке или једноставно има премало података за тачно предвиђање.

Примери и поступање са грешкама

Да бисте добили упозорење када вам понестане слободног простора на диску на вашем домаћина, можете користити израз за окидање попут овог:

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

Међутим, код грешке -1 може се активирати и довести ваш окидач у проблемно стање. Генерално, то је добро јер добијате упозорење да ваша предвиђања не функционишу исправно и да би требало да их детаљније погледате да бисте сазнали зашто. Али понекад је лоше јер -1 може једноставно значити да није било података о слободном простору на диску хоста добијених у последњем сату. Ако добијате превише лажно позитивних упозорења, размислите о коришћењу компликованијег израза за окидање 5:

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

Ситуација је мало тежа са forecast. Пре свега, -1 може, али и не мора довести окидач у проблематично стање у зависности од тога да ли имате израз попут forecast(/host/item,(...))<... или као forecast(/host/item,(...))>...

Штавише, -1 може бити валидна прогноза ако је нормално да вредност ставке буде негативна. Али вероватноћа ове ситуације у стварном свету је занемарљива (погледајте како ради оператор =). Дакле, додајте ... или forecast(/host/item,(...))=-1 или ... и forecast(/host/item,(...))<>-1 ако желите или не желите да третирате -1 као проблем, респективно.

Фусноте

1 На пример, једноставан окидач као што је timeleft(/host/item,1h,X) < 1h може прећи у стање проблема када се вредност ставке приближи X, а затим се изненада опорави када се вредност X достигне. Ако је проблем вредност ставке испод X, користите: last(/host/item) < X или timeleft(/host/item,1h,X) < 1h Ако је проблем вредност ставке изнад X, користите: last(/host/item) > X или timeleft(/host/item,1h,X) < 1h

2 Степен полинома може бити од 1 до 6, полином1 је еквивалентан линеарном. Међутим, користите полиноме вишег степена уз опрез. Ако период евалуације садржи мање тачака него што је потребно за одређивање коефицијената полинома, степен полинома ће бити смањен (нпр., захтева се полином5, али постоје само 4 тачке, стога ће бити прилагођен полином3).

3 На пример, уклапање експоненцијалних или степених функција укључује израчунавање log() вредности елемената. Ако подаци садрже нуле или негативне бројеве, добићете грешку јер је log() дефинисан само за позитивне вредности.

4 За линеарне, експоненцијалне, логаритамске и степене функције које уклапају све потребни прорачуни могу се експлицитно написати. За полином само вредност може бити израчуната без икаквих додатних корака. Израчунавање просека укључује израчунавање полиномског антидеривата (аналитички). Израчунавање макса, мин и делта укључује израчунавање полиномског извода (аналитички) и проналажење његових корена (нумерички). Решавање f(t) = 0 укључује проналажење полиномских корена (нумерички).

5 Али у овом случају -1 може проузроковати да се ваш окидач опорави од стања проблема. За потпуну заштиту користите: 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)