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 door vrije schijfruimte op je host heen bent, kun je een triggervoorwaarde zoals deze gebruiken:

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

Echter, foutcode -1 kan in het spel komen en je trigger in een probleemtoestand plaatsen. Over het algemeen is dit goed omdat je een waarschuwing krijgt dat je voorspellingen niet correct werken en dat je ze grondiger moet bekijken om uit te zoeken waarom. Maar soms is dit slecht 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 om een meer complexe triggervoorwaarde 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 ingewikkelder bij forecast. Allereerst kan -1 al dan niet de trigger in een probleemtoestand plaatsen, afhankelijk van of je een expressie hebt zoals forecast(/host/item,(...))<... of zoals forecast(/host/item,(...))>....

Verder kan -1 een geldige voorspelling zijn als het normaal is dat de itemwaarde negatief is. Maar de kans op deze situatie in de echte wereld is verwaarloosbaar (zie hoe de operator = werkt). Voeg daarom ... of forecast(/host/item,(...))=-1 of ... en forecast(/host/item,(...))<>-1 toe als je respectievelijk -1 als een probleem wilt beschouwen of niet.


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

  2. De graad van een polynoom kan variëren van 1 tot 6, polynomial1 is gelijk 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 polynomial5 wordt aangevraagd, maar er zijn slechts 4 punten, dus polynomial3 wordt aangepast).↩︎

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

  4. Voor lineaire, exponentiële, logaritmische en macht passingen kunnen alle benodigde berekeningen expliciet worden geschreven. Voor polynomial kan alleen de waarde worden berekend zonder extra stappen. Het berekenen van gemiddeld omvat het berekenen van de primitieve functie van een polynoom (analytisch). Het berekenen van max, min en delta omvat het berekenen van de afgeleide van een polynoom (analytisch) en het vinden van zijn wortels (numeriek). Het oplossen van f(t) = 0 omvat het vinden van polynoomwortels (numeriek).↩︎

  5. Maar in dit geval kan -1 ervoor zorgen dat je trigger herstelt van de probleemtoestand. Om volledig beschermd te zijn, gebruik je: 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)↩︎