Auslöser-Ausdruck und Funktionen

Übersicht

Diese Seite beschreibt die Syntax von Auslöserausdrücken und Details zu ihrer Auswertung.

Die Syntax eines einfachen Ausdrucks lautet:

function(/host/item,time_period)<operator><constant>

In diesem Ausdruck ist der erste Operand (links vom Operator) eine Funktion mit ihren Parametern in Klammern (typischerweise der Datenpunkt und der Zeitraum).

Die Funktion wird verwendet, um empfangene Daten innerhalb des festgelegten Zeitraums zu analysieren, was zu einem berechneten Wert führt.

Dieser Wert wird dann mithilfe des Operators mit dem zweiten Operanden verglichen. In diesem Beispiel ist der zweite Operand eine Konstante, er kann jedoch auch eine weitere Funktion sein.

Zum Beispiel:

min(/Zabbix server/net.if.in[eth0,bytes],5m)>100K

Dieser Auslöser wird ausgelöst, wenn die Anzahl der auf eth0 empfangenen Bytes während der letzten fünf Minuten immer über 100 Kilobyte lag. In diesem Fall ist der Ausdruck wahr und es wird ein Problem erstellt.

Auslöserausdrücke sind äußerst flexibel. In komplexeren Ausdrücken können mehrere Funktionen, Operatoren und Konstanten kombiniert werden.

Siehe auch:

Funktionen

Funktionen ermöglichen die Analyse gesammelter Werte, beispielsweise die Berechnung des Durchschnitts oder die Suche nach einer bestimmten Zeichenfolge.

Klicken Sie auf die entsprechende Funktionsgruppe, um weitere Details anzuzeigen.

Funktionsgruppe Funktionen
Aggregatfunktionen avg, bucket_percentile, count, histogram_quantile, item_count, kurtosis, mad, max, min, skewness, stddevpop, stddevsamp, sum, sumofsquares, varpop, varsamp
Foreach-Funktionen avg_foreach, bucket_rate_foreach, count_foreach, exists_foreach, last_foreach, max_foreach, min_foreach, sum_foreach
Bitweise Funktionen bitand, bitlshift, bitnot, bitor, bitrshift, bitxor
Datums- und Zeitfunktionen date, dayofmonth, dayofweek, now, time
Verlaufsfunktionen change, changecount, count, countunique, find, first, firstclock, fuzzytime, jsonpath, last, lastclock, logeventid, logseverity, logsource, logtimestamp, monodec, monoinc, nodata, percentile, rate, xmlxpath
Trendfunktionen baselinedev, baselinewma, trendavg, trendcount, trendmax, trendmin, trendstl, trendsum
Mathematische Funktionen abs, acos, asin, atan, atan2, avg, cbrt, ceil, cos, cosh, cot, degrees, e, exp, expm1, floor, log, log10, max, min, mod, pi, power, radians, rand, round, signum, sin, sinh, sqrt, sum, tan, truncate
Operatorfunktionen between, in
Prädiktive Funktionen forecast, timeleft
Zeichenfolgenfunktionen ascii, bitlength, bytelength, char, concat, contains, insert, jsonpath, left, length, ltrim, mid, repeat, replace, right, rtrim, substring, trim, xmlxpath

Sofern nicht anders angegeben, werden diese Funktionen unterstützt in:

Foreach-Funktionen werden nur für Aggregatberechnungen unterstützt.

In der Regel geben Funktionen numerische Werte für Vergleiche zurück. Bei der Rückgabe von Zeichenfolgen ist ein Vergleich mit den Operatoren = und <> möglich (siehe das Beispiel Nicht übereinstimmende Software auf verschiedenen Hosts erkennen).

Funktionsparameter

Mit Funktionsparametern können Sie Folgendes angeben:

  • den Datenpunktschlüssel (als /host/key) für Funktionen, die auf den Verlauf eines Host-Datenpunkts verweisen
  • den Zeitraum (sowie weitere funktionsspezifische Parameter)
  • andere Ausdrücke
Datenpunktschlüssel

Der referenzierte Datenpunkt muss sich in einem unterstützten Zustand befinden (mit Ausnahme der Funktion nodata(), die auch für nicht unterstützte Datenpunkte berechnet wird).

Das Weglassen des Host-Namens im ersten Parameter (d. h. wie in function(//key,parameter,...)) wird nur in bestimmten Kontexten unterstützt:

  • In der Formel berechneter Datenpunkte
  • In Ausdrucksmakros, die verwendet werden können in:

In diesen Kontexten können Sie auch das Makro {HOST.HOST} verwenden. {HOST.HOST<1-9>} kann im Fall des Feldes Ereignisname und des Kartenelements „Auslöser“ verwendet werden, um auf einen bestimmten Datenpunkt im Auslöserausdruck zu verweisen. Wenn der Host-Name in diesen Kontexten weggelassen oder durch {HOST.HOST} ersetzt wird, verweist die Referenz auf den ersten Datenpunkt im Auslöserausdruck oder auf den ersten Datenpunkt im Diagramm. Außerhalb dieser unterstützten Kontexte führt das Weglassen des Host-Namens in Auslöserausdrücken zu einem Fehler. Ein Beispiel zur Veranschaulichung der Verwendung von Doppelschrägstrichen in Ereignisname-Makros finden Sie unter Vergleich langfristiger CPU-Auslastungen.

Zeitraum

Parameterspezifische Parameter werden nach dem Datenpunktschlüssel angegeben und durch ein Komma vom Datenpunktschlüssel getrennt.

Die meisten numerischen Funktionen akzeptieren einen Zeitraum als Parameter.
Damit können Sie das Intervall angeben, für das Sie sich interessieren.
Er kann als Zeitraum (30s, 10m, 1h) oder als Wertebereich (#5 - für die fünf neuesten Werte) angegeben werden.

Sie können Sekunden oder Zeiteinheiten verwenden, um den Zeitraum anzugeben.
Dem Parameter wird ein Rautezeichen vorangestellt, hat er eine andere Bedeutung:

Ausdruck Beschreibung
sum(/host/key,10m) Summe der Werte der letzten 10 Minuten.
sum(/host/key,#10) Summe der letzten zehn Werte.

Parameter mit einem Rautezeichen haben bei der Funktion last eine andere Bedeutung - sie bezeichnen den N-ten vorherigen Wert. Bei den Werten 30, 70, 20, 60, 50 (vom neuesten zum ältesten) gilt daher:

  • last(/host/key,#2) gibt „70“ zurück
  • last(/host/key,#5) gibt „50“ zurück

Der Zeitraum wird bis „jetzt“ gemessen - wobei „jetzt“ der Zeitpunkt der letzten Neuberechnung des Auslösers ist (siehe Berechnungshäufigkeit); „jetzt“ ist nicht der aktuelle Zeitpunkt des Servers.

Der Zeitraum gibt entweder Folgendes an:

  • Alle Werte zwischen „jetzt - Zeitraum“ und „jetzt“ (oder bei angewendetem Zeitversatz zwischen „jetzt - Zeitversatz - Zeitraum“ und „jetzt“).
  • Die angegebene Anzahl von Werten aus der Vergangenheit bis „jetzt“.

Wenn für den angegebenen Auswertungszeitraum keine Daten vorhanden sind, wird der Auslöser oder der berechnete Datenpunkt, der diese Funktion verwendet, nicht unterstützt.

Beachten Sie:

  • Wenn im Auslöser nur eine einzelne Funktion (die auf Datenhistorie verweist) verwendet wird, entspricht „jetzt“ immer dem Zeitpunkt des zuletzt empfangenen Werts. Wenn der letzte Wert beispielsweise vor einer Stunde empfangen wurde, wird der Zeitraum bis zum letzten Wert vor einer Stunde betrachtet.
  • Ein neuer Auslöser wird berechnet, sobald der erste Wert empfangen wird (Historienfunktionen); bei den Funktionen Datum und Uhrzeit und nodata() erfolgt die Berechnung innerhalb von 30 Sekunden. Der Auslöser wird daher berechnet, obwohl der festgelegte Zeitraum (beispielsweise eine Stunde) seit der Erstellung des Auslösers möglicherweise noch nicht verstrichen ist. Der Auslöser wird auch nach dem ersten Wert berechnet, obwohl der Zeitraum beispielsweise auf die zehn neuesten Werte festgelegt wurde.
Zeitverschiebung

Eine optionale Zeitverschiebung wird mit der Zeit- oder Wertanzahl als Funktionsparameter unterstützt. Mit diesem Parameter können Sie auf Daten aus einem vergangenen Zeitraum verweisen.

Die Zeitverschiebung beginnt mit now - zur Angabe der aktuellen Zeit - und wird gefolgt von +N<time unit> oder -N<time unit> - zum Addieren oder Subtrahieren von N Zeiteinheiten.

Beispielsweise gibt avg(/host/key,1h:now-1d) den Durchschnittswert für eine Stunde vor einem Tag zurück.

Eine in Monaten (M) und Jahren (y) angegebene Zeitverschiebung wird nur für Trendfunktionen unterstützt. Andere Funktionen unterstützen Sekunden (s), Minuten (m), Stunden (h), Tage (d) und Wochen (w).

Zeitverschiebung mit absoluten Zeiträumen

Absolute Zeiträume werden im Parameter für die Zeitverschiebung unterstützt, beispielsweise Mitternacht bis Mitternacht für einen Tag, Montag bis Sonntag für eine Woche oder der erste bis zum letzten Tag des Monats für einen Monat.

Die Zeitverschiebung für absolute Zeiträume beginnt mit now - zur Angabe der aktuellen Zeit - und wird von einer beliebigen Anzahl von Zeitoperationen gefolgt: /<time unit> - definiert den Beginn und das Ende der Zeiteinheit, beispielsweise Mitternacht bis Mitternacht für einen Tag, +N<time unit> oder -N<time unit> - zum Addieren oder Subtrahieren von N Zeiteinheiten.

Beachten Sie, dass der Wert der Zeitverschiebung größer oder gleich 0 sein kann, während der Mindestwert des Zeitraums 1 beträgt.

Parameter Beschreibung
1d:now/d Gestern
1d:now/d+1d Heute
2d:now/d+1d Letzte 2 Tage
1w:now/w Letzte Woche
1w:now/w+1w Diese Woche
Andere Ausdrücke

Funktionsparameter können andere Ausdrücke enthalten, wie in der folgenden Syntax:

min(min(/host/key,1h),min(/host2/key2,1h)*10)

Beachten Sie, dass andere Ausdrücke nicht verwendet werden dürfen, wenn die Funktion auf die Datenpunkt-Historie verweist. Zum Beispiel ist die folgende Syntax nicht zulässig:

min(/host/key,#5*10)

Während andere Ausdrücke von Auslösern als Funktionsparameter in Auslösern auf Nicht-Historienfunktionen beschränkt sind, gilt diese Einschränkung nicht für berechnete Datenpunkte.

Operatoren

Die folgenden Operatoren werden für Auslöser unterstützt (in absteigender Ausführungspriorität):

Priorität Operator Definition Hinweise zu unbekannten Werten Operand zwangsweise in Float umwandeln 1
1 - Unäres Minus -Unknown → Unknown Ja
2 not Logisches NICHT not Unknown → Unknown Ja
3 * Multiplikation 0 * Unknown → Unknown
(ja, Unknown, nicht 0 – damit
Unknown bei arithmetischen Operationen
nicht verloren geht)
1.2 * Unknown → Unknown
Ja
/ Division Unknown / 0 → Fehler
Unknown / 1.2 → Unknown
0.0 / Unknown → Unknown
Ja
4 + Arithmetisches Plus 1.2 + Unknown → Unknown Ja
- Arithmetisches Minus 1.2 - Unknown → Unknown Ja
5 < Kleiner als. Der Operator ist wie folgt definiert:

A<B ⇔ (A<B-0.000001)
1.2 < Unknown → Unknown Ja
<= Kleiner oder gleich. Der Operator ist wie folgt definiert:

A<=B ⇔ (A≤B+0.000001)
Unknown <= Unknown → Unknown Ja
> Größer als. Der Operator ist wie folgt definiert:

A>B ⇔ (A>B+0.000001)
Ja
>= Größer oder gleich. Der Operator ist wie folgt definiert:

A>=B ⇔ (A≥B-0.000001)
Ja
6 = Ist gleich. Der Operator ist wie folgt definiert:

A=B ⇔ (A≥B-0.000001) and (A≤B+0.000001)
Nein 1
<> Ist ungleich. Der Operator ist wie folgt definiert:

A<>B ⇔ (A<B-0.000001) or (A>B+0.000001)
Nein 1
7 and Logisches UND 0 and Unknown → 0
1 and Unknown → Unknown
Unknown and Unknown → Unknown
Ja
8 or Logisches ODER 1 or Unknown → 1
0 or Unknown → Unknown
Unknown or Unknown → Unknown
Ja

1 Ein String-Operand wird dennoch in numerisch umgewandelt, wenn:

  • ein anderer Operand numerisch ist
  • ein anderer Operator als = oder <> für einen Operanden verwendet wird

(Falls die Umwandlung fehlschlägt, wird der numerische Operand in einen String-Operanden umgewandelt und beide Operanden werden als Strings verglichen.)

Die Operatoren not, and und or sind case-sensitive und müssen kleingeschrieben werden. Außerdem müssen sie von Leerzeichen oder Klammern umgeben sein.

Alle Operatoren außer dem unären - und not sind linksassoziativ. Das unäre - und not sind nicht assoziativ (das heißt, -(-1) und not (not 1) sollten anstelle von --1 und not not 1 verwendet werden).

Ergebnis der Auswertung:

  • Die Operatoren <, <=, >, >=, =, <> liefern im Auslöser-Ausdruck den Wert '1', wenn die angegebene Relation wahr ist, und '0', wenn sie falsch ist. Wenn mindestens ein Operand Unknown ist, ist das Ergebnis Unknown;
  • and liefert bei bekannten Operanden '1', wenn beide Operanden ungleich '0' sind; andernfalls liefert es '0'; bei unbekannten Operanden liefert and nur dann '0', wenn ein Operand gleich '0' ist; andernfalls liefert es 'Unknown';
  • or liefert bei bekannten Operanden '1', wenn mindestens einer seiner Operanden ungleich '0' ist; andernfalls liefert es '0'; bei unbekannten Operanden liefert or nur dann '1', wenn ein Operand ungleich '0' ist; andernfalls liefert es 'Unknown';
  • Das Ergebnis des logischen Negationsoperators not für einen bekannten Operanden ist '0', wenn der Wert seines Operanden ungleich '0' ist; '1', wenn der Wert seines Operanden gleich '0' ist. Für einen unbekannten Operanden liefert not 'Unknown'.

Unbekannter Ausdruckszustand

Es ist möglich, dass ein unbekannter Operand in einem Auslöserausdruck erscheint, wenn:

  • ein nicht unterstützter Datenpunkt verwendet wird
  • die Funktionsauswertung für einen unterstützten Datenpunkt zu einem Fehler führt

In diesem Fall wird der Auslöserausdruck im Allgemeinen als Unknown ausgewertet (da er nicht ausgewertet werden kann)

Es ist möglich, Benachrichtigungen zu erhalten bei unbekannten Auslösern.

Ausnahmen

Trotz eines unbekannten Operanden können Auslöserausdrücke in einigen Fällen zu einem bekannten Ergebnis (Problem/OK) ausgewertet werden:

  • Die Funktion nodata() wird unabhängig davon ausgewertet, ob der referenzierte Datenpunkt unterstützt wird oder nicht.
  • Ausdrücke mit AND/OR können in zwei Fällen zu einem bekannten Ergebnis ausgewertet werden:
    • Fall 1: "1 or some_function(unsupported_item1) or some_function(unsupported_item2) or ..." wird zu einem bekannten Ergebnis ausgewertet ('1' oder "Problem"),
    • Fall 2: "0 and some_function(unsupported_item1) and some_function(unsupported_item2) and ..." wird zu einem bekannten Ergebnis ausgewertet ('0' oder "OK").
  • Wenn die Funktionsauswertung für einen unterstützten Datenpunkt zu einem Fehler führt, wird der Funktionswert zu Unknown und geht als unbekannter Operand in die weitere Auswertung des Ausdrucks ein.

Unbekannte Operanden können nur in logischen Ausdrücken, wie oben beschrieben, "verschwinden". In arithmetischen Ausdrücken führen unbekannte Operanden immer zu Unknown (außer bei Division durch 0).

Der Zustand eines unbekannten Ausdrucks ändert den Zustand des Auslösers nicht (Problem/OK). Wenn sich der Zustand des Auslösers also im Zustand "Problem" befand (siehe Fall 1), bleibt er im Problemzustand, selbst wenn der bekannte Teil aufgelöst wird ('1' wird zu '0'), da der Ausdruck nun zu Unknown ausgewertet wird und dies den Zustand des Auslösers nicht ändert.

Wenn ein Auslöserausdruck mit mehreren nicht unterstützten Datenpunkten zu Unknown ausgewertet wird, bezieht sich die Fehlermeldung im Frontend auf den zuletzt ausgewerteten nicht unterstützten Datenpunkt.

Wert-Caching

Die für die Auslöserauswertung erforderlichen Werte werden vom Zabbix Server zwischengespeichert. Daher verursacht die Auswertung von Auslösern für einige Zeit nach einem Neustart des Servers eine höhere Datenbanklast.

Der Wert-Cache wird nicht geleert, wenn Verlaufswerte von Datenpunkten entfernt werden (entweder manuell oder durch den Housekeeper), sodass der Server die zwischengespeicherten Werte verwendet, bis sie älter sind als die in Auslöserfunktionen definierten Zeiträume oder der Server neu gestartet wird.

Wenn sich keine aktuellen Daten im Cache befinden und in der Funktion kein Abfragezeitraum definiert ist, greift Zabbix standardmäßig bis zu eine Woche in die Vergangenheit zurück, um historische Werte aus der Datenbank abzufragen.