7 Berechnete Datenpunkte

Übersicht

Dieser Datenpunkt-Typ ermöglicht es, Berechnungen mit Metriken durchzuführen, die bereits vorhanden sind. Ein berechneter Datenpunkt erfasst selbst keine Daten.

Zum Beispiel möchten Sie möglicherweise:

  • Zwei Werte zählen.
  • Den Durchschnitt mehrerer Datenpunkt-Werte berechnen.
  • Den Gesamtwert für eine Gruppe von Datenpunkten berechnen.

Der resultierende Wert wird wie bei jedem anderen Datenpunkt in der Zabbix-Datenbank gespeichert; sowohl Verlaufs- als auch Trendwerte werden gespeichert, und es können Diagramme erstellt werden.

Die Berechnung basiert auf einer Formel. Die Syntax der Formel ist identisch mit der von Auslöser-Ausdrücken.

Tatsächlich ist es möglich, Auslöser einfach zu halten, indem komplexe Logik zur Datenaufbereitung in einen berechneten Datenpunkt ausgelagert wird — anschließend kann im Auslöser mithilfe des Datenpunkt-Schlüssels auf den berechneten Datenpunkt verwiesen werden.

Es gibt zwei Möglichkeiten, die Datenquelle für Berechnungen anzugeben:

  1. Datenpunkte in der Formel angeben.
  2. Eine Datenaggregation auf Basis eines Filters durchführen, der Datenpunkte auswählt.

Die zweite Option ermöglicht es, Gruppendurchschnitte, Summen usw. zu berechnen.

Alle Berechnungen werden vom Zabbix Server durchgeführt; Proxy oder Agenten sind daran überhaupt nicht beteiligt. Beachten Sie, dass eine intensive Nutzung berechneter Datenpunkte mit langen Zeiträumen die Leistung des Servers beeinträchtigen kann.

Konfigurierbare Felder

Um berechnete Datenpunkte zu verwenden, wählen Sie den Datenpunkttyp Calculated.

Der Schlüssel ist eine eindeutige Datenpunkt-Kennung (pro Host). Sie können einen beliebigen Schlüsselnamen mit unterstützten Symbolen erstellen. Der Schlüssel ermöglicht es, im Auslöser auf den berechneten Datenpunkt zu verweisen.

Die Berechnungsdefinition muss im Feld Formula eingegeben werden.

Es besteht keine Verbindung zwischen der Formel und dem Schlüssel. Die Schlüsselparameter werden in der Formel in keiner Weise verwendet.

Im Gegensatz zu Auslöserausdrücken verarbeitet Zabbix berechnete Datenpunkte entsprechend dem Aktualisierungsintervall des Datenpunkts und nicht beim Empfang eines neuen Werts.

Beachten Sie, dass das Berechnungsergebnis auf eine Ganzzahl gekürzt wird, wenn Sie Numeric (unsigned) als Informationstyp auswählen und das Berechnungsergebnis ein Float-Wert ist.

Formel für einfache Berechnungen

Die Syntax einer einfachen Formel lautet:

function(/host/key,<parameter1>,<parameter2>,...)

Dabei gilt:

Element Beschreibung
function Eine der unterstützten Funktionen: last, min, max, avg, count usw.
host Host des Datenpunkts, der für die Berechnung verwendet wird.
Der aktuelle Host kann weggelassen werden (d. h. wie in function(//key,parameter,...)).
key Schlüssel des Datenpunkts, der für die Berechnung verwendet wird.
Datenpunkte, die Werte mit dem Datentyp Binär oder JSON zurückgeben, werden nicht unterstützt.
Wenn Sie den Datenpunktschlüssel eines referenzierten Datenpunkts ändern, muss der Schlüssel in der Formel manuell aktualisiert werden.
Alle Datenpunkte, auf die von Verlaufsfunktionen verwiesen wird, müssen vorhanden sein und Daten erfassen.
parameter(s) Parameter der Funktion, falls erforderlich.
Zeitsuffixe und Speichergrößensuffixe werden unterstützt.

Eine komplexere Formel kann eine Kombination aus Funktionen, Operatoren und Klammern verwenden.

Siehe Beispiele für Formeln berechneter Datenpunkte:

Einige Variablen können mit Benutzermakros an die Formel übergeben werden. Beachten Sie, dass Benutzermakros:

  • aufgelöst werden - wenn sie verwendet werden, um auf einen Funktionsparameter, einen Datenpunktfilterparameter oder eine Konstante zu verweisen.
  • nicht aufgelöst werden - wenn sie auf eine Funktion, einen Hostnamen, einen Datenpunktschlüssel, einen Datenpunktschlüsselparameter oder einen Operator verweisen.

Der Vergleich mit Zeichenfolgen ist zulässig.

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

Ein berechneter Datenpunkt kann in mehreren Fällen nicht unterstützt werden:

  • referenzierter Datenpunkt
    • wird nicht gefunden
    • ist deaktiviert oder gehört zu einem deaktivierten Host
    • wird nicht unterstützt (außer mit der Funktion nodata() und Operatoren mit unbekannten Werten)
  • keine Daten zur Berechnung einer Funktion
  • Division durch null
  • falsche Syntax verwendet

Datenaggregationen

Datenaggregationen basieren auf einem Filter, der mehrere Datenpunkte auswählt. Datenaggregationen sind ebenfalls ein Typ berechneter Datenpunkte, allerdings verwenden Sie in der Formel eine leicht andere Syntax.

Um Aggregatwerte abzurufen, verwenden Sie eine der unterstützten Aggregatfunktionen: avg, max, min, sum usw. Fügen Sie dann die Funktion foreach als einzigen Parameter sowie ihren Datenpunkt-Filter hinzu, um die erforderlichen Datenpunkte auszuwählen:

aggregate_function(function_foreach(/host/key?[group="host group"],timeperiod))

Eine foreach-Funktion (z. B. avg_foreach, count_foreach usw.) gibt für jeden ausgewählten Datenpunkt einen Aggregatwert zurück. Datenpunkte werden mithilfe des Datenpunkt-Filters (/host/key?[group="host group"]) aus der Datenpunkthistorie ausgewählt. Weitere Details finden Sie unter foreach functions.

Wenn einige der Datenpunkte für den angeforderten Zeitraum keine Daten haben, werden sie bei der Berechnung ignoriert. Wenn keine Datenpunkte Daten haben, gibt die Funktion einen Fehler zurück.

Alternativ können Sie mehrere Datenpunkte als Parameter für die Aggregation auflisten:

aggregate_function(function(/host/key,parameter),function(/host2/key2,parameter),...)

Beachten Sie, dass function hier eine Verlaufs-/Trendfunktion sein muss.

Siehe Beispiele für Aggregatberechnungen:

Benutzermakros und Low-Level-Discovery-Makros werden unterstützt in:

  • Datenpunktschlüsselparametern
  • Funktionsparametern
  • Filterbedingungen (Name der Host-Gruppe und Tag-Name)
  • Ausdruckskonstanten

Eine Aggregatberechnung kann nicht unterstützt werden, wenn:

  • keiner der referenzierten Datenpunkte gefunden wird (was passieren kann, wenn der Datenpunktschlüssel falsch ist, keiner der Datenpunkte existiert oder alle einbezogenen Gruppen falsch sind)
  • keine Daten zur Berechnung einer Funktion vorhanden sind

Beispiele für berechnete Datenpunkte

(1) Gesamter Datenverkehr auf der Schnittstelle
last(//net.if.in[eth0,bytes])+last(//net.if.out[eth0,bytes])

Berechnet die gesamte Bandbreite auf eth0.

(2) Prozentsatz des freien Festplattenspeichers
100*last(//vfs.fs.size[/,free])/last(//vfs.fs.size[/,total])

Zabbix verwendet die neuesten Werte für freien und gesamten Festplattenspeicher (auf /) und berechnet den Prozentsatz gemäß der angegebenen Formel.

(3) Prozentsatz des eingehenden Datenverkehrs
100*last(//net.if.in[eth0,bytes])/(last(//net.if.in[eth0,bytes])+last(//net.if.out[eth0,bytes]))

Berechnet den Prozentsatz des eingehenden Datenverkehrs am gesamten Datenverkehr.

(4) Durchschnittliche Anzahl verarbeiteter Werte
avg(/Zabbix server/zabbix[wcache,values],10m)

Berechnet einen 10-Minuten-Durchschnitt der Anzahl der von Zabbix verarbeiteten Werte.

(5) Gesamter eingehender Datenverkehr für den Host
sum(last_foreach(/host/net.if.in[*]))

Berechnet die Summe aller Datenpunkte, die net.if.in[*] auf dem Host entsprechen.

(6) Gesamter Festplattenspeicher für Gruppe
sum(last_foreach(/*/vfs.fs.size[/,total]?[group="MySQL Servers"]))

Berechnet den gesamten Festplattenspeicher für alle MySQL Servers.

(7) Durchschnittliche Prozessorlast für Gruppe
avg(last_foreach(/*/system.cpu.load[,avg1]?[group="MySQL Servers"]))

Berechnet die durchschnittliche Prozessorlast für alle MySQL Servers.

(8) Durchschnittliche Prozessorlast für Gruppe und Tag
avg(last_foreach(/*/system.cpu.load?[(group="Servers A" or group="Servers B" or group="Servers C") and (tag="Service:" or tag="Importance:High")]))

Berechnet die durchschnittliche CPU-Last auf allen Hosts in mehreren Host-Gruppen, die bestimmte Tags haben.

(9) Durchschnittliche Anzahl von Abfragen für Gruppe
avg(avg_foreach(/*/mysql.qps?[group="MySQL Servers"],5m))

Berechnet den 5-Minuten-Durchschnitt der Anzahl von Abfragen pro Sekunde für MySQL Servers.

(10) Gesamtzahl erfolgreicher DNS-Prüfungen
sum(last_foreach(/*/net.dns[*,*,*]))

Berechnen Sie die Gesamtzahl erfolgreicher DNS-Prüfungen über alle Hosts hinweg. Die angezeigte Form des Datenpunkts ist net.dns[192.0.2.0,example.com,A] als Beispiel für einen möglichen Schlüssel.

Beachten Sie, dass Platzhalter mit der Anzahl der Parameter im Schlüssel übereinstimmen müssen (hier hat net.dns drei Parameter: ip, name, type).

(11) Gesamtzahl der nicht unterstützten Datenpunkte für die Gruppe
sum(last_foreach(/*/zabbix[host,,items_unsupported]?[group="Zabbix servers"]))

Berechnet die Gesamtzahl der nicht unterstützten Datenpunkte für Zabbix servers.

(12) Schnittstellenstatistiken für Gruppe
sum(last_foreach(/*/net.if.out[eth0,bytes]?[group="video"])) / sum(last_foreach(/*/nginx_stat.sh[active]?[group="video"])) 

Berechnet die Schnittstellenstatistiken für die Gruppe video.

Beispiele für korrekte/inkorrekte Syntax

Ausdrücke (einschließlich Funktionsaufrufen) können nicht als Parameter für Verlaufs-, Trend- oder foreach-Funktionen verwendet werden. Diese Funktionen selbst können jedoch in anderen (nicht historischen) Funktionsparametern verwendet werden.

Ausdruck Beispiel
Gültig avg(last(/host/key1),last(/host/key2)*10,last(/host/key1)*100)

max(avg(avg_foreach(/*/system.cpu.load?[group="Servers A"],5m)),avg(avg_foreach(/*/system.cpu.load?[group="Servers B"],5m)),avg(avg_foreach(/*/system.cpu.load?[group="Servers C"],5m)))
Ungültig sum(/host/key,10+2)

sum(/host/key, avg(10,2))

sum(/host/key,last(/host/key2))

Beachten Sie, dass bei einem Ausdruck wie diesem:

sum(sum_foreach(//resptime[*],5m))/sum(count_foreach(//resptime[*],5m))

nicht garantiert werden kann, dass beide Teile der Gleichung immer dieselbe Wertemenge haben. Während ein Teil des Ausdrucks ausgewertet wird, kann ein neuer Wert für den angeforderten Zeitraum eintreffen, und dann hat der andere Teil des Ausdrucks eine andere Wertemenge.