Prometheus-Konfiguration

DockerBeginner
Jetzt üben

Einführung

Prometheus ist ein leistungsstarkes Open-Source-Tool für Monitoring und Alerting. Sein Verhalten wird durch eine Konfigurationsdatei gesteuert, die typischerweise prometheus.yml heißt. Diese Datei definiert alles, von der Häufigkeit des Scrappings von Metriken über die zu scrapenden Ziele bis hin zur Handhabung von Alerting-Regeln.

Dieses Lab ist eine Fortsetzung des Labs "Prometheus Installation", in dem Sie gelernt haben, wie man Prometheus mit Docker installiert und ausführt. Da Sie nun wissen, wie Sie Prometheus zum Laufen bringen, lernen Sie in diesem Lab die Grundlagen der Prometheus-Konfiguration kennen. Sie beginnen damit, einen Prometheus-Container zu inspizieren, der mit einer Standardkonfiguration läuft. Anschließend erstellen Sie Ihre eigene benutzerdefinierte prometheus.yml-Datei, starten einen neuen Container mit dieser Datei und lernen, wie Sie die Konfiguration neu laden, ohne den Dienst neu zu starten.

Überprüfen, ob der Prometheus-Container läuft

In diesem Schritt überprüfen wir, ob der initiale Prometheus-Container, der vom Setup-Skript gestartet wurde, läuft. Dieser Container verwendet die standardmäßige, integrierte Konfiguration.

Listen wir alle laufenden Docker-Container auf, um unseren prometheus-default-Container zu sehen.

docker ps

Sie sollten eine Ausgabe ähnlich dieser sehen, die zeigt, dass ein Container mit dem Namen prometheus-default gestartet und aktiv ist. Die Spalte PORTS zeigt an, dass Port 9090 auf dem Host mit Port 9090 im Container verbunden ist.

CONTAINER ID   IMAGE                       COMMAND                  CREATED          STATUS          PORTS                                       NAMES
a1b2c3d4e5f6   prom/prometheus     "/bin/prometheus --c…"   15 seconds ago   Up 14 seconds   0.0.0.0:9090->9090/tcp, :::9090->9090/tcp   prometheus-default

Dies bestätigt, dass unsere initiale Prometheus-Instanz aktiv ist. Im nächsten Schritt greifen Sie auf die Prometheus-Web-UI zu, um die Standardkonfiguration in Aktion zu sehen.

Auf die Prometheus Web UI unter localhost:9090 zugreifen

In diesem Schritt greifen Sie auf die Prometheus-Weboberfläche zu, die nun läuft und auf Port 9090 verfügbar ist. Die LabEx-Umgebung bietet eine bequeme Möglichkeit, auf Webdienste zuzugreifen, die innerhalb der virtuellen Maschine laufen.

Klicken Sie auf die Schaltfläche + (Neuer Tab), die sich oben in der Lab-Oberfläche befindet.

Wählen Sie die Option Web Service und geben Sie 9090 als Port ein.

Dadurch wird ein neuer Browser-Tab geöffnet, der mit den Diensten in Ihrer Laborumgebung verbunden ist.

Da wir Port 9090 gemappt haben, ist die Prometheus-UI verfügbar. Sie sollten den Prometheus Expression Browser sehen, der die Haupt-Landingpage ist. Diese Oberfläche ermöglicht es Ihnen, PromQL-Abfragen zu schreiben und auszuführen, um Metriken zu erkunden.

Prometheus Expression Browser Landingpage

Das Vorhandensein dieser Seite bestätigt, dass Ihr Prometheus-Container korrekt läuft und zugänglich ist.

Erstellen der prometheus.yml-Datei mit grundlegender Scrape-Konfiguration

In diesem Schritt erstellen Sie eine benutzerdefinierte Prometheus-Konfigurationsdatei namens prometheus.yml. Diese Datei weist Prometheus an, was überwacht werden soll.

Nachdem Sie auf die Prometheus-Web-UI zugegriffen und deren Funktion bestätigt haben, erstellen wir nun eine benutzerdefinierte Konfigurationsdatei, mit der Sie Prometheus nach Ihren Bedürfnissen konfigurieren können.

Wir verwenden den Texteditor nano, um die Datei im Verzeichnis ~/project zu erstellen.

nano prometheus.yml

Kopieren Sie nun die folgende YAML-Konfiguration und fügen Sie sie in den nano-Editor ein. Diese Konfiguration weist Prometheus an, alle 5 Sekunden Metriken von sich selbst zu scrapen.

global:
  scrape_interval: 5s

scrape_configs:
  - job_name: "prometheus"
    static_configs:
      - targets: ["localhost:9090"]

Lassen Sie uns diese Konfiguration aufschlüsseln:

  • global: Dieser Abschnitt definiert Parameter, die für alle anderen Konfigurationsabschnitte gültig sind.
  • scrape_interval: Dies legt das Standardintervall zwischen den Scrapes auf 5 Sekunden fest.
  • scrape_configs: Dieser Abschnitt definiert die Menge der zu scrapenden Ziele und Parameter.
  • job_name: Dies ist der Name, der dem Job zugewiesen wird und als Label an jede Zeitreihe angehängt wird, die von diesem Ziel gescraped wird.
  • static_configs: Dies gibt eine Liste von zu überwachenden Zielen an.
  • targets: Dies listet die Endpunkte auf, die gescraped werden sollen. In diesem Fall ist es der Prometheus-Server selbst.

Nachdem Sie den Inhalt eingefügt haben, speichern Sie die Datei und beenden Sie nano, indem Sie Ctrl+X, dann Y und schließlich Enter drücken.

Prometheus-Container mit gemounteter Konfiguration ausführen

Nachdem wir unsere benutzerdefinierte Datei prometheus.yml haben, müssen wir einen neuen Prometheus-Container starten, der diese verwendet. Zuerst stoppen und entfernen wir den alten Container.

docker stop prometheus-default
docker rm prometheus-default

Als Nächstes starten wir einen neuen Container namens prometheus-custom. Wir verwenden das Flag -v, um unsere lokale Datei prometheus.yml in den Container an der erwarteten Stelle /etc/prometheus/prometheus.yml zu mounten. Wir fügen auch das Flag --web.enable-lifecycle hinzu, um die Hot-Reloading-API zu aktivieren, die wir im nächsten Schritt verwenden werden.

docker run -d \
  --name prometheus-custom \
  -p 9090:9090 \
  -v ~/project/prometheus.yml:/etc/prometheus/prometheus.yml \
  prom/prometheus \
  --config.file=/etc/prometheus/prometheus.yml \
  --web.enable-lifecycle

Lassen Sie uns die neuen Flags überprüfen:

  • -v ~/project/prometheus.yml:/etc/prometheus/prometheus.yml: Dies ist der Volume-Mount. Er ordnet die Datei prometheus.yml aus dem Verzeichnis ~/project Ihrer Host-Maschine dem Pfad /etc/prometheus/prometheus.yml innerhalb des Containers zu. Prometheus liest diese Datei beim Start.
  • --web.enable-lifecycle: Dieses Kommandozeilen-Flag aktiviert die HTTP-API zum Neuladen der Konfiguration, auf die über den Endpunkt /-/reload zugegriffen werden kann.

Sie können überprüfen, ob der neue Container läuft:

docker ps

Sie sollten den Container prometheus-custom in der Liste sehen.

Prometheus-Konfiguration über API neu laden

Eine der leistungsstarken Funktionen von Prometheus ist die Möglichkeit, seine Konfiguration ohne einen vollständigen Neustart neu zu laden, was Lücken in der Metriksammlung verhindert. Dies ist möglich, da wir die Lifecycle-API mit dem Flag --web.enable-lifecycle aktiviert haben.

Zuerst ändern wir unsere Konfigurationsdatei. Wir ändern das scrape_interval von 5s auf 15s.

Öffnen Sie die Datei mit nano:

nano prometheus.yml

Ändern Sie die Zeile scrape_interval zu 15s:

global:
  scrape_interval: 15s ## Geändert von 5s

scrape_configs:
  - job_name: "prometheus"
    static_configs:
      - targets: ["localhost:9090"]

Speichern Sie die Datei und beenden Sie nano (Ctrl+X, Y, Enter).

Anstatt den Container neu zu starten, senden wir nun eine POST-Anfrage an den Endpunkt /-/reload mit curl. Dies weist die laufende Prometheus-Instanz an, ihre Konfiguration aus der gemounteten Datei neu zu laden.

curl -X POST http://localhost:9090/-/reload

Wenn das Neuladen erfolgreich ist, sehen Sie keine Ausgabe. Dieser stille Erfolg bedeutet, dass Prometheus die neue Konfiguration angewendet hat.

Abgerufene Metriken auf der Targets-Seite prüfen

Im letzten Schritt überprüfen wir, ob unsere benutzerdefinierte Konfiguration aktiv ist, indem wir die Prometheus-Web-UI aufrufen.

Die LabEx-Umgebung bietet einen "Web Terminal"-Tab oder einen ähnlichen Mechanismus, um auf Webdienste zuzugreifen, die innerhalb der VM laufen. Öffnen Sie die Prometheus-UI, indem Sie im vom Lab-Interface bereitgestellten Browser zu http://localhost:9090 navigieren.

Sobald die UI geladen ist, klicken Sie in der oberen Navigationsleiste auf das Menü Status und wählen Sie dann Targets.

Auf der Targets-Seite sehen Sie die in Ihrer prometheus.yml-Datei definierten Scrape-Ziele. Sie sollten ein Ziel unter dem Job prometheus sehen.

  • Endpoint: http://localhost:9090/metrics
  • State: Der Status sollte UP mit einem grünen Hintergrund sein.
  • Last Scrape / Scrape Duration: Diese Spalten zeigen an, wann der letzte Scrape stattgefunden hat und wie lange er gedauert hat. Sie können beobachten, dass die Zeit zwischen den Scrapes nun etwa 15 Sekunden beträgt, was die Änderung widerspiegelt, die wir im vorherigen Schritt neu geladen haben.
Prometheus Targets Page

Dies bestätigt, dass Prometheus unsere benutzerdefinierte Konfigurationsdatei erfolgreich geladen hat, das angegebene Ziel scrapt und die Konfigurationsneuladung angewendet hat.

Zusammenfassung

Herzlichen Glückwunsch! Sie haben dieses Lab zur Prometheus-Konfiguration erfolgreich abgeschlossen.

In diesem Lab haben Sie gelernt, wie Sie:

  • Eine benutzerdefinierte prometheus.yml-Konfigurationsdatei erstellen.
  • Docker-Volume-Mounts (-v) verwenden, um einem Prometheus-Container eine benutzerdefinierte Konfiguration bereitzustellen.
  • Die Prometheus-Lifecycle-API aktivieren, um Hot-Reloading zu ermöglichen.
  • Die Prometheus-Konfiguration "on-the-fly" mit einem einfachen curl-Befehl neu laden.
  • Die aktive Konfiguration durch Überprüfung der Targets-Seite in der Prometheus-Web-UI verifizieren.

Dies sind grundlegende Fähigkeiten für die Verwaltung und den Betrieb von Prometheus in jeder Umgebung.