Logbuch#monitoring#netzwerk#prometheus#control-center
Die Spitze der letzten Stunde war kleiner als der aktuelle Wert
Von Niclas Hennrich
Etwas ist ausgefallen oder kaputtgegangen. Gehört zum Vorhaben Homelab Control Center.
- aktueller Download
- 30.7Mbit/s
- Spitze 1 h
- 37.8Mbit/s
- Spitze 24 h
- 371Mbit/s
Was auffiel: Im Netzwerk-Überblick standen zwei Kacheln nebeneinander — aktueller Download und Spitze der letzten Stunde. Die Spitze war kleiner als der aktuelle Wert: 25,1 gegen 37,8 Mbit/s. Als Anzeige gelesen ist das schlicht ein Fehler.
Beide Zahlen waren für sich korrekt. Sie kamen aus derselben Quelle und aus derselben Zeitreihe. Der Unterschied steckte im Mittelungsfenster: Die Spitze mittelte über fünf Minuten, der Momentwert über drei. Bei gleichem Verkehr ergibt ein breiteres Fenster zwangsläufig eine kleinere Zahl — es verteilt denselben Datenberg auf mehr Zeit.
Zwei Zahlen, die der Betrachter direkt vergleicht, müssen mit derselben Elle gemessen sein. Das klingt banal, aber die beiden Ausdrücke sind an verschiedenen Tagen für verschiedene Zwecke entstanden, und keiner wusste vom anderen.
Die Lösung: Das Mittelungsfenster ist jetzt einmal je Datenquelle definiert — für Host-Exporter und Router-Exporter unterschiedlich, weil die Scrape-Intervalle unterschiedlich sind — und sowohl Momentwert als auch Spitze benutzen dieselbe Konstante. Ein Test vergleicht die beiden Ausdrücke gegeneinander, damit sie nicht wieder auseinanderlaufen.
An derselben Anlage danach: aktuell 30,7 · Spitze 1 h 37,8 · Spitze 24 h 371,0 Mbit/s. Plausibel.
Der eigentliche Punkt: Meine Testsuite hätte das nie gefunden. Sie läuft gegen einen Mock, und der erzeugt Momentwert und Spitze aus derselben Welle. In dieser Welt ist die Spitze zwangsläufig größer — der Fehler kann dort gar nicht auftreten. Er ist erst an echten Daten sichtbar geworden, wo zwei Abfragen unabhängig voneinander gerechnet werden.
Ein Mock prüft, ob der Code tut, was ich gedacht habe. Ob ich das Richtige gedacht habe, prüft er nicht.