Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Ausdrucksabfragen schreiben
Dieses Dokumentationsthema wurde für Grafana-Workspaces entwickelt, die Grafana-Version 10.x unterstützen.
Informationen zu Grafana-Arbeitsbereichen, die Grafana-Version 9.x unterstützen, finden Sie unter. Arbeitet in Grafana-Version 9
Informationen zu Grafana-Arbeitsbereichen, die Grafana-Version 8.x unterstützen, finden Sie unter. Arbeitet in Grafana-Version 8
Mit serverseitigen Ausdrücken können Sie Daten, die von Abfragen zurückgegeben werden, mit mathematischen und anderen Operationen bearbeiten. Ausdrücke erzeugen neue Daten und manipulieren nicht die von Datenquellen zurückgegebenen Daten.
Über Ausdrücke
Serverseitige Ausdrücke ermöglichen es Ihnen, Daten, die von Abfragen zurückgegeben werden, mit mathematischen und anderen Operationen zu bearbeiten. Ausdrücke erzeugen neue Daten und manipulieren nicht die von Datenquellen zurückgegebenen Daten, abgesehen von einigen geringfügigen Datenumstrukturierungen, um die Daten als Eingabe für Ausdrücke akzeptabel zu machen.
Verwendung von Ausdrücken
Ausdrücke werden am häufigsten von Grafana-Benachrichtigungen verwendet. Die Verarbeitung erfolgt serverseitig, sodass Ausdrücke auch ohne Browsersitzung ausgeführt werden können. Ausdrücke können jedoch auch mit Backend-Datenquellen und Visualisierungen verwendet werden.
Anmerkung
Ausdrücke funktionieren nicht mit älteren Dashboard-Warnungen.
Ausdrücke sollen Datenquellen erweitern, indem sie die Kombination von Abfragen aus verschiedenen Datenquellen ermöglichen oder Operationen bereitstellen, die in einer Datenquelle nicht verfügbar sind.
Anmerkung
Wenn möglich, sollten Sie die Datenverarbeitung innerhalb der Datenquelle durchführen. Das Kopieren von Daten aus dem Speicher auf den Grafana-Server zur Verarbeitung ist ineffizient, daher sind Ausdrücke auf die einfache Datenverarbeitung ausgerichtet.
Ausdrücke funktionieren mit Datenquellenabfragen, die Zeitreihen oder numerische Daten zurückgeben. Sie arbeiten auch mit mehrdimensionalen Daten. Zum Beispiel eine Abfrage, die mehrere Reihen zurückgibt, wobei jede Serie durch Beschriftungen oder Tags identifiziert wird.
Ein einzelner Ausdruck verwendet eine oder mehrere Abfragen oder andere Ausdrücke als Eingabe und fügt dem Ergebnis Daten hinzu. Jeder einzelne Ausdruck oder jede einzelne Abfrage wird durch eine Variable repräsentiert, bei der es sich um einen benannten Bezeichner handelt, der als RefID bezeichnet wird (z. B. der Standardbuchstabe A
oderB
).
Um auf die Ausgabe eines einzelnen Ausdrucks oder einer Datenquellenabfrage in einem anderen Ausdruck zu verweisen, wird dieser Bezeichner als Variable verwendet.
Arten von Ausdrücken
Ausdrücke funktionieren mit zwei Datentypen.
-
Eine Sammlung von Zeitreihen.
-
Eine Sammlung von Zahlen, wobei jede Zahl ein Element ist.
Jede Sammlung wird anhand einer einzelnen Datenquellenabfrage oder eines einzelnen Ausdrucks zurückgegeben und durch die RefID dargestellt. Jede Sammlung ist ein Satz, bei dem jedes Element in der Gruppe anhand seiner Dimensionen, die als Labels oder Schlüssel-Wert-Paare gespeichert sind, eindeutig identifiziert wird.
Datenquellenabfragen
Serverseitige Ausdrücke unterstützen nur Datenquellenabfragen für Backend-Datenquellen. Es wird allgemein davon ausgegangen, dass es sich bei den Daten um Zeitreihendaten handelt.
Datenquellenabfragen werden, wenn sie mit Ausdrücken verwendet werden, von der Expression Engine ausgeführt. Dabei werden die Daten so umstrukturiert, dass sie entweder eine Zeitreihe oder eine Zahl pro Datenrahmen enthalten. Wenn Sie also beispielsweise eine Datenquelle verwenden, die mehrere Reihen in einem Frame in der Tabellenansicht zurückgibt, stellen Sie möglicherweise fest, dass sie anders aussieht, wenn sie mit Ausdrücken ausgeführt wird.
Derzeit wird bei der Verwendung von Datenrahmen nur das Format (Zahl) unterstützt, das kein Zeitreihenformat ist, wenn Sie eine Tabellenantwort haben, die einen Datenrahmen ohne Zeit, Zeichenkettenspalten und eine Zahlenspalte zurückgibt:
Die folgende Beispieltabelle erzeugt eine Zahl, die mit Ausdrücken funktioniert. Die Zeichenkettenspalten werden zu Beschriftungen und die Zahlenspalte zum entsprechenden Wert. Zum Beispiel {"Loc": "MIA", "Host": "A"}
mit einem Wert von 1.
Loc | Host | AVG_CPU |
---|---|---|
MIA |
A |
1 |
NYC |
B |
2 |
Operationen
Sie können die folgenden Operationen in Ausdrücken verwenden: Mathe, Reduce und Resampling.
Math (Mathematik)
Mathe steht für frei formbare mathematische Formeln für Zeitreihen oder Zahlendaten. Bei mathematischen Operationen werden Zahlen und Zeitreihen als Eingabe verwendet und in andere Zahlen und Zeitreihen umgewandelt.
Auf Daten aus anderen Abfragen oder Ausdrücken wird beispielsweise mit der RefID verwiesen, der ein Dollarzeichen vorangestellt ist. $A
Wenn der Name der Variablen Leerzeichen enthält, können Sie eine geschweifte Syntax wie verwenden. ${my
variable}
Numerische Konstanten können dezimal (2.24
), oktal (mit einer führenden Null wie072
) oder hexadezimal (mit einem führenden 0x wie) sein. 0x2A
Exponentialzahlen und Vorzeichen werden ebenfalls unterstützt (z. B.). -0.8e-2
Operatoren
Die arithmetischen (+
, binären und unären-
,,*
, /
%
, Exponenten**
), relationalen (,,<
,, >
==
,<=
) und logischen (!=
>=
, &&
||
, und !
unären) Operatoren werden unterstützt.
Wie sich die Operation mit Daten verhält, hängt davon ab, ob es sich um Zahlen- oder Zeitreihendaten handelt.
Bei binären Operationen wie $A + $B
oder $A || $B
wird der Operator je nach Datentyp wie folgt angewendet:
-
Wenn beide
$A
und eine Zahl$B
sind, wird die Operation zwischen den beiden Zahlen ausgeführt. -
Wenn eine Variable eine Zahl und die andere Variable eine Zeitreihe ist, wird die Operation zwischen dem Wert jedes Punktes in der Zeitreihe und der Zahl ausgeführt.
-
Wenn es sich bei beiden
$A
um Zeitreihendaten$B
handelt, wird die Operation zwischen den einzelnen Werten in den beiden Reihen für jeden Zeitstempel ausgeführt, der$A
sowohl in als auch vorhanden ist$B
. DieResample
Operation kann verwendet werden, um Zeitstempel anzuordnen.
Zusammenfassung:
-
Zahl <Operation>Zahl = Zahl
-
<Operation>Zahlenreihe = Serie
-
Serie <Operation>Serie = Serie
Da Ausdrücke mit mehreren Reihen oder Zahlen arbeiten, die durch eine einzige Variable repräsentiert werden, führen binäre Operationen auch eine Vereinigung (Verknüpfung) zwischen den beiden Variablen durch. Dies erfolgt auf der Grundlage der identifizierenden Bezeichnungen, die jeder einzelnen Reihe oder Zahl zugeordnet sind.
Wenn Sie also Zahlen mit Beschriftungen wie {host=web01}
in $A
und eine weitere Zahl $B
mit denselben Beschriftungen haben, wird die Operation zwischen diesen beiden Elementen innerhalb jeder Variablen ausgeführt, und das Ergebnis verwendet dieselben Beschriftungen. Die Regeln für das Verhalten dieser Vereinigung lauten wie folgt:
-
Ein Objekt ohne Beschriftungen lässt sich mit allem verbinden.
-
Wenn beide
$A
nur ein Objekt enthalten (eine Serie oder eine Zahl), werden sie zusammengefügt.$B
-
Wenn die Beschriftungen exakt übereinstimmen, werden sie zusammengefügt.
-
Wenn es sich bei den Beschriftungen um eine Teilmenge der anderen handelt, z. B. wenn ein Element in beschriftet
$A
ist{host=A,dc=MIA}
und ein Element in beschriftet$B
ist, werden{host=A}
sie zusammengefügt. -
Wenn innerhalb einer Variablen beispielsweise für jedes Element unterschiedliche Tag-Schlüssel
$A
vorhanden sind, ist das Verbindungsverhalten undefiniert.
Die relationalen und logischen Operatoren geben 0 für falsch und 1 für wahr zurück.
Mathematische Funktionen
Während die meisten Funktionen in eigenen Ausdrucksoperationen existieren, hat die mathematische Operation einige Funktionen, die mathematischen Operatoren oder Symbolen ähneln. Wenn Funktionen entweder Zahlen oder Reihen annehmen können, wird derselbe Typ wie das Argument zurückgegeben. Handelt es sich um eine Reihe, wird die Operation für den Wert jedes Punktes in der Reihe ausgeführt.
Bauchmuskeln
abs gibt den absoluten Wert seines Arguments zurück, der eine Zahl oder eine Reihe sein kann. Zum Beispiel abs(-1)
oder abs($A)
.
is_inf
is_inf nimmt eine Zahl oder eine Reihe und gibt 1
für Inf
Werte (negativ oder positiv) und 0
für andere Werte zurück. Zum Beispiel is_inf($A)
.
Anmerkung
Wenn Sie beispielsweise gezielt nach negativer Unendlichkeit suchen müssen, können Sie einen Vergleich wie durchführen. $A == infn()
is_nan
is_nan nimmt eine Zahl oder eine Reihe und gibt 1
für NaN
Werte und 0
für andere Werte zurück. Zum Beispiel is_nan($A)
. Diese Funktion ist für diese Prüfung erforderlich, da sie nicht gleich NaN
ist. NaN
is_null
is_null nimmt eine Zahl oder eine Reihe und gibt 1
für null
Werte und 0
für andere Werte zurück. Zum Beispiel is_null($A)
.
ist_Zahl
is_number nimmt eine Zahl oder eine Reihe und gibt 1
für alle reellen Zahlenwerte und 0
für andere Werte (dienull
,Inf+
, Inf-
und sind) zurück. NaN
Zum Beispiel is_number($A)
.
log
Log gibt den natürlichen Logarithmus seines Arguments zurück, der eine Zahl oder eine Reihe sein kann. Wenn der Wert kleiner als 0 ist, NaN
wird zurückgegeben. Zum Beispiel log(-1)
oder log($A)
.
inf, infn, nan und null
Die Funktionen inf, infn, nan und null geben alle einen einzelnen Wert des Namens zurück. Sie existieren hauptsächlich zum Testen. Beispiel: null()
.
round
Round gibt einen gerundeten Ganzzahlwert zurück. Zum Beispiel round(3.123)
oder round($A)
.
ceil
Ceil rundet die Zahl auf den nächsten ganzzahligen Wert auf. Beispielsweise gibt ceil(3.123)
4
zurück.
floor
Floor rundet die Zahl auf den nächsten ganzzahligen Wert ab. Beispiel:floor(3.123
) gibt zurück3
.
Reduzieren
Reduce verwendet eine oder mehrere Zeitreihen, die von einer Abfrage oder einem Ausdruck zurückgegeben wurden, und wandelt jede Reihe in eine einzelne Zahl um. Die Beschriftungen der Zeitreihen werden als Beschriftungen für jede ausgegebene reduzierte Zahl beibehalten.
Felder:
-
Funktion — Die zu verwendende Reduktionsfunktion
-
Eingabe — Die Variable (RefID (z. B.
A
)), die neu berechnet werden soll -
Modus — Ermöglicht die Steuerung des Verhaltens der Reduktionsfunktion, wenn eine Reihe nicht numerische Werte enthält (Null, NaN, +-Inf)
Reduktionsfunktionen
Count
Count gibt die Anzahl der Punkte in jeder Reihe zurück.
Mittelwert
Der Mittelwert gibt die Summe aller Werte in jeder Reihe geteilt durch die Anzahl der Punkte in dieser Reihe zurück. Wenn im strict
Modus irgendwelche Werte in der Reihe Null oder Nan sind oder wenn die Reihe leer ist, wird NaN zurückgegeben.
Min und Max
Min und Max geben den kleinsten bzw. größten Wert in der Reihe zurück. Wenn im strict
Modus irgendwelche Werte in der Reihe Null oder Nan sind oder wenn die Reihe leer ist, wird NaN zurückgegeben.
Sum (Summe)
Sum gibt die Summe aller Werte in der Reihe zurück. Wenn die Reihe die Länge Null hat, ist die Summe 0. Wenn im strict
Modus NaN- oder Nullwerte in der Reihe vorhanden sind, wird NaN zurückgegeben.
Zuletzt
Last gibt die letzte Zahl in der Reihe zurück. Wenn die Serie keine Werte hat, wird NaN zurückgegeben.
Reduktionsmodi
Streng
Im Strict-Modus wird die Eingangsserie unverändert verarbeitet. Wenn Werte in der Reihe nicht numerisch sind (Null, NaN oder +-Inf), wird NaN zurückgegeben.
Löschen Sie nicht-numerische Werte
In diesem Modus werden alle nicht numerischen Werte (Null, NaN oder +-Inf) in der Eingangsserie herausgefiltert, bevor die Reduktionsfunktion ausgeführt wird.
Ersetzt nicht-numerisch
In diesem Modus werden alle nicht numerischen Werte durch einen vordefinierten Wert ersetzt.
Stichprobe neu berechnen
Bei Resampling werden die Zeitstempel in jeder Zeitreihe so geändert, dass ein konsistentes Zeitintervall entsteht. Der Hauptanwendungsfall besteht darin, dass Sie Zeitreihen, die nicht dieselben Zeitstempel haben, neu berechnen können, sodass Berechnungen zwischen ihnen durchgeführt werden können. Dies kann erreicht werden, indem jede der beiden Serien neu berechnet wird, und dann in einer mathematischen Operation auf die neu abgetasteten Variablen verwiesen wird.
Felder:
-
Eingabe — Die Variable der Zeitreihendaten (RefID (z. B.
A
)), die neu berechnet werden sollen -
Resampling to — Die Zeitdauer, für die beispielsweise das Resampling durchgeführt werden soll.
10s
Einheiten könnens
Sekunden,m
Minuten,h
Stunden,d
Tage,w
Wochen undy
Jahre sein. -
Downsample — Die Reduktionsfunktion, die verwendet werden soll, wenn pro Fensterstichprobe mehr als ein Datenpunkt vorhanden ist. Einzelheiten zum Verhalten finden Sie in der Reduktionsoperation.
-
Upsample — Die Methode, die verwendet werden soll, um eine Fensterprobe ohne Datenpunkte zu füllen.
-
Das Pad füllt mit dem letzten bekannten Wert
-
mit dem nächsten bekannten Wert auffüllen
-
fillna zum Füllen leerer Beispielfenster mit NaNs
-
Schreiben Sie einen Ausdruck
Wenn Ihre Datenquelle sie unterstützt, zeigt Grafana die Schaltfläche Ausdruck und alle vorhandenen Ausdrücke in der Liste des Abfrage-Editors an.
Um einen Ausdruck zu schreiben
-
Öffnen Sie das Panel.
-
Wählen Sie unter der Abfrage Expression aus.
-
Wählen Sie im Feld Operation den Ausdruckstyp aus, den Sie schreiben möchten.
-
Schreiben Sie den Ausdruck.
-
Wählen Sie Apply (Anwenden) aus.
Sonderfälle
Wenn eine abgefragte Datenquelle keine Reihen oder Zahlen zurückgibt, gibt die Expression Engine zurück. NoData
Wenn eine Anforderung beispielsweise zwei Datenquellenabfragen enthält, die durch einen Ausdruck zusammengeführt werden, und wenn sie von mindestens einer der Datenquellenabfragen zurückgegeben wird, dann NoData
ist das zurückgegebene Ergebnis für die gesamte Abfrage. NoData
Weitere Informationen darüber, wie Grafana Alerting NoData
Ergebnisse verarbeitet, finden Sie unter. Konfigurieren Sie die verwalteten Warnungsregeln von Grafana
Wenn ein Ausdruck für mehrere Abfragen verwendet wird, verlangt die Expression Engine, dass alle Abfragen einen identischen Zeitstempel zurückgeben. Wenn Sie beispielsweise mathematische Berechnungen verwenden, um das Ergebnis mehrerer SQL-Abfragen zu kombinieren, die jeweils verwendet werdenSELECT NOW() AS "time"
, funktioniert der Ausdruck nur, wenn alle Abfragen einen identischen Zeitstempel ergeben, was nicht immer der Fall ist. NOW()
Um dieses Problem zu lösen, können Sie es durch einen beliebigen Zeitstempel NOW()
ersetzen, z. B. SELECT 1 AS "time"
oder durch einen anderen gültigen UNIX-Zeitstempel.