Prädiktive Auslöserfunktionen

Übersicht

Manchmal gibt es Anzeichen für ein bevorstehendes Problem. Diese Anzeichen können erkannt werden, sodass im Voraus Maßnahmen ergriffen werden können, um die Auswirkungen des Problems zu verhindern oder zumindest zu minimieren.

Zabbix verfügt über Werkzeuge, um das zukünftige Verhalten des überwachten Systems auf Grundlage historischer Daten vorherzusagen. Diese Werkzeuge werden durch prädiktive Auslöserfunktionen umgesetzt.

Funktionen

Bevor ein Auslöser eingerichtet wird, muss definiert werden, was ein Problemzustand ist und wie viel Zeit benötigt wird, um Maßnahmen zu ergreifen. Danach gibt es zwei Möglichkeiten, einen Auslöser einzurichten, der auf eine potenziell unerwünschte Situation hinweist. Erstens: Der Auslöser muss auslösen, wenn erwartet wird, dass sich das System nach der „time to act“ in einem Problemzustand befindet. Zweitens: Der Auslöser muss auslösen, wenn das System den Problemzustand in weniger als „time to act“ erreichen wird. Die entsprechenden Auslöserfunktionen sind forecast und timeleft. Beachten Sie, dass die zugrunde liegende statistische Analyse für beide Funktionen im Wesentlichen identisch ist. Sie können einen Auslöser auf die von Ihnen bevorzugte Weise mit ähnlichen Ergebnissen einrichten.

Parameter

Beide Funktionen verwenden nahezu denselben Parametersatz. Verwenden Sie die Liste der unterstützten Funktionen als Referenz.

Zeitintervall

Zunächst sollten Sie den historischen Zeitraum angeben, den Zabbix analysieren soll, um die Vorhersage zu erstellen. Dies geschieht auf die gewohnte Weise mithilfe des Parameters time period und einer optionalen Zeitverschiebung, so wie Sie es auch bei den Funktionen avg, count, delta, max, min und sum tun.

Prognosehorizont

(nur forecast)
Der Parameter time gibt an, wie weit in die Zukunft Zabbix die in historischen Daten gefundenen Abhängigkeiten extrapolieren soll. Unabhängig davon, ob Sie time_shift verwenden oder nicht, wird time immer ab dem aktuellen Zeitpunkt gezählt.

Zu erreichender Schwellenwert

(nur timeleft)\
Der Parameter threshold gibt einen Wert an, den der analysierte Datenpunkt erreichen muss, unabhängig davon, ob von oben oder von unten. Sobald wir f(t) bestimmt haben (siehe unten), sollten wir die Gleichung f(t) = threshold lösen und die Nullstelle zurückgeben, die näher an der Gegenwart liegt und rechts von der Gegenwart liegt, oder 1.7976931348623158E+308, falls es keine solche Nullstelle gibt.

Wenn sich Datenpunktwerte dem Schwellenwert annähern und ihn dann überschreiten, geht timeleft davon aus, dass der Schnittpunkt bereits in der Vergangenheit liegt, und wechselt daher zum nächsten Schnittpunkt mit dem Niveau threshold, falls vorhanden. Es empfiehlt sich, Vorhersagen als Ergänzung zur gewöhnlichen Problemdiagnose zu verwenden, nicht als Ersatz.1

Anpassungsfunktionen

Standardmäßig ist fit die lineare Funktion. Wenn Ihr überwachtes System komplexer ist, stehen Ihnen weitere Optionen zur Auswahl.

fit x = f(t)
linear x = a + b*t
polynomialN2 x = a~0~ + a~1~*t + a~2~*t2 + ... + a~n~*tn
exponential x = a*exp(b*t)
logarithmic x = a + b*log(t)
power x = a*tb
Modi

(nur forecast)\
Jedes Mal, wenn eine Auslöserfunktion ausgewertet wird, ruft sie Daten aus dem angegebenen Verlaufszeitraum ab und passt eine angegebene Funktion an die Daten an. Wenn sich also die Daten geringfügig unterscheiden, wird auch die angepasste Funktion geringfügig anders sein. Wenn wir einfach den Wert der angepassten Funktion zu einem angegebenen Zeitpunkt in der Zukunft berechnen, erfahren Sie nichts darüber, wie sich der analysierte Datenpunkt voraussichtlich zwischen jetzt und diesem Zeitpunkt in der Zukunft verhalten wird. Für einige fit-Optionen (wie polynomial) kann ein einfacher Wert aus der Zukunft irreführend sein.

mode forecast-Ergebnis
value f(now + time)
max max~now\ <=\ t\ <=\ now\ +\ time~ f(t)
min min~now\ <=\ t\ <=\ now\ +\ time~ f(t)
delta max - min
avg Durchschnitt von f(t) (now <= t <= now + time) gemäß Definition

Details

Um Berechnungen mit sehr großen Zahlen zu vermeiden, betrachten wir den Zeitstempel des ersten Werts im angegebenen Zeitraum plus 1 ns als neue Nullzeit (die aktuelle Epoch-Zeit liegt in der Größenordnung von 109, das Quadrat der Epoch-Zeit bei 1018, die doppelte Genauigkeit bei etwa 10-16). 1 ns wird hinzugefügt, um für logarithmische und Potenz-Anpassungen, bei denen log(t) berechnet wird, ausschließlich positive Zeitwerte bereitzustellen. Die Zeitverschiebung beeinflusst lineare, polynomiale und exponentielle Anpassungen nicht (abgesehen von einfacheren und genaueren Berechnungen), verändert jedoch die Form von logarithmischen und Potenz-Funktionen.

Mögliche Fehler

Funktionen geben in solchen Situationen -1 zurück:

  • der angegebene Auswertungszeitraum enthält keine Daten;
  • das Ergebnis der mathematischen Operation ist nicht definiert3;
  • numerische Komplikationen (leider werden bei einigen Eingabedatensätzen Bereich und Genauigkeit des Gleitkommaformats mit doppelter Genauigkeit unzureichend)4.

Es werden keine Warnungen oder Fehler markiert, wenn die gewählte Anpassung die bereitgestellten Daten schlecht beschreibt oder einfach zu wenige Daten für eine genaue Vorhersage vorhanden sind.

Beispiele und Umgang mit Fehlern

Um eine Warnung zu erhalten, wenn Ihnen auf Ihrem Host bald der freie Festplattenspeicher ausgeht, können Sie einen Auslöser-Ausdruck wie diesen verwenden:

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

Allerdings kann der Fehlercode -1 ins Spiel kommen und Ihren Auslöser in einen Problemzustand versetzen. Im Allgemeinen ist das gut, weil Sie eine Warnung erhalten, dass Ihre Vorhersagen nicht korrekt funktionieren und Sie diese genauer untersuchen sollten, um herauszufinden, warum. Manchmal ist es jedoch schlecht, weil -1 einfach bedeuten kann, dass in der letzten Stunde keine Daten über den freien Festplattenspeicher des Hosts erfasst wurden. Wenn Sie zu viele Fehlalarme erhalten, sollten Sie einen komplizierteren Auslöser-Ausdruck in Betracht ziehen 5:

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

Bei forecast ist die Situation etwas schwieriger. Zunächst einmal kann -1 den Auslöser je nachdem, ob Sie einen Ausdruck wie forecast(/host/item,(...))<... oder wie forecast(/host/item,(...))>... haben, in einen Problemzustand versetzen oder auch nicht.

Außerdem kann -1 eine gültige Vorhersage sein, wenn es normal ist, dass der Datenpunkt-Wert negativ ist. Die Wahrscheinlichkeit, dass diese Situation in der Praxis auftritt, ist jedoch vernachlässigbar (siehe wie der Operator = funktioniert). Fügen Sie also ... or forecast(/host/item,(...))=-1 oder ... and forecast(/host/item,(...))<>-1 hinzu, je nachdem, ob Sie -1 als Problem behandeln möchten oder nicht.

Fußnoten

1 Zum Beispiel kann ein einfacher Auslöser wie timeleft(/host/item,1h,X) < 1h in einen Problemzustand wechseln, wenn sich der Datenpunkt-Wert X nähert, und sich dann plötzlich erholen, sobald der Wert X erreicht ist. Wenn das Problem darin besteht, dass der Datenpunkt-Wert unter X liegt, verwenden Sie: last(/host/item) < X or timeleft(/host/item,1h,X) < 1h Wenn das Problem darin besteht, dass der Datenpunkt-Wert über X liegt, verwenden Sie: last(/host/item) > X or timeleft(/host/item,1h,X) < 1h

2 Der Polynomgrad kann zwischen 1 und 6 liegen, polynomial1 ist äquivalent zu linear. Verwenden Sie jedoch Polynome höheren Grades mit Vorsicht. Wenn der Auswertungszeitraum weniger Punkte enthält als zur Bestimmung der Polynomkoeffizienten erforderlich sind, wird der Polynomgrad verringert (z. B. wird polynomial5 angefordert, es gibt aber nur 4 Punkte, daher wird polynomial3 angepasst).

3 Zum Beispiel umfasst das Anpassen von Funktionen wie exponential oder power die Berechnung von log() aus Datenpunkt-Werten. Wenn die Daten Nullen oder negative Zahlen enthalten, erhalten Sie einen Fehler, da log() nur für positive Werte definiert ist.

4 Für linear, exponential, logarithmic und power können alle erforderlichen Berechnungen explizit geschrieben werden. Für polynomial kann nur value ohne zusätzliche Schritte berechnet werden. Die Berechnung von avg umfasst die Berechnung der Stammfunktion des Polynoms (analytisch). Die Berechnung von max, min und delta umfasst die Berechnung der Ableitung des Polynoms (analytisch) und das Finden ihrer Nullstellen (numerisch). Das Lösen von f(t) = 0 umfasst das Finden der Polynom-Nullstellen (numerisch).

5 In diesem Fall kann -1 jedoch dazu führen, dass sich Ihr Auslöser aus dem Problemzustand erholt. Um vollständig geschützt zu sein, verwenden Sie: 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)