Zabbix Calculated Items Daten berechnen und zusammenfassen

Daten berechnen und zusammenfassen

Berechnete Items sind virtuelle Datenquellen, die sich aus einem oder mehreren realen Items berechnen. Die aus der Berechnung resultierenden Daten werden in Zabbix als neues Item gespeichert und können dann ohne Unterschied zu anderen Items weiter verarbeitet werden.

Zabbix unterscheidet zwischen zwei Typen von berechneten Items: Calculated Items und Aggregated Items.

Wenn Sie zum Beispiel über die Items vfs.dev.write[,operations] und vfs.dev.read[,operations] die lesenden und die schreibenden IO-Operationen auf den Datenträgern messen, können Sie die beiden Werte mit einem Calculated Item summieren und dann als neues Item vfs.dev.total_iops speichern.

Über ein Calculated Item können Sie auch Funktionen auf Items anwenden, um den Maximalwert oder den Durchschnitt einer Anzahl von Werten als neuen Wert zu speichern. Das eröffnet Ihnen die Möglichkeit, für die neuen berechneten Werte eine eigene Historie zu speichern.

Calculated Items können beliebige Items von beliebigen Hosts als Datenquelle für die Berechnungen haben. Dabei müssen alle Hosts explizit und einzeln angegeben werden.

Aggregated Items hingegen haben immer ein spezielles Item einer Hostgruppe als Datenquelle. So können Sie den gesamten freien Speicher auf allen Hosts einer Gruppe berechnen und als neues Item speichern. Neben Summen stehen noch weitere Funktionen zur Verfügung. Sie können unter anderem den durchschnittlichen Arbeitsspeicherverbrauch einer Hostgruppe berechnen. Die Aggregated Items sind besonders für Cluster interessant, bei denen Sie nicht die Leistung eines Hosts, sondern des Clusters (Hostgruppe) messen möchten. Ebenfalls können Sie in einem Aggregated Item zusammenfassen, wie viele Hosts aus einem Cluster online sind. So können Sie sich zielgerichtet benachrichtigen lassen, erst dann, wenn alle Hosts offline sind.

Calculated Items

Legen Sie ein neues Item an und wählen Sie als Typ "Calculated". Als Key können Sie eine beliebige Zeichenfolge auswählen, die das neue berechnete Item identifiziert.

Im Feld „Formula“ legen Sie fest, wie das Item berechnet werden soll. Dabei muss mindestens ein anderes Item und eine Funktion verwendet werden, auf die die Berechnung angewandt wird. Optional können Items eines speziellen Hosts angegeben werden. Wird kein Host angegeben, wird das Item vom Host oder Template verwendet, für das Sie das Calculated Item anlegen.

Berechnete Items werden nicht in dem Moment berechnet, in dem die Werte der Quell-Items eintreffen. Die Berechnung des neuen Items erfolgt zyklisch. Über das Feld "Update interval" müssen Sie also bestimmen, wann das Item berechnet werden soll.

Achten Sie darauf, Anführungszeichen richtig zu „escapen“. Wenn das Item bereits Anführungszeichen enthält, müssen Sie diesen mit einen Backslash voranstellen. Beispielsweise greifen Sie auf das Item vmware.hv.memory.used["https://{HOST.CONN1}/sdk",{$HV_UUID}] in der Formel für berechnete Items mit der Funktion last("vmware.hv.memory.used[\"https://{HOST.CONN1}/sdk\",{$HV_UUID}]") zu. Die inneren Anführungszeichen müssen escaped werden.

Escapen von Anführungszeichen in Formeln

Beispiel 1: IO-Operationen summieren

vfs.dev.write[,operations] bezieht sich auf den ausgewählten Host oder Template.
Server01:vfs.dev.write[,operations] bezieht die Daten immer aus dem Item von Host "server01". Die zulässigen Funktionen sind dieselben Funktionen, die auch bei der Definition von Triggern verwendet werden (siehe Funktionen im Kapitel Daten bewerten: Trigger einrichten).

Eine der gebräuchlichsten Funktionen ist last(), welches den zuletzt gemessenen Wert eines anderen Items enthält. Der Wert eines anderen Items kann in der Formel nur über eine Funktion ermittelt werden, in der Regel last(). Die Eingabe vfs.dev.write[,operations] wäre unzulässig. Verwenden Sie stattdessen last("vfs.dev.write[,operations]").

Mehrere Kombinationen aus Funktion und Item können mit mathematischen Operanden verbunden werden. Die Summe aller IO-Operationen erhalten Sie mit der Formel last("vfs.dev.write[,operations]")+last("vfs.dev.read[,operations]").

Summieren von zwei Messwerten

Beispiel 2: Prozentuale Bandbreitennutzung berechnen

Das Standard-Item net.if.out[{#IFNAME},bytes] liefert den Datendurchsatz eines Netzwerkadapters in Bytes pro Sekunde, sofern Sie die Daten als „Delta Speed per Second“ speichern. Legen Sie ein globales User-Marko {$NIC_BANDWIDTH_MBPS} an, welchem Sie den Wert 125 zuweisen. Damit legen Sie die maximale Geschwindigkeit der Netzwerkkarten in Megabytes pro Sekunde fest. 125 Megabytes (MB) entsprechen 1 Megabit (Mb). Sollten einige Hosts Netzwerkkarten mit abweichenden Geschwindigkeiten haben, überschreiben Sie den Wert des Makros auf Hostebene.

Legen Sie ein „Calculated Item“ mit folgender Formel an:

last("net.if.out[{#IFNAME},bytes]")/({$NIC_BANDWIDTH_MBPS}*1024*1024)*100

Diese Item berechnet nun die prozentuale Auslastung des Netzwerkadapters. In diesem Beispiel wurde das Item als Prototyp innerhalb einer Discovery-Regel angelegt. Ohne Discovery-Regel ersetzen Sie {#IFNAME} durch den Namen des Netzwerkadapters, beispielsweise eth0.

Berechnung der prozentualen Auslastung eines Netzwerkadapters

Beispiel 3: MySQL-Connection Prozentwerte berechnen

Mit folgendem Beispiel können Sie berechnen, wie viel Prozent der verfügbaren MySQL-Connection verwendet werden last("mysql.status[Max_used_connections]")/last("mysql.variables[max_connections]")*100.

Bei der Eingabe der Formel unterstützt Sie kein Menü oder Assistent. Die Bezeichnung der vorhandenen Items übernehmen Sie am einfachsten per Copy und Paste aus der Liste der konfigurierten Items. Bei der Auswahl des Feldes „Type of information“ sollten Sie darauf achten, dass der Typ durch die Berechnung vom Type des Original-Items abweichen kann. Besonders bei Divisionen und Durchschnittsbildung ergibt sich aus der Berechnung von „Numeric (unsigned)“ ein Item vom Typ „Numeric (float)“.

Aggregated-Items

Aggregated Items fassen die Messwerte eines Items aller Hosts einer Gruppe zusammen. Das Item grpsum["Zabbix-Proxys","vfs.fs.size[/,free]","last","0"] summiert den freien Festplattenplatz aller Hosts aus der Gruppe "Zabbix-Proxys" und speichert das Ergebnis als neues Item. Die Items werden nach folgendem Schema aufgebaut: groupfunc["Host group","Item key","item func","parameter"].
Dabei können Sie die folgenden Gruppenfunktionen (groupfunc) anwenden:

  • grpavg Durchschnittsbildung
  • grpmax/ grpmin Maximal- oder Minimalwert
  • grpsum Summe aller Messwerte

Als Item-Funktionen („item func“) stehen zur Verfügung:

  • avg Durchschnittsbildung
  • count Anzahl der Messwerte
  • last Letzter Messwert
  • max/min Maximal- oder Minimalwert
  • sum Summe der Werte

Über den letzten Parameter geben Sie die Anzahl in Sekunden oder im Fall von last die Anzahl der Messwerte an, auf die die Item-Funktion angewendet wird.

Die Item-Keys von Aggregated-Items sehen beispielsweise wir folgt aus:

  • grpsum["MySQL-Server","vfs.fs.size[/,total]","last","0"]
    Ermittelt den gesamten Festplattenverbrauch alles Server in der Gruppe „MySQL-Server“.
  • grpavg["MySQL-Servers","system.cpu.load[,avg1]","last","0"]
    Ermittelt die durchschnittliche CPU-Auslastung aller MySQL-Server.
  • grpavg["MySQL-Servers","mysql.qps","avg","300"]
    Ermittelt die durchschnittliche Anzahl von Queries innerhalb der letzten fünf Minuten.

Bei Aggregated Items fragt der Zabbix-Server direkt die Datenbank nach den gewünschten Werten ab. Der Check löst also keine weitere Abfrage des Zabbix-Agenten oder anderer Skripte aus. Ein aggregiertes Item können Sie für jeden Host oder jedes Template anlegen. Wenn Sie es für ein Template anlegen, speichern Sie ggf. redundante Daten. Sie haben zum Beispiel die Gruppe „MySQL-Server“, und jeder Host verwendet das Template „MySQL“. Wenn Sie nun für das Template ein aggregiertes Item anlegen, würde für jeden Host der Gruppe ein neues Item angelegt, was zum Beispiel den Gesamtspeicherverbrauch der Gruppe misst.

Oft kann es sinnvoller sein, für die aggregierten Items einen Pseudo-Host anzulegen und nur für diesen Host das aggregierte Item einzurichten. Der Pseudo-Host trägt dann den Namen oder die Bezeichnung eines Clusters oder Verbundes. Das erleichtert auch die spätere Alarmierung. Wenn das Item und ein Trigger in einem Template angelegt werden, dann wird der Trigger für mehrere Hosts auslösen. In der Regel möchten Sie aber nur eine Benachrichtigung erhalten, wenn zum Beispiel die Anzahl der funktionierenden Hosts in einem Cluster einen Minimalwert unterschreitet. Werden Item und Trigger im Template angelegt, erhalten Sie für jeden Host eine Nachricht und die Nachricht enthält den Hostnamen eines einzelnen Hosts und nicht den Namen oder die Bezeichnung des Clusters.

Beispiel Aggregated Item einrichten

Legen Sie einen Host mit dem Namen „Gruppe 1“ an. Dies ist ein Pseudo-Host, der nur die aggregierten Daten speichert. Fügen Sie diesen Host zum Beispiel in die Gruppe „Pseudo-Hosts“ ein. Als IP-Adresse geben Sie 127.0.0.1 ein. Für aggregierte Checks sind keine Verbindungsdaten notwendig, das Feld „IP-Adresse“ darf aber nicht frei bleiben.

Legen Sie nun für den neuen Host „Gruppe 1“ ein neues Item an:

  • Description: Total diskspace used in $1
  • Type: Zabbix aggregated
  • Key: grpsum["Testgruppe","vfs.fs.size[/,used]","last","0"] Wählen Sie als Gruppe eine existierende Gruppe aus. Als Item müssen Sie ein Item wählen, welches für die Mitglieder der Gruppe existiert.
  • Type of information: Numeric Float (Aggregated Items müssen immer Numeric Float sein)
  • Units: B
  • Intervall: Wählen Sie das gleiche oder ein längeres Intervall als bei den zugrunde liegenden Items. Wenn Sie den Festplattenverbauch der Hosts nur alle 3 Minuten messen, hat es keinen Sinn, aus diesen Werten alle 30 Sekunden die Summe zu bilden.
Item, welches den Festplattenverbrauch einer Hostgruppe summiert
Item, welches die Verfügbarkeit einer Hostgruppe berechnet.