7.2 Zeitreihen

Inhalt

Intro

Im vorherigen Kapitel hast du eine erste Übersicht übers Monitoring erhalten und den grundlegenden Unterschied zwischen check- und metrikenbasierten Systemen gelernt. Auf die checkbasierten Systeme werden wir nicht weiter eingehen, der Rest dieses Labs dreht sich ausschliesslich um metrikenbasierte Systeme. Um diese Systeme zu verstehen, brauchen wir ein grundlegendes Verständnis über Zeitreihen (Time Series).

Was sind Zeitreihen

Um Zeitreihen zu verstehen, machen wir ein kleines Gedankenexperiment:

Wir möchten die aktuelle Temperatur in einem Raum über einen bestimmten Zeitraum messen. Dazu müssen wir einige Parameter definieren:

  1. Über welchen Zeitraum messen wir die Temperatur?
  2. In welchem Intervall (Zeit zwischen den einzelnen Messungen) möchten wir messen?
  3. In welcher Einheit (°K, °C, °F (😂)) messen wir die Temperatur?

Weiter müssen wir den Messungen einen Namen geben. Stell dir vor, du notierst dir die Messungen auf einem Notizblock und möchtest auch in einem Jahr noch nachvollziehen können, was diese Zahlen bedeuten. Damit wir mit dem Gedankenexperiment fortfahren können, treffen wir folgende Entscheidungen:

  1. Wir messen über einen Zeitraum von einer Stunde.
  2. Wir messen in einem Intervall von 10 Minuten.
  3. Wir messen in der Einheit °C.
  4. Wir nennen die Messungen wohnzimmer_temp_celsius.

Damit können wir starten. Es ist 14:00 und wir notieren uns die erste Temperatur:

14:00 wohnzimmer_temp_celsius 21.2

Wir notieren uns also die Zeit, den Namen der Messung sowie die Temperatur. Nach einer Stunde sehen unsere Notizen wie folgt aus:

14:00 wohnzimmer_temp_celsius 21.2
14:10 wohnzimmer_temp_celsius 21.5
14:20 wohnzimmer_temp_celsius 21.8
14:30 wohnzimmer_temp_celsius 21.8
14:40 wohnzimmer_temp_celsius 21.7
14:50 wohnzimmer_temp_celsius 21.8

Diese Daten können wir noch etwas kompakter darstellen:

wohnzimmer_temp_celsius (1400, 21.2) (1410, 21.5) (1420, 21.8) (1430, 21.8) (1440, 21.7) (1450, 21.8)

Der Name der Messung (wohnzimmer_temp_celsius) wird nur noch einmal definiert, anschliessend notieren wir nur noch die Zeit sowie den jeweiligen Wert. Das spart Schreibarbeit sowie Platz in unserem Notizblock. Dieses kompakte Format ist relativ ähnlich, wie Prometheus die Daten in seiner Datenbank speichert. Anstatt Schreibarbeit sparen wir in der digitalen Welt so Prozessor Zyklen (der Prozessor hat weniger Arbeit) und anstatt Platz auf dem Notizblock belegen wir weniger Platz auf der SSD. Von nun an arbeiten wir nur noch mit diesem kompakten Format. Die Messungen werden z.T. auch als Samples bezeichnet. Die Time Series wohnzimmer_temp_celsius hat in unserem Fall 6 Samples.

Dimensionen

Im Beispiel oben haben wir Messungen für einen einzelnen Raum notiert. Wir erweitern jetzt das Beispiel mit einem zweiten Raum. Das Resultat könnte wie folgt aussehen:

wohnzimmer_temp_celsius   (1400, 21.2) (1410, 21.5) (1420, 21.8) (1430, 21.8) (1440, 21.7) (1450, 21.8)
schlafzimmer_temp_celsius (1400, 18.1) (1410, 18.1) (1420, 18.4) (1430, 18.3) (1440, 18.8) (1450, 18.9)

Wir haben eine neue Zeitreihe hinzugefügt und deren Namen entsprechend dem Raum angepasst. Das Gleiche könnten wir auch in einer leicht anderen Schreibweise notieren:

temp_celsius{raum="wohnzimmer"}   (1400, 21.2) (1410, 21.5) (1420, 21.8) (1430, 21.8) (1440, 21.7) (1450, 21.8)
temp_celsius{raum="schlafzimmer"} (1400, 18.1) (1410, 18.1) (1420, 18.4) (1430, 18.3) (1440, 18.8) (1450, 18.9)

Wie du siehst, haben wir als Name nun einen universellen Wert (temp_celsius) gewählt. Der Name enthält noch immer die Information, worum es sich bei den Messungen handelt (Temperatur) sowie die Einheit in welcher wir messen (°C). Die Information darüber, um welchen Raum es sich bei den Messungen handelt, haben wir jedoch in einen separaten Abschnitt (gekennzeichnet mit den geschweiften Klammern) verschoben. In der Welt der Zeitreihen haben wir damit zwei Zeitreihen mit gleichem Namen (temp_celsius), aber mit unterschiedlichen Dimensionen (raum="wohnzimmer" und raum="schlafzimmer").

Terminologie im Prometheus-Ökosystem

Nun haben wir ein grundlegendes Verständnis darüber, wie Zeitreihen funktionieren. Damit wir in die nächsten Kapitel übergehen können, müssen wir das Gelernte jetzt noch auf die im Prometheus-Ökosystem verwendeten Begriffe übertragen.

Metric (Metrik)

Den Namen einer Messung bezeichnen wir in Prometheus als Metric. Im ersten Beispiel hatten wir somit eine Metric mit dem Namen wohnzimmer_temp_celsius. Nachdem wir Messungen in einem zweiten Raum durchgeführt haben, hatten wir initial zwei Metrics (wohnzimmer_temp_celsius und schlafzimmer_temp_celsius). Zum Schluss haben wir Dimensionen kennengelernt und damit die Anzahl der Metrics wieder auf eins reduziert (temp_celsius). Dimensionen (die Werte in den geschweiften Klammern) zählen also nicht zum Name der Metric, sondern werden separat ausgewiesen (Labels).

Label

Die Werte in den geschweiften Klammern bezeichnen wir als Labels. Ein Label setzt sich immer aus einem Key und einem Value zusammen, wobei diese beiden Teile durch ein = getrennt werden. Der Value wird immer in Anführungszeichen umschlossen. Labels definieren bestimmte Eigenschaften/Details unserer Messungen, während der Name der Metric zur übergeordneten Identifizierung dient.

Time Series

Eine Time Series bezeichnet eine eindeutige Kombination aus Metric und Labels. Die Time Series bezeichnet somit in unserem Beispiel eine Messung aus einem spezifischen Raum. Im Beispiel oben haben wir eine Metric temp_celsius. Das ist noch keine Time Series, da wir für diese Metric zwei Dimensionen (zwei Räume) haben. temp_celsius{raum="wohnzimmer"} hingegen ist eine Time Series, da dieser Wert die Messung eindeutig identifiziert.

Value

Als Value bezeichnen wir den Wert einer Time Series zu einem definierten Zeitpunkt. Im Beispiel oben hat die Time Series temp_celsius{raum="schlafzimmer"} zum Zeitpunkt 1400 einen Value von 18.1.

Best practices

Es ist oft nicht einfach zu entscheiden, wann eine bestimmte Eigenschaft einer Messung/Time Series als Label ausgewiesen oder als Teil des Metric Namens definiert werden soll. Grundsätzlich gilt jedoch, dass alle Messungen, welche eine Eigenschaft oder Funktion eines Systems beschreiben, zur gleichen Metric gehören. Hierbei können folgende Fragen helfen:

  • Ergibt die Summe aller Time Series einer Metric einen sinnvollen Wert?
  • ODER
  • Ergibt der Durchschnitt aller Time Series einer Metric einen sinnvollen Wert?

Ein Beispiel anhand folgender Time Series:

temp_celsius{raum="wohnzimmer"}   (1400, 21.2) (1410, 21.5) (1420, 21.8) (1430, 21.8) (1440, 21.7) (1450, 21.8)
temp_celsius{raum="schlafzimmer"} (1400, 18.1) (1410, 18.1) (1420, 18.4) (1430, 18.3) (1440, 18.8) (1450, 18.9)

Die Summe aller Time Series zum Zeitpunkt 14:00 ergibt 39.3. Diese Zahl hilft uns nicht wirklich weiter. Der Durchschnitt dieser beiden Zahlen könnte aber durchaus interessant sein.

Ein weiteres Beispiel anhand folgender Time Series:

environment{measurement="temperature"} (1400, 21.2) (1410, 21.5) (1420, 21.8) (1430, 21.8) (1440, 21.7) (1450, 21.8)
environment{measurement="humidity"}    (1400, 30.8) (1410, 32.4) (1420, 32.4) (1430, 33.9) (1440, 33.8) (1450, 33.9)

In diesem Beispiel macht weder eine Summe noch der Durchschnitt Sinn, da wir hier zwei unterschiedliche Grössen vergleichen. Daher ist es sinnvoll, einen separaten Metriknamen zu verwenden.

Eine weitere Herausforderung ist das Definieren des Namens einer Metric. Auch hier gibt es einige best practices, an welche man sich, wenn immer möglich halten sollte:

  • Metriken sollten ein Präfix besitzen, welche das System / die Applikation, von welcher die Metrik stammt, identifiziert.
  • Metriken sollten ein Suffix besitzen, welche die Einheit der Metrik beschreibt. Dabei sollten immer Basiseinheiten (z.B. bytes anstatt gigabytes, seconds anstatt hours etc.) verwendet werden.
  • Das Suffix sollte immer in der Mehrzahl angegeben werden (seconds statt second, bytes statt byte etc.)

Fazit

  • Eine Zeitreihe ist eine Abfolge von Messwerten, die über einen bestimmten Zeitraum hinweg in chronologischer Reihenfolge erfasst werden.
  • Eine Zeitreihe besteht aus diskreten Messewerten, also einzelnen, zu bestimmten Zeitpunkten erfassten Werten. Sie gibt somit an, welchen Wert eine bestimmte Grösse (z. B. Temperatur) zu einem definierten Zeitpunkt hatte.
  • Zeitreihen können über Dimensionen/Eigenschaften verfügen. Im Prometheus Ökosystem nennen wir das Labels. Diese Labels werden in Prometheus in geschweiften Klammern ausgewiesen.
  • Eine Metric kann aus einer oder mehreren Time Series bestehen.

Im nächsten Kapitel beschäftigen wir uns mit der Installation und Konfiguration von Prometheus.

Zuletzt geändert March 11, 2025: fiy tpos (b06157f)