Понекад постоје знаци предстојећег проблема. Ови знаци могу бити уочено тако да се унапред могу предузети радње за спречавање или бар минимизирајте утицај проблема.
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 у таквим ситуацијама:
Нема упозорења или грешака ако изабрани подаци лоше одговарају описују дате податке или једноставно има премало података за тачно предвиђање.
Да бисте добили упозорење када вам понестане слободног простора на диску на вашем домаћина, можете користити израз за окидање попут овог:
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)