Prometheus-Monitoring für Java-Entwickler

PromQL, Grafana

Die Prometheus Query Language

PromQL ist die Abfragesprache, mit der sich die Daten aus der Time-Series-Datenbank auswerten lassen. In der Prometheus-Debugging-UI unter http://localhost:9090 kann man im Tab "Graph" PromQL-Abfragen testen und die Ergebnisse einsehen.

Die einfachste Query ist der Name einer Metrik, zum Beispiel:

node_network_receive_bytes

Es zeigt sich, dass sich hinter einem Metrikmamen mehrere Zeitreihen verbergen können, die jeweils mit verschiedenen Labels gekennzeichnet sind. Zum Beispiel liefert node_network_receive_bytes eine Metrik für das Netzwerk-Device eth0 und eine Metrik für das Device lo. Ein Filter schränkt die Anzeige der Metriken weiter ein:

node_network_receive_bytes{device='eth0'}

Die Abfrage liefert jeweils den neuesten verfügbaren Wert in der Zeitreihe. Ist man nicht nur an diesem Wert interessiert, sondern am Zeitverlauf, dann lässt sich der Query ein Zeitintervall in eckigen Klammern hinzufügen. Nachfolgende Abfrage zeigt alle Werte der letzten fünf Minuten zusammen mit den jeweiligen Zeitstempeln, die anzeigen, wann die Werte eingelesen wurden:

node_network_receive_bytes{device='eth0'}[5m]

Neben den bisher gezeigten grundlegenden Funktionen bietet PromQL weitere, mit denen unter anderem statistische Auswertungen möglich sind. Ein Beispiel hierfür ist die rate()-Funktion, die einen Zeitverlauf als Parameter nimmt und den Durchschnittswert pro Sekunde liefert:

rate(node_network_receive_bytes{device='eth0'}[5m])

Die Query zeigt, wie viele Bytes pro Sekunde über das Netzwerk-Device eth0 in den letzten fünf Minuten im Durchschnitt empfangen wurden.

PromQL kann auch mehrere Metriken kombinieren. Um beispielsweise nicht nur die empfangenen Bytes zu sehen, sondern den gesamten I/O-Traffic am Device eth0, erweitert man den Beispielaufruf folgendermaßen:

rate(node_network_transmit_bytes{device='eth0'}[5m]) + 
rate(node_network_receive_bytes{device='eth0'}[5m])

Diese Beispiele zeigen nur einen kleinen Ausschnitt der Möglichkeiten von PromQL. Die PromQL-Dokumentation beschreibt eine Vielzahl weiterer Funktionen der Abfragesprache.

Dashboard für den echten Monitoring-Betrieb

Die eingebaute Weboberfläche in Prometheus ist hauptsächlich zum Debugging gedacht und bietet eine schnelle und einfache Möglichkeit, Queries auszuprobieren. Für den echten Monitoring-Betrieb kommt meist Grafana als Dashboard zum Einsatz. Die Erweiterung stellt das Ergebnis beliebiger PromQL-Queries grafisch dar. Grafana ist wie Prometheus eineausführbare Datei. Nach dem Start stellt es eine Weboberfläche unter http://localhost:3000 bereit. Das Tool wird vollständig über die Weboberfläche konfiguriert, sodass kein Editieren von Konfigurationsdateien nötig ist.

Beim Erstellen eines Dashboards wählt man aus verschiedenen Visualisierungskomponenten beispielsweise Liniendiagramme und konfiguriert anschließend die PromQL-Query, deren Ergebnis am Ende mit dem jeweiligen Diagrammtyp visualisiert werden soll.

Beispielhafter Grafana-Screenshot (Bild: http://grafana.org/assets/img/features/dashboard_ex.png)

Auf ein Grafana-Beispiel verzichtet dieser Artikel, doch es sei darauf hingewiesen, dass die von Grafana visualisierten Daten Ergebnisse von PromQL-Queries sind. Es werden also in Grafana dieselben Queries hinterlegt, die sich in der Prometheus-Debugging-Oberfläche ausprobieren lassen. Die Erweiterung sendet demnach die Queries an Prometheus und stellt die Ergebnisse grafisch dar.