Grundlegende PromQL-Abfragen

LinuxBeginner
Jetzt üben

Einführung

Nachdem Prometheus nun Metriken von Node Exporter sammelt, können Sie beginnen, Fragen zu diesen Daten zu stellen.

Prometheus verfügt über eine eigene Abfragesprache namens PromQL (Prometheus Query Language).

PromQL ist wichtig, weil Rohmetriken erst dann wirklich nützlich sind, wenn Sie sie filtern, kombinieren und daraus aussagekräftige Antworten berechnen können.

An diesem Punkt wird Überwachung zur Analyse und besteht nicht mehr nur aus dem Sammeln von Daten. Prometheus ist nicht allein deshalb nützlich, weil es Zahlen speichert, sondern weil Sie diese Zahlen mit PromQL in Fragen und Antworten umwandeln können.

In diesem Lab stellen Sie drei Arten von Fragen:

  1. Einfache Tatsache: „Wie viel freier Speicher ist vorhanden?“
  2. Rate: „Wie schnell arbeitet die CPU?“
  3. Berechnung: „Wie viel Prozent des Speichers sind belegt?“

Sie verwenden die Prometheus-Weboberfläche (Web Service), um diese Fragen einzugeben und die Antworten anzuzeigen.

Freien Speicher abfragen

In diesem Schritt fragen Sie die Anzahl freier Speicherbytes ab und speichern die Antwort.

Beginnen wir mit einer einfachen Tatsache. Wir möchten wissen, wie viel Arbeitsspeicher (RAM) frei ist.

Öffnen Sie zunächst die Prometheus-Oberfläche:

Klicken Sie im Menü oben links in der LabEx-Oberfläche auf den Tab Prometheus, um das Dashboard zu öffnen.

Sobald die Oberfläche geladen ist, suchen Sie das auffällige Suchfeld. Dort geben Sie Ihre Fragen an den Bibliothekar ein.

Geben Sie die folgende Abfrage in das Suchfeld ein:

node_memory_MemFree_bytes

Dieser Text ist der Name des Datenpunkts, der den „freien Speicher“ darstellt. Klicken Sie nach der Eingabe auf die Schaltfläche Execute.

Freien Speicher abfragen

Ergebnis prüfen:

In der Spalte „Value“ sollte eine Zahl angezeigt werden. Sie kann überraschend groß aussehen, zum Beispiel 5204746240. Das ist normal, weil Computer den Speicher in Bytes zählen, also in sehr kleinen Einheiten.

Hinweis: Manchmal wird die Zahl in der Spalte „Value“ vom Labby-Chatfenster verdeckt. Wenn Sie den Wert nicht sehen können, schließen Sie den Labby-Dialog vorübergehend, um die Zahl anzuzeigen. Öffnen Sie den Dialog anschließend wieder.

Um zu überprüfen, ob Sie die richtige Abfrage verwendet haben (da wir Ihren Bildschirm nicht sehen können), führen Sie den folgenden Befehl im Terminal aus. Er speichert die Antwort in einer Datei:

curl "http://localhost:9090/api/v1/query?query=node_memory_MemFree_bytes" > ~/project/free_memory.json
cat ~/project/free_memory.json
{"status":"success","data":{"resultType":"vector","result":[{"metric":{"__name__":"node_memory_MemFree_bytes","instance":"localhost:9100","job":"node_exporter"},"value":[1768698428.127,"4001128448"]}]}}

CPU-Rate abfragen

In diesem Schritt verwenden Sie rate(), um abzufragen, wie schnell ein CPU-Zähler steigt.

Jetzt folgt eine schwierigere Frage.

Der Tacho eines Autos zeigt nicht die „insgesamt gefahrenen Meilen“ an, sondern „Meilen pro Stunde“ – also die Geschwindigkeit.

Bei der CPU ist es ähnlich. Prometheus erfasst die „Gesamtzahl der CPU-Sekunden, die seit dem Einschalten gearbeitet wurden“. Dieser Wert wird immer größer.

Metriken dieser Art werden als Counter bezeichnet: Sie summieren sich im Laufe der Zeit auf. Um das aktuelle Verhalten zu verstehen, benötigen Sie häufig eine Funktion wie rate(). Sie wandelt das kumulative Wachstum in ein Signal pro Zeiteinheit um.

Um zu sehen, wie stark die CPU gerade arbeitet, müssen wir die Rate – also die Geschwindigkeit – berechnen.

Die Abfrage:

rate(node_cpu_seconds_total[1m])

Aufschlüsselung:

  • node_cpu_seconds_total: Die Rohdaten, also die Gesamtzahl der CPU-Sekunden.
  • [1m]: „Betrachte die Daten der letzten Minute.“
  • rate(...): „Berechne, wie schnell dieser Wert während dieser Minute angestiegen ist.“

In der Weboberfläche ausprobieren:

Fügen Sie die Abfrage rate(node_cpu_seconds_total[1m]) in das Suchfeld ein und klicken Sie auf Execute. Wahrscheinlich sehen Sie viele Zahlenzeilen, weil Ihr Computer mehrere CPU-Kerne besitzt.

Antwort speichern (zur Überprüfung):

curl -g "http://localhost:9090/api/v1/query?query=rate(node_cpu_seconds_total[1m])" > ~/project/cpu_rate.json

Die Option -g (--globoff) deaktiviert das URL-Globbing von curl. Dadurch sendet curl die wörtlichen Klammern in [1m], statt sie als URL-Bereich zu interpretieren. Die Anführungszeichen der Shell halten die vollständige Abfrage-URL zusammen.

Prozentwerte berechnen

In diesem Schritt kombinieren Sie Speichermetriken zu einem Prozentwert.

„500 Millionen Bytes frei“ ist schwer verständlich. „50 % frei“ ist leicht verständlich.

Prometheus kann diese Berechnung für Sie durchführen.

Diese Rechenfähigkeit macht PromQL für den Betrieb so leistungsfähig. Sie können mehrere Metriken auf niedriger Ebene zu übergeordneten Zustandsindikatoren kombinieren, die für Menschen leichter zu interpretieren sind.

Wir möchten wissen: Wie viel Prozent des Speichers sind BELEGT?

Die Formel lautet: $$ \text{Prozent belegt} = \frac{\text{Gesamtspeicher} - \text{Freier Speicher}}{\text{Gesamtspeicher}} \times 100 $$

Die PromQL-Abfrage:

(node_memory_MemTotal_bytes - node_memory_MemFree_bytes) / node_memory_MemTotal_bytes * 100

In der Weboberfläche ausprobieren:

Fügen Sie diese längere mathematische Gleichung in das Suchfeld ein und klicken Sie auf Execute. Sie sollten eine einzelne Zahl sehen, zum Beispiel 45.2. Das bedeutet, dass 45,2 % Ihres Speichers verwendet werden.

Antwort speichern:

curl "http://localhost:9090/api/v1/query?query=(node_memory_MemTotal_bytes-node_memory_MemFree_bytes)/node_memory_MemTotal_bytes*100" > ~/project/memory_usage.json

Daten visualisieren

In diesem Schritt stellen Sie die Speicherabfrage als Diagramm dar und interpretieren dessen Achsen.

Zum Schluss gilt: Bilder sind besser als Zahlen.

Lassen Sie Ihre mathematische Abfrage im Suchfeld stehen und suchen Sie die Tabs oberhalb des Ergebnisbereichs. Dort sehen Sie einen Tab Graph, normalerweise neben dem Tab Table, der für einfache Textergebnisse verwendet wird.

Klicken Sie auf den Tab Graph. Sie sehen eine Linie, die die Speichernutzung im Zeitverlauf darstellt.

  • X-Achse: Zeit
  • Y-Achse: Prozentualer Anteil des belegten Speichers

Wenn Sie eine gerade Linie sehen, bedeutet das, dass die Speichernutzung stabil ist. Wenn Sie ein anspruchsvolles Programm ausgeführt hätten, würden Sie einen Ausschlag sehen.

Eine letzte Prüfung:

Da Sie nur eine Grafik betrachten, überprüfen Sie, ob Ihr Server weiterhin im Hintergrund ausgeführt wird:

ps aux | grep prometheus

Zusammenfassung

In diesem Lab haben Sie gelernt, mit PromQL Fragen an den Bibliothekar zu stellen.

Sie haben Folgendes gelernt:

  1. Einfache Fakten: node_memory_MemFree_bytes
  2. Raten (Geschwindigkeit): rate(... [1m])
  3. Berechnungen: (Total - Free) / Total * 100
  4. Darstellung: Verwendung des Tabs Graph.

Nachdem Sie nun die Daten sehen können, besteht der nächste Schritt darin, Prometheus dazu zu bringen, Sie zu alarmieren, wenn etwas schiefgeht. Das nennt man Alerting.