PromQL Grundlagen

DockerBeginner
Jetzt üben

Einführung

Willkommen zu diesem praktischen Lab über die Grundlagen von PromQL. Prometheus ist ein leistungsstarkes Open-Source-Monitoring- und Alerting-Toolkit, und seine Abfragesprache, PromQL, ist das Herzstück seiner Leistungsfähigkeit. PromQL ermöglicht es Ihnen, Zeitreihendaten in Echtzeit auszuwählen und zu aggregieren.

In diesem Lab arbeiten Sie mit einer vorkonfigurierten Umgebung, die aus einem Prometheus-Server besteht, der aktiv Metriken von einem Node Exporter sammelt. Ihr Ziel ist es, die grundlegende Syntax von PromQL zu erlernen, um diese Daten abzufragen, beginnend mit einfachen Metrikauswahlen und fortschreitend zu komplexeren Abfragen unter Verwendung von Funktionen und Filtern.

Verstehen Sie die bereitgestellte Umgebung

In diesem Schritt machen Sie sich mit der Laborumgebung vertraut. Der Einrichtungsprozess hat bereits zwei Docker-Container für Sie gestartet. Sie müssen keine Einrichtung vornehmen.

Die beiden Container sind:

  • node-exporter: Dieser Container dient dazu, eine Vielzahl von Hardware- und Kernel-bezogenen Metriken von der Host-Maschine, auf der er läuft, bereitzustellen.
  • prometheus: Dies ist der Prometheus-Server selbst. Er ist so konfiguriert, dass er die Metriken vom node-exporter "scrapt" (sammelt) und in seiner Zeitreihendatenbank speichert.

Sie können überprüfen, ob beide Container laufen, indem Sie den Befehl docker ps im Terminal ausführen.

docker ps

Sie sollten eine Ausgabe ähnlich der folgenden sehen, die sowohl den prometheus- als auch den node-exporter-Container mit dem Status "Up" auflistet.

CONTAINER ID   IMAGE                       COMMAND                  CREATED          STATUS         PORTS                                       NAMES
486db39ca176   prom/prometheus      "/bin/prometheus --c…"   9 seconds ago    Up 8 seconds   0.0.0.0:9090->9090/tcp, :::9090->9090/tcp   prometheus
3f02110c8fde   prom/node-exporter   "/bin/node_exporter"     11 seconds ago   Up 8 seconds   0.0.0.0:9100->9100/tcp, :::9100->9100/tcp   node-exporter

Dies bestätigt, dass Ihr Monitoring-Stack bereit ist. Im nächsten Schritt greifen Sie auf die Prometheus-Benutzeroberfläche zu, um mit der Abfrage dieser Metriken zu beginnen.

Greifen Sie im Prometheus UI auf den Expression Browser zu

In diesem Schritt greifen Sie auf die Prometheus Web-UI zu und lokalisieren den Expression Browser, das primäre Werkzeug zur Ausführung von PromQL-Abfragen.

Der Webserver des Prometheus-Containers läuft auf Port 9090, und die Laborumgebung stellt diesen automatisch für Sie bereit.

  1. Klicken Sie in der LabEx-Oberfläche auf die Schaltfläche + und wählen Sie Web Service.
  2. Geben Sie 9090 für den Port ein und öffnen Sie den neu erscheinenden Tab.

Diese Aktion öffnet die Prometheus UI in einem separaten Tab innerhalb Ihrer Laborumgebung. Standardmäßig sollten Sie auf der Graph-Seite landen. Auf dieser Seite sehen Sie ein Textfeld mit der Bezeichnung Expression. Dies ist der Expression Browser, in dem Sie alle Ihre PromQL-Abfragen für dieses Lab eingeben und ausführen werden.

Prometheus Expression Browser

Nachdem Sie nun wissen, wo Sie Abfragen ausführen können, sind Sie bereit, Ihre erste zu schreiben.

Führen Sie eine einfache Abfrage wie node_cpu_seconds_total aus

In diesem Schritt führen Sie Ihre erste einfache PromQL-Abfrage aus, um eine Metrik auszuwählen. Die einfachste Abfrage in PromQL ist nur der Name einer Metrik. Dies wählt alle Zeitreihen aus, die diesen Metriknamen haben.

Navigieren Sie zum Expression Browser in der Prometheus UI, den Sie im vorherigen Schritt geöffnet haben.

  1. Geben Sie im Eingabefeld Expression den folgenden Metriknamen ein:
node_cpu_seconds_total
  1. Klicken Sie auf die Schaltfläche Execute.

Nach der Ausführung betrachten Sie die Ergebnisse in der Table-Ansicht unterhalb des Graphen. Sie sehen eine Liste von Zeitreihen.

node_cpu_seconds_total{cpu="0", instance="node-exporter:9100", job="node", mode="idle"}      3456.78
node_cpu_seconds_total{cpu="0", instance="node-exporter:9100", job="node", mode="iowait"}    12.34
node_cpu_seconds_total{cpu="0", instance="node-exporter:9100", job="node", mode="system"}    56.78
...

Lassen Sie uns dieses Ergebnis aufschlüsseln:

  • node_cpu_seconds_total: Dies ist der Metrikname. Er repräsentiert einen counter (Zähler), der die Gesamtzahl der Sekunden verfolgt, die die CPU in verschiedenen Modi verbracht hat.
  • {cpu="0", mode="idle", ...}: Dies sind die Labels. Labels sind Schlüssel-Wert-Paare, die eine Zeitreihe eindeutig identifizieren. Hier sehen Sie verschiedene Reihen für jeden CPU-Kern (cpu="0") und jeden Modus (mode="idle", mode="system", etc.).
  • 3456.78: Dies ist der letzte Wert, der für diese spezifische Zeitreihe aufgezeichnet wurde. Da es sich um einen Zähler handelt, wird dieser Wert im Laufe der Zeit nur noch steigen.

Hinweis: Wenn Sie den letzten Wert nicht sehen, klicken Sie auf das Labby-Dialogfeld in der rechten Ecke der Seite und schließen Sie es vorübergehend.

Sie haben erfolgreich eine Prometheus-Abfrage für alle Zeitreihen einer bestimmten Metrik ausgeführt.

Wenden Sie die rate-Funktion und Label-Filter an

In diesem Schritt verfeinern Sie Ihre Abfrage mithilfe von Label-Filtern und der rate()-Funktion, um aussagekräftigere Daten zu erhalten. Der Rohwert eines Zählers ist oft nicht nützlich; wir sind normalerweise mehr an seiner Änderungsrate interessiert.

Zuerst filtern wir die Ergebnisse, um nur die CPU-Zeit im idle-Modus anzuzeigen. Dies können Sie tun, indem Sie Ihrer Abfrage einen Label-Selektor in geschweiften Klammern {} hinzufügen.

  1. Geben Sie die folgende Abfrage im Expression Browser ein und führen Sie sie aus:
node_cpu_seconds_total{mode="idle"}

Diese Abfrage gibt nun nur die Zeitreihen zurück, bei denen das Label mode exakt idle ist.

Als Nächstes berechnen wir die pro Sekunde gemessene Änderungsrate dieses Zählers. Hierfür verwenden wir die rate()-Funktion. Die rate()-Funktion muss wissen, über welchen Zeitraum die Rate berechnet werden soll. Dies geben wir mit einem Range Vector Selector an, z. B. [5m] für die letzten 5 Minuten.

  1. Ändern Sie nun Ihre Abfrage, um sie in die rate()-Funktion einzuschließen und einen 5-Minuten-Bereichsselektor hinzuzufügen. Führen Sie die endgültige Abfrage aus:
rate(node_cpu_seconds_total{mode="idle"}[5m])

Lassen Sie uns diese erweiterte Abfrage aufschlüsseln:

  • node_cpu_seconds_total{mode="idle"}: Dies ist der Instant Vector Selector, der für unsere gewünschte Metrik und unser gewünschtes Label filtert.
  • [5m]: Dies ist der Range Selector, der Prometheus anweist, alle Datenpunkte der letzten 5 Minuten für die ausgewählten Zeitreihen abzurufen.
  • rate(...): Dies ist die Funktion, die den 5-Minuten-Datenbereich nimmt und die durchschnittliche pro Sekunde gemessene Rate berechnet, mit der der Zähler gestiegen ist.

Das Ergebnis ist nicht mehr ein großer Zählerwert, sondern ein Wert typischerweise zwischen 0 und 1 (für einen einzelnen CPU-Kern). Ein Wert von 0.95 würde bedeuten, dass die CPU in den letzten 5 Minuten im Durchschnitt zu 95 % im Leerlauf war. Dies sind wesentlich nützlichere Informationen für die Überwachung.

Zusammenfassung

Herzlichen Glückwunsch zum Abschluss dieses Labs zu den Grundlagen von PromQL! Sie haben erfolgreich eine Live-Prometheus-Instanz abgefragt und Rohdaten in aussagekräftige Informationen umgewandelt.

In diesem Lab haben Sie gelernt, wie Sie:

  • Die Prometheus UI zum Expression Browser navigieren.
  • Einfache Abfragen ausführen, um alle Zeitreihen für eine Metrik auszuwählen.
  • Die Struktur einer Zeitreihe verstehen, einschließlich ihres Metriknamens und ihres eindeutigen Satzes von Labels.
  • Zeitreihen mithilfe von Label-Selektoren ({...}) filtern.
  • Die Änderungsrate eines Zählers mithilfe der rate()-Funktion und eines Range Vector Selectors ([5m]) berechnen.

Dies sind die grundlegenden Bausteine für die Arbeit mit Prometheus. Von hier aus können Sie die vielen anderen Funktionen und Operatoren erkunden, die PromQL bietet, um leistungsstarke und aufschlussreiche Monitoring-Dashboards und Alarme zu erstellen.