3 Auslöserausdruck
Ü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:
- Auslöserbeispiele
- Problemerkennung mit Auslösern (allgemeine Einführung)
Funktionen
Mit Funktionen können erfasste Werte analysiert werden, zum Beispiel zur Berechnung des Durchschnitts oder zum Finden einer bestimmten Zeichenfolge.
Klicken Sie auf die jeweilige 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, last, lastclock, logeventid, logseverity, logsource, logtimestamp, monodec, monoinc, nodata, percentile, rate | |
| 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, insert, jsonpath, left, length, ltrim, mid, repeat, replace, right, rtrim, trim, xmlxpath | |
Sofern nicht anders angegeben, werden diese Funktionen unterstützt in:
Foreach-Funktionen werden nur für Aggregatberechnungen unterstützt.
Typischerweise geben Funktionen numerische Werte zum Vergleich zurück. Wenn Zeichenfolgen zurückgegeben werden, ist ein Vergleich mit den Operatoren = und <> möglich (siehe Beispiel Nicht übereinstimmende Software auf verschiedenen Hosts erkennen).
Funktionsparameter
Mit Funktionsparametern kann Folgendes angegeben werden:
- Datenpunktschlüssel (als
/Host/Schlüssel) für Funktionen, die auf den Verlauf eines Host-Datenpunkts verweisen - Zeitraum (und andere 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:
- dem Feld Ereignisname
- dem Diagrammnamen
- der Beschriftung von „Host“- und „Auslöser“- Kartenelementen
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.
Zeitperiode
Funktionsspezifische Parameter werden nach dem Datenpunktschlüssel platziert und durch ein Komma vom Datenpunktschlüssel getrennt.
Die meisten numerischen Funktionen akzeptieren Zeitperiode als Parameter. Damit kann das Intervall angegeben werden, für das wir uns interessieren. Es kann als Zeitperiode (30s, 10m, 1h) oder als Wertebereich (#5 - für die fünf neuesten Werte) angegeben werden.
Sie können Sekunden oder Zeitsuffixe verwenden, um die Zeitperiode anzugeben. Wenn dem Parameter eine Raute vorangestellt ist, hat er eine andere Bedeutung:
| Expression | Description |
|---|---|
| sum(/host/key,10m) | Summe der Werte in den letzten 10 Minuten. |
| sum(/host/key,#10) | Summe der letzten zehn Werte. |
Parameter mit einer Raute 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 also:
last(/host/key,#2)würde '70' zurückgebenlast(/host/key,#5)würde '50' zurückgeben
Die Zeitperiode wird bis zu „jetzt“ gemessen - wobei „jetzt“ der Zeitpunkt der letzten Neuberechnung des Auslösers ist (siehe Berechnungshäufigkeit); „jetzt“ ist nicht die „jetzt“-Zeit des Servers.
Die Zeitperiode gibt entweder Folgendes an:
- Es werden alle Werte zwischen „jetzt-Zeitperiode“ und „jetzt“ berücksichtigt (oder bei Zeitverschiebung zwischen „jetzt-Zeitverschiebung-Zeitperiode“ und „jetzt-Zeitverschiebung“)
- Es werden nicht mehr als die num Anzahl von Werten aus der Vergangenheit berücksichtigt, bis
zu „jetzt“
- Wenn für die angegebene Zeitperiode oder num Anzahl 0 Werte verfügbar sind, wird der Auslöser oder berechnete Datenpunkt, der diese Funktion verwendet, nicht unterstützt
Beachten Sie:
- Wenn im Auslöser nur eine einzelne Funktion (die auf den Datenverlauf verweist) verwendet wird, ist „jetzt“ immer der zuletzt empfangene Wert. Wenn beispielsweise der letzte Wert vor einer Stunde empfangen wurde, wird die Zeitperiode so betrachtet, dass sie bis zum letzten Wert vor einer Stunde reicht.
- Ein neuer Auslöser wird berechnet, sobald der erste Wert empfangen wird (Verlaufsfunktionen); für Funktionen zu Datum und Uhrzeit und nodata() erfolgt die Berechnung innerhalb von 30 Sekunden. Somit wird der Auslöser auch dann berechnet, obwohl die festgelegte Zeitperiode (zum Beispiel eine Stunde) seit der Erstellung des Auslösers möglicherweise noch nicht verstrichen ist. Der Auslöser wird auch nach dem ersten Wert berechnet, selbst wenn der Zeitbereich beispielsweise auf die zehn neuesten Werte gesetzt wurde.
Zeitverschiebung
Eine optionale Zeitverschiebung wird mit Zeit- oder Wertanzahl als Funktionsparameter unterstützt. Dieser Parameter ermöglicht es, auf Daten aus einem vergangenen Zeitraum zu verweisen.
Die Zeitverschiebung beginnt mit now – zur Angabe der aktuellen Zeit – und wird gefolgt von +N<time unit> oder -N<time unit>, um N Zeiteinheiten zu addieren oder zu subtrahieren.
Zum Beispiel 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, zum Beispiel Mitternacht bis Mitternacht für einen Tag, Montag bis Sonntag für eine Woche, erster Tag bis letzter Tag des Monats für einen Monat.
Die Zeitverschiebung für absolute Zeiträume beginnt mit now – zur Angabe der aktuellen Zeit – und wird gefolgt von einer beliebigen Anzahl von Zeitoperationen: /<time unit> definiert den Anfang und das Ende der Zeiteinheit, zum Beispiel Mitternacht bis Mitternacht für einen Tag; +N<time unit> oder -N<time unit> dienen dazu, N Zeiteinheiten zu addieren oder zu subtrahieren.
Bitte beachten Sie, dass der Wert der Zeitverschiebung größer oder gleich 0 sein kann, während der Mindestwert des Zeitraums 1 ist.
| 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öser-Ausdruck 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öser-Ausdruck im Allgemeinen zu Unknown ausgewertet (da er nicht ausgewertet werden kann)
Es ist möglich, bei unbekannten Auslösern benachrichtigt zu werden.
Ausnahmen
Trotz eines unbekannten Operanden können Auslöser-Ausdrü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“).
- Fall 1: „
- Wenn die Funktionsauswertung für einen unterstützten Datenpunkt zu einem Fehler führt, wird der Funktionswert zu
Unknownund nimmt als unbekannter Operand an der weiteren Auswertung des Ausdrucks teil.
Unbekannte Operanden können nur in logischen Ausdrücken „verschwinden“, wie oben beschrieben.
In arithmetischen Ausdrücken führen unbekannte Operanden immer zu Unknown (außer bei Division durch 0).
Der unbekannte Ausdruckszustand ändert den Auslöser-Zustand (Problem/OK) nicht.
Wenn der Auslöser-Zustand also „Problem“ war (siehe Fall 1), bleibt er im Problemzustand, selbst wenn der bekannte Teil behoben wird ('1' wird zu '0'), weil der Ausdruck jetzt zu Unknown ausgewertet wird und das den Auslöser-Zustand nicht ändert.
Wenn ein Auslöser-Ausdruck 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.