4.3.7 Lange Betrachtungszeiträume / Grafana Performance

Beschreibung: Parametrierung für die Darstellung langer Zeiträume und optimierte Performance

Kategorie: Grafana

Link zu diesem Beitrag: Alles auswählen

[url=https://forum.timberwolf.io/app.php/kb/viewarticle?a=16&sid=06197214fd741235df9568b30a03171f]Knowledge Base - 4.3.7 Lange Betrachtungszeiträume / Grafana Performance[/url]

Im folgenden Abschnitt sollen einige Einstellungen beschrieben werden, die sowohl die Datenbankauswertung als auch die Darstellung positiv beeinflussen können. Dies gilt im Besonderen für lange Betrachtungszeiträume mit mehreren Tausend Datensätzen, bei wenigen Datensätzen kann durch die Mittelung eine Verfälschung der Anzeige erfolgen!

Folgende beiden Einstellungen werden weiter unten näher beschrieben:
  • [nur "field(Val)"]
  • ["field(Val)"] mit Group [mean() + time($__interval)]
Ein guter Check, wie viele Datensätze angefordert wurden, ist mit dem eingebauten "Query Inspector" möglich.
Dabei bitte folgende Struktur aufklappen: "response" -> "result" -> .... -> "values" (siehe Abbildung unten).
Hier sieht man schnell wie groß das Array ist, das zurück geschickt wurde.

Um diese Datenmenge zu reduzieren, gibt es die Möglichkeit, die Daten vor dem Senden zu "aggregieren", d.h. zusammenzufassen.
Die meist gebrauchte Aggregation ist wohl der Durchschnitt (mean) über einen Zeitabschnitt (time($__interval)) (siehe Abbildung unten).
Worauf man hier achten muss, ist die Fülloption, mit der man einstellt, was geschickt wird, wenn es in einem Zeitintervall keine Daten gibt.
Empfohlen wird hier meist "none", bei "null" verschwinden manchmal die Linien im Grafen.

Bild


Beide Varianten --- mit und ohne mean() + time(interval) --- haben ihre Vor- und Nachteile:
  • [nur "field(Val)"]:
    Bei der Variante ohne alles werden sämtliche Werte mit ihrem jeweiligen Zeitstempel im entsprechenden Zeitraum zurückgeliefert.
    Dabei entspricht sowohl der Wert, als auch der Zeitstempel (auf die Millisekunde genau) eine einzelne Messung, bzw. einem einzelnen Telegramm.
  • ["field(Val)"] mit [mean() + time($__interval)]:
    Hier teilt Grafana den Gesamtabfragezeitraum in Intervalle auf (bei einem Jahr ist das Intervall 6h, glaube ich).
    Alle Werte in einem Intervall werden gemittelt und dieser Mittelwert bekommt den Zeitstempel des Intervallanfangs.
    Als Ergebnis bekommt man dann alle Mittelwerte mt ihren Zeitstempeln zurück geliefert.
Damit erahnt man auch schon wo die Vor- und Nachteile der jeweiligen Variante liegen:
  • Bei der ersten Variante bekommt man die "echten" Werte (eventuell sehr viele davon), bei "mean()..." sind die Werte bearbeitet.
  • Bei "mean()..." kann es durch weitere Einstellungen, z.B. fill(null), dazu kommen, dass man im Grafen keine Linie sieht, obwohl auch keine Meldung "No data points" erscheint.
    Bei der ersten Variante passiert das nicht, ausser es ist wirklich nur ein Wert im gesamten Zeitraum gespeichert.
Je nachdem, wie die Daten zeitlich liegen und wie groß das Betrachtungsfenster liegt, ist mal die eine oder andere Variante besser.

Beim Info-Button am TWS ist die Variante "Ohne" beschrieben, da hier die Gefahr, gar nichts zu sehen, deutlich geringer ist. Allerdings ergibt sich damit gegebenenfalls eine kurze Wartezeit.

Hinweis: Siehe auch die Diskussion in folgendem Thread: viewtopic.php?f=26&t=198&p=1404#p1404