7 Voorspellende triggerfuncties

Overzicht

Soms zijn er tekenen van het aanstaande probleem. Deze tekenen kunnen worden opgemerkt, zodat er van tevoren maatregelen genomen kunnen worden om het probleem te voorkomen of op zijn minst de impact ervan te minimaliseren.

Zabbix beschikt over hulpmiddelen om het toekomstige gedrag van het gemonitorde systeem te voorspellen op basis van historische gegevens. Deze hulpmiddelen worden gerealiseerd via predictieve triggerfuncties.

1 Functies

Voordat een trigger wordt ingesteld, is het noodzakelijk om te definiëren wat een probleemtoestand is en hoeveel tijd er nodig is om actie te ondernemen. Vervolgens zijn er twee manieren om een trigger in te stellen die wijst op een mogelijke ongewenste situatie. Eerste optie: de trigger moet afgaan wanneer van verwacht wordt dat het systeem zich in een probleemtoestand bevindt na de "tijd om actie te ondernemen". Tweede optie: de trigger moet afgaan wanneer het systeem de probleemtoestand binnen minder dan "tijd om actie te ondernemen" zal bereiken. De overeenkomstige triggerfuncties die hiervoor gebruikt worden zijn forecast en timeleft. Let op dat de onderliggende statistische analyse in wezen identiek is voor beide functies. Je kunt een trigger opzetten op de manier die je het liefst hebt, met vergelijkbare resultaten.

2 Parameters

Beide functies maken bijna gebruik van dezelfde set parameters. Gebruik de lijst van ondersteunde functies als referentie.

2.1 Tijdsinterval

Allereerst moet je de historische periode specificeren die Zabbix moet analyseren om tot de voorspelling te komen. Je doet dit op een bekende manier aan de hand van de tijdsperiode-parameter en een optionele tijdsverschuiving, net zoals je dat doet bij de avg, count, delta, max, min en sum functies.

2.2 Voorspellingshorizon

(alleen bij forecast)
De parameter tijd geeft aan hoe ver in de toekomst Zabbix afhankelijkheden moet extrapoleren die het vindt in historische gegevens. Ongeacht of je tijdsverschuiving gebruikt of niet, wordt tijd altijd geteld vanaf het huidige moment.

2.3 Drempelwaarde om te bereiken

(alleen bij timeleft)
Parameter drempelwaarde geeft een waarde aan die het geanalyseerde item moet bereiken, ongeacht of dit van bovenaf of van onderaf is. Zodra we f(t) hebben bepaald (zie hieronder), moeten we de vergelijking f(t) = drempelwaarde oplossen en de wortel teruggeven die dichter bij nu ligt en rechts van nu of 999999999999.9999 als er geen dergelijke wortel is.

Wanneer de waarden van items de drempel naderen en deze vervolgens overschrijden, gaat timeleft ervan uit dat de intersectie al in het verleden heeft plaatsgevonden en schakelt dan over naar de volgende intersectie met het niveau van drempelwaarde, indien aanwezig. De beste praktijk is om voorspellingen te gebruiken als aanvulling op gewone probleemdiagnostiek, niet als vervanging.1

2.4 Pasfuncties

De standaard pasvorm is de lineaire functie. Maar als je gemonitorde systeem ingewikkelder is, heb je meer opties om uit te kiezen.

pasvorm x = f(t)
lineair x = a + b*t
polynomialN2 x = a0 + a1*t + a2*t2 + ... + an*tn
exponentieel x = a*exp(b*t)
logaritmisch x = a + b*log(t)
macht x = a*tb
2.5 Modi

(alleen bij forecast)
Telkens wanneer een triggerfunctie wordt geëvalueerd, haalt deze gegevens op uit de opgegeven historische periode en past een opgegeven functie toe op de gegevens. Dus als de gegevens enigszins verschillen, zal de aangepaste functie ook iets anders zijn. Als we eenvoudigweg de waarde van de aangepaste functie berekenen op een bepaald tijdstip in de toekomst, weet je niets over hoe het geanalyseerde item zich naar verwachting zal gedragen tussen nu en dat moment in de toekomst. Voor sommige pasvorm-opties (zoals polynomiaal) kan een eenvoudige waarde uit de toekomst misleidend zijn.

modus forecast-resultaat
waarde f(nu + tijd)
max maxnu <= t <= nu + tijd f(t)
min minnu <= t <= nu + tijd f(t)
delta max - min
gemiddeld gemiddelde van f(t) (nu <= t <= nu + tijd) volgens definitie

3 Details

Om berekeningen met enorme getallen te vermijden, beschouwen we het tijdstempel van de eerste waarde in de opgegeven periode plus 1 ns als een nieuwe nul-tijd (huidige epoche-tijd is van de orde van 109, epoche-tijd in het kwadraat is 1018, dubbele precisie is ongeveer 10-16). 1 ns wordt toegevoegd om alle positieve tijdwaarden te geven voor logaritmische en macht pasvormen die log(t) berekenen. Tijdsverschuiving heeft geen invloed op lineaire, polynomiale, exponentiële pasvormen (behalve voor eenvoudigere en nauwkeurigere berekeningen), maar verandert de vorm van logaritmische en macht functies.

4 Mogelijke fouten

Functies retourneren -1 in de volgende situaties:

  • de opgegeven evaluatieperiode bevat geen gegevens;
  • resultaat van wiskundige bewerking is niet gedefinieerd3;
  • numerieke complicaties (helaas worden voor sommige sets invoergegevens het bereik en de precisie van het drijvendekommagetallen-formaat met dubbele precisie onvoldoende)4.

Er worden geen waarschuwingen of fouten weergegeven als de gekozen pasvorm de geleverde gegevens slecht beschrijft of als er gewoon te weinig gegevens zijn voor een nauwkeurige voorspelling.

5 Voorbeelden en omgaan met fouten

Om een waarschuwing te krijgen wanneer je bijna geen vrije schijfruimte meer hebt op je host, kun je een triggerevaluatie zoals deze gebruiken:

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

Echter, foutcode -1 kan een rol spelen en je triggerevaluatie in een probleemstaat zetten. Over het algemeen is dit goed omdat je een waarschuwing krijgt dat je voorspellingen niet correct werken en je er grondiger naar moet kijken om uit te vinden waarom. Maar soms is dit vervelend omdat -1 simpelweg kan betekenen dat er in het afgelopen uur geen gegevens zijn verkregen over de vrije schijfruimte van de host. Als je te veel valse positieve meldingen krijgt, overweeg dan een complexere triggerevaluatie te gebruiken 5:

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

De situatie is wat lastiger met voorspellingen. Allereerst kan -1 wel of niet de triggerevaluatie in een probleemstaat zetten, afhankelijk van of je een uitdrukking hebt als voorspelling(/host/item,(...))<... of als voorspelling(/host/item,(...))>....

Verder kan -1 een geldige voorspelling zijn als het normaal is voor de waarde van het item om negatief te zijn. Maar de kans op deze situatie in de echte wereld is verwaarloosbaar (zie hoe de operator = werkt). Voeg dus ... of voorspelling(/host/item,(...))=-1 toe of ... en voorspelling(/host/item,(...))<>-1 als je respectievelijk -1 als een probleem wilt behandelen of niet.


  1. Bijvoorbeeld, een eenvoudige triggerevaluatie zoals timeleft(/host/item,1u,X) < 1u kan in een probleemstaat komen wanneer de waarde van het item X nadert en dan plotseling herstellen zodra waarde X is bereikt. Als het probleem is dat de waarde van het item onder X ligt, gebruik dan: last(/host/item) < X of timeleft(/host/item,1u,X) < 1u. Als het probleem is dat de waarde van het item boven X ligt, gebruik dan: last(/host/item) > X of timeleft(/host/item,1u,X) < 1u.↩︎

  2. De graad van de polynoom kan variëren van 1 tot 6; polynomial1 is equivalent aan lineair. Gebruik echter hogere graad polynomen met voorzichtigheid. Als de evaluatieperiode minder punten bevat dan nodig is om de polynoomcoëfficiënten te bepalen, wordt de graad van de polynoom verlaagd (bijvoorbeeld, als polynomial5 wordt gevraagd, maar er zijn slechts 4 punten, dan wordt polynomial3 aangepast).↩︎

  3. Bijvoorbeeld, het passen van exponentiële of machtsverheffing functies omvat het berekenen van de logaritme () van itemwaarden. Als de gegevens nullen of negatieve getallen bevatten, krijg je een fout omdat de logaritme () alleen is gedefinieerd voor positieve waarden.↩︎

  4. Voor lineaire, exponentiële, logaritmische en machtsverheffing passingen kunnen alle noodzakelijke berekeningen expliciet worden geschreven. Voor polynoom kan alleen de waarde worden berekend zonder verdere stappen. Het berekenen van gemiddelde houdt het berekenen in van de polynoomantiderivaat (analytisch). Het berekenen van max, min en delta houdt het berekenen in van de polynoomafgeleide (analytisch) en het vinden van de nulpunten (numeriek). Het oplossen van f(t) = 0 houdt het vinden in van polynoomnulpunten (numeriek).↩︎

  5. Maar in dit geval kan -1 ertoe leiden dat je trigger herstelt van de probleemstaat. Voor volledige bescherming gebruik: timeleft(/host/vfs.fs.size[/,free],1u,0)<1u en ({TRIGGER.VALUE}=0 en timeleft(/host/vfs.fs.size[/,free],1u,0)<>-1 of {TRIGGER.VALUE}=1)↩︎