Dieses Repository wurde zugunsten der integrierten Plugins archiviert, die in Grafana 9+-Versionen verfügbar sind: Status-History und State-Timeline. Diese Plugins werden von der Community als Ersatz für flant-statusmap verwendet. Weitere Informationen finden Sie in Ausgabe Nr. 302. Wenn Sie der Meinung sind, dass dieses Plugin Ihren Anforderungen entspricht und Sie es weiterentwickeln möchten, können Sie gerne einen Fork erstellen. Wir würden uns freuen, wenn Sie weitermachen!
Panel zur Anzeige diskreter Status mehrerer Ziele im Zeitverlauf.
Führen Sie
docker compose up
aus und öffnen Sie http://localhost:3000 im Browser, um eine einfache Demo anzuzeigen.
Wir mussten dringend eine Reihe von Zeitreihenstatus über einen bestimmten Zeitraum hinweg visualisieren, damit wir einen Verlauf der Änderungen des Objektstatus sehen können. Da wir viele Kubernetes-Cluster (und die zugehörige Infrastruktur) unterhalten, sind unsere Hauptfälle hierfür die Visualisierung des Zustands von Servern und Kubernetes-Pods sowie Zustandsprüfungen von HTTP-Diensten. Wir haben verschiedene verfügbare Grafana-Plugins ausprobiert (sie sind unten in den Danksagungen aufgeführt), aber keines davon konnte die Funktionen und die Visualisierung bieten, die wirklich annähernd das bieten, was wir gesucht haben.
NB: Weitere Details zu unserem Weg zur Erstellung des Plugins finden Sie in diesem Beitrag.
Die mit diesem Plugin visualisierten Objekte können unterschiedlich sein: nicht nur IT-Komponenten (z. B. Server-Hosts und Kubernetes-Pods), sondern einfach alles, was Sie sich vorstellen können, wie z. B. Kaffeemaschinen auf dem Bild oben. Diese Objekte sollten diskrete Status haben, die Sätze vordefinierter Werte sind, z. B. ok
= 0, off
= 1, fail
= 2 usw.
Um übersichtliche Diagramme zu erstellen, sollte Ihre Datenquelle gute Daten zurückgeben. Das Plugin passt die Variable $__interval
abhängig von der Bucket-Breite in den Panel-Optionen an. Ihre Abfragen sollten Status über $__interval
aggregieren.
Damit der Modus mit mehreren Werten wie erwartet funktioniert, sollten Sie mehrere Abfragen definieren: eine Abfrage für jeden möglichen Status.
Das Plugin aggregiert die Daten vorerst nicht rechtzeitig, sondern stellt Eingabedaten nur als Buckets dar. Aus diesem Grund sollten die Daten Punkte für jeden Zeitstempel im Zeitbereich und gleiche Zeitstempel für jedes mögliche Ziel (Y-Achsenbeschriftung) enthalten. Diese Einschränkung wird durch Problem Nr. 53 behoben.
Um mit Daten aus Prometheus arbeiten zu können, müssen Sie diskrete Status für Ihre Objekte einrichten. Die Anforderungen zum Speichern dieser Status in Metriken sind wie folgt:
0
und 1
;Wenn es fertig ist, können Sie alle Daten per Abfrage sammeln, z. B.:
(max_over_time(coffee_maker_status{status=""}[$__interval]) == 1) *
Wenn es während des Abfrageintervalls keinen solchen Status (
) gäbe, würde Prometheus nichts zurückgeben. Andernfalls wird der Statuswert zurückgegeben.
Wenn Sie beispielsweise fünf Statustypen und eine Metrik ( coffee_maker_status
) mit fünf zulässigen Werten ( 0
, 1
, 2
, 3
, 4
) haben, sollten Sie diese Metrik mithilfe der folgenden Regel umwandeln:
- record: coffee_maker_status:discrete
expr: |
count_values("status", coffee_maker_status)
So wird die Metrik coffee_maker_status
mit dem Wert 3
in eine neue Metrik umgewandelt:
coffee_maker_status:discrete{status="3"} 1
Wenn Prometheus nun für jeden Status die Werte 0
und 1
hat, können alle diese Metriken aggregiert werden, sodass Sie im Laufe der Zeit alle verfügbaren Status Ihrer Objekte erhalten.
Wählen Sie „Zeitreihe“ für „Format als“ und verwenden Sie GROUP BY ($__interval)
in der Abfrage. $tag_
kann in „Alias by“ verwendet werden, um Y-Achsen-Beschriftungen zu definieren.
Eine Beispielabfrage mit Aggregation über $__interval
sieht folgendermaßen aus (Sie benötigen eine Abfrage für jeden möglichen Statuswert):
SELECT
$__timeGroupAlias(date_insert,$__interval),
name AS metric,
min(statusi) AS "statusi"
FROM coffee_makers
WHERE
$__timeFilter(date_insert) AND statusi=1
GROUP BY 1,2
ORDER BY $__timeGroup(date_insert,$__interval)
metric
Spalte wird als Y-Achsenbeschriftung verwendet.
Zunächst sollte für jeden möglichen Statuswert eine individuelle Abfrage erstellt werden. Jede Abfrage sollte auch eine ähnliche Legende zur Gruppierung haben:
Anschließend sollte die Farbzuordnung für Statuswerte im diskreten Farbmodus definiert werden:
Mithilfe von Voreinstellungen können Sie Ampelfarben oder 8 Farben aus der solarisierten Palette definieren:
Hinweis: Die Farbmodi „Spektrum“ und „Deckkraft“ funktionieren genauso wie im Heatmap-Plugin.
Das Kontrollkästchen „Mehrere Werte“ gibt an, wie sie angezeigt werden sollen:
Anzeigenullwerte können als leere Buckets behandelt oder mit der Farbe des 0
Werts angezeigt werden.
Mit „Mindestbreite“ und „Mindestabstand“ werden die minimale Bucket-Breite und der minimale Abstand zwischen den Buckets angegeben. Durch Abrunden können Kanten abgerundet werden.
Der Werteindex wird auf eine positive Zahl gesetzt, um nur Werte aus bestimmten Zeitreihen anzuzeigen.
Das Kontrollkästchen „Legende anzeigen“ schaltet die Legende am unteren Rand des Bedienfelds ein.
Mit der Zeilensortierung können Beschriftungen auf der Y-Achse sortiert werden. Metriken – Sortieren Sie Y-Beschriftungen so, wie sie auf der Registerkarte „Metriken“ definiert sind. a→z und z→a sortieren Beschriftungen in natürlicher Reihenfolge absteigend oder aufsteigend.
„Paginierung aktivieren“ schaltet die Paginierungssteuerung im Diagramm um.
Zeilen pro Seite: Anzahl der Zeilen, die im Diagramm angezeigt werden sollen.
„Tooltip anzeigen“ schaltet die Tooltip-Anzeige bei Mausbewegungen über Buckets um.
Beim Klicken einfrieren schaltet den Tooltip „Einfrieren“ beim Klicken um. Eingefrorene Tooltips können zum Vergleichen von Daten mit schwebenden Tooltips oder zum Verfolgen von URLs verwendet werden.
Elemente anzeigen schaltet die Anzeige zusätzlicher Elemente im Tooltip um.
„Elemente“ ist eine Liste von Definitionen zum Anzeigen von URLs in der QuickInfo.
Jede URL verfügt über eine Vorlage, ein Symbol, eine Beschriftung und Formatierungsoptionen: Kleinbuchstaben und Datumsformat für Variablen.
In manchen Fällen wird das Statusfeld verwendet, um von einem Dashboard zu einem spezifischeren zu wechseln, z. B. bei der Durchführung einer Ursachen-/Ursachenanalyse. In solchen Fällen möchte der Benutzer möglicherweise den Umfang der Zeitspanne reduzieren und gleichzeitig das gewünschte Ereignis im Mittelpunkt halten (um die vorherigen/späteren Zeitfenster analysieren zu können). Diese Werte werden durch __bucket_from
und __bucket_to
eingeführt.
__bucket_from
: Es ist der Wert von bucket.from
minus dem prozentualen Bucket. __bucket_to
: Dies ist der Wert von bucket.to
plus dem prozentualen Bucket.
Die erste öffentliche Veröffentlichung dieses Plugins wurde vollständig von Flant-Ingenieuren erstellt. Die gesamte Idee stammt von Dmitry Stolyarov (@distol), die erste Version wurde von Sergey Gnuskov (@gsmetal) geschrieben und die letzten Änderungen wurden von Ivan Mikheykin (@diafour) vorgenommen.
Dieses Plugin basiert auf dem „Heatmap“-Panel von Grafana und ist teilweise von Ideen aus Carpet Plot, Discrete Panel, Status Panel, Status Dot und Status By Group inspiriert.