7 Funcions predictives de triggers

Vista general

De vegades hi ha indicis del problema per avançat. Aquests senyals es poden detectar per tal que es puguin prendre accions amb antelació per previndre o, almenys, minimitzar l'impacte del problema.

Zabbix disposa d'eines per predir el comportament futur del sistema monitorat a partir de dades històriques. Aquestes eines s'executen mitjançant funcions de trigger predictives.

1 Funcions

Abans d'establir un trigger, cal definir quin és un estat problema i quant de temps cal per actuar. A continuació, hi ha dues maneres de configurar una senyalització de trigger sobre una possible situació no desitjada. Primer: el trigger s'ha de disparar quan s'espera que el sistema sigui en estat problemàtic després del "temps per actuar". Segon: el trigger s'ha de disparar quan el sistema arribi a l'estat del problema en menys de "temps per actuar". Les funcions de trigger corresponents a emprar són previsió i temps restant. Tingueu en compte que l'anàlisi estadística subjacent és bàsicament idèntica per a ambdues funcions. Podeu configurar un trigger de la manera que preferiu amb resultats similars.

2 Paràmetres

Ambdues funcions empren gairebé el mateix conjunt de paràmetres. Empreu la llista de funcions admeses com a referència.

2.1 Interval de temps

En primer lloc, cal especificar el període històric que Zabbix hauria d'analitzar per arribar a la predicció. Feu-ho de manera familiar mitjançant el paràmetre període de temps i el desplaçament temporal opcional, com es fa amb les funcions avg, count, delta, max , min i sum.

2.2 Horitzó de previsió

(forecast només)
El paràmetre time especifica fins a quin punt del futur Zabbix hauria d'extrapolar les dependències que es troben a les dades històriques. Tant se val si feu servir time_shift o no, el time sempre es compta des del moment present.

2.3 Llindar a assolir

(timeleft només)
El paràmetre threshold especifica un valor que hauria d'assolir l'element analitzat, sense diferència si és per sobre o per sota. Després de determinar f(t) (veieu més avall), hem de resoldre l'equació f(t) = "llindar" i retornar l'arrel més propera al moment actual, situada a la dreta del moment actual, o retornar 999999999999,9999 si no són aquestes arrels.

Quan els valors dels elements s'acosten al llindar i després el superen, timeleft suposa que la intersecció ja ha passat i, per tant, salta a la següent intersecció amb el nivell de "llindar", si n'hi ha. La millor pràctica és emprar les prediccions com a complement dels diagnòstics de problemes habituals, no com a substituts.1

2.4 Funcions d'ajustament

Per defecte, fit és una funció linial. Però si el vostre sistema monitorat és més complexe, teniu diverses opcions a escollir.

fit x = f(t)
linial x = a + b*t
polinomiN2 x = a0 + a1*t + a2*t2 + ... + an*tn
exponencial x = a*exp(b*t)
logarítmica x = a + b*log(t)
potència x = a*tb
2.5 Modes

(forecast només)
Cada vegada que s'avalua una funció de trigger, s'obtenen dades del període d'historial especificat i ajusta una funció especificada a les dades. Així, si les dades són lleugerament diferents, la funció ajustada serà lleugerament diferent. Si només calculem el valor de la funció ajustada en un moment futur especificat, no sabreu pas res sobre el comportament esperat de l'element analitzat per llavors. Per a algunes opcions d'"ajustament" (com ara polinomi), un simple valor futur pot ésser enganyós.

mode resultat predit
valor f(ara + hora)
max maxara <= t <= ara + temps f(t)
min minara <= t <= ara + temps f(t)
delta max - min
mitjana mitjana de f(t) (ara <= t <= ara + temps) segons definició

3 Detalls

Per evitar càlculs amb nombres grans, considereu la marca de temps del primer valor del període especificat més 1 ns com un nou temps zero (el temps actual és al voltant de 109, l'època al quadrat és 1018, la precisió doble és d'uns 10^ -16^). S'afegeix 1 ns per proporcionar tots els valors de temps positius per als ajustaments logarítmics i els ajustaments de potència que impliquen el càlcul de log(t). El desplaçament de temps no afecta els càlculs lineals, polinomis, exponencials (excepte càlculs més fàcils i precisos), però canvia la forma de les funcions logarítmiques i potència.

4 Errades potencials

Les funcions tornen -1 en aquestes situacions:

  • el període d'avaluació especificat no conté cap dada;
  • el resultat de l'operació matemàtica no és pas definit 3;
  • complicacions numèriques (malauradament, per a alguns conjunts de dades d'entrada, la doble precisió i el punt flotant són insuficients) 4.

No es notifica cap avís ni error si l'ajust escollit descriu malament les dades proporcionades o si hi ha massa poques dades per a una predicció precisa.

5 Exemples i tractament d'errades

Per rebre un avís quan sou a punt de quedar-vos sense espai al disc lliure al vostre equip, podeu emprar un trigger com aquest:

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

Tanmateix, el codi d'error -1 pot activar-se i posar el trigger en un estat problemàtic. En general, és bo perquè rebeu un avís que les vostres prediccions no funcionen correctament i hauríeu d'investigar-les més per esbrinar per què. Però de vegades això pot ser problemàtic perquè -1 només pot significar que no hi havia dades sobre l'espai lliure de disc de l'equip obtingudes durant l'última hora. Si obteniu massa falsos positius, penseu a emprar un trigger més complexe 5:

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

La situació és una mica més difícil amb forecast. Primer, -1 pot o no posar el trigger en un estat problemàtic depenent de si teniu o no una expressió com forecast(/host/item,(...))<... o com forecast(/ host/element,(...))>...

A més, -1 pot ser una predicció vàlida si és normal que el valor de l'element sigui negatiu. Però la probabilitat d'això en una situació real és insignificant (veieu com funciona l'operador =). Així que afegiu ... o forecast(/host/item,(...))=-1 o ... i forecast(/host/item,(...))<>-1 respectivament si o no voleu tractar -1 com un problema.


  1. Per exemple, un trigger simple com timeleft(/host/item,1h,X) <1h pot entrar en un estat problemàtic quan el valor de l'element s'acosta a X i, de sobte, recuperar-se un cop arribat al valor X. Si el problema és que el valor de l'element és inferior a X, empreu: last(/host/item) < X o timeleft(/host/item,1h,X) <1h. Si el problema és que el valor de l'element és superior a X, empreu: last(/host/item) > X o timeleft(/host/item,1h,X) <1h↩︎

  2. el grau del polinomi pot ésser entre 1 i 6, polinomi1 equival a lineal. Tanmateix, empreu polinomis de grau superior amb compte. Si el període d'avaluació conté menys punts dels necessaris per determinar els coeficients del polinomi, el grau del polinomi es reduirà (per exemple, es demana polinomi5, però només hi ha 4 punts, per tant, polinomi3 s'ajustarà).↩︎

  3. per exemple, ajustar funcions exponencial o potència implica calcular el log() dels valors dels elements. Si les dades contenen zeros o nombres negatius, obtindreu un error perquè log() només es defineix per a valors positius.↩︎

  4. Per als ajustos lineal, exponencial, logarítmic i potència, tots els càlculs necessaris es poden escriure de manera explícita. Per a polinomi, només el valor es pot calcular sense cap passa addicional. Calcular mitjana implica calcular el polinomi antiderivat (de manera analítica). Calcular max, min i delta implica calcular la derivada polinomial (analíticament) i trobar-ne les arrels (numèricament). La resolució de f(t) = 0 implica trobar arrels polinomials (numèricament).↩︎

  5. però en aquest cas -1 pot fer que el vostre trigger es recuperi de l'estat problema. Per ésser totalment protegit, empreu:timeleft(/host/vfs.fs.size[/,free],1h,0)<1h i ({TRIGGER.VALUE}=0 i timeleft(/host/vfs.fs.size) [/,free],1h,0)<>-1 o {TRIGGER.VALUE}=1)↩︎