Node Exporter Setup

DockerBeginner
Jetzt üben

Einführung

Dieses Lab erweitert Ihr Monitoring auf einen externen Dienst. Sie werden Node Exporter einrichten, einen Prometheus-Exporter für Hardware- und OS-Metriken. Das Setup wird einen laufenden Prometheus-Container aus dem vorherigen Lab bereitstellen. Sie werden einen Node Exporter-Container ausführen und ihn als neues Ziel in Ihrer prometheus.yml hinzufügen. Am Ende dieses Labs werden Sie in der Lage sein, Systemmetriken auf Host-Ebene innerhalb der Prometheus-UI abzufragen.

Node Exporter Docker Image herunterladen

In diesem Schritt laden Sie das offizielle Docker-Image für Node Exporter herunter. Node Exporter ist ein Prometheus-Exporter, der eine Vielzahl von Hardware- und Kernel-bezogenen Metriken von der Host-Maschine bereitstellt.

Um zu beginnen, ziehen Sie das Image prom/node-exporter von Docker Hub. Öffnen Sie ein Terminal und führen Sie den folgenden Befehl aus:

docker pull prom/node-exporter

Dieser Befehl kontaktiert die Docker Hub-Registry und lädt die neueste Version des Node Exporter-Images auf Ihre lokale Maschine herunter. Sie sehen eine Ausgabe, die den Download-Fortschritt für jede Schicht des Images anzeigt.

Erwartete Ausgabe:

Using default tag: latest
latest: Pulling from prom/node-exporter
Digest: sha256:a5579e72377a6053359058893b80f4f47c55d761457d685343b8e797859a159b
Status: Image is up to date for prom/node-exporter
docker.io/prom/node-exporter

Node Exporter Container auf Port 9100 ausführen

Nachdem Sie das Image haben, lassen Sie uns den Node Exporter als Container ausführen. Wir werden seine Metriken auf Port 9100 bereitstellen, was der Standardport für Node Exporter ist.

Führen Sie den folgenden Befehl aus, um den Container zu starten und ihn im selben Docker-Netzwerk wie Prometheus zu platzieren:

docker run -d -p 9100:9100 --name node-exporter --network monitoring prom/node-exporter

Lassen Sie uns diesen Befehl aufschlüsseln:

  • -d: Führt den Container im detached mode (im Hintergrund) aus.
  • -p 9100:9100: Ordnet Port 9100 des Hosts dem Port 9100 des Containers zu.
  • --name node-exporter: Weist dem Container einen einprägsamen Namen für einfache Referenzierung zu.
  • prom/node-exporter: Das zu verwendende Image zum Erstellen des Containers.

Sie können mit dem Befehl docker ps überprüfen, ob der Container läuft:

docker ps

Sie sollten node-exporter in der Liste der laufenden Container sehen. Optional können Sie die Netzwerkanbindung mit folgendem Befehl bestätigen:

docker inspect node-exporter --format '{{.HostConfig.NetworkMode}}'

Die Ausgabe sollte monitoring sein.

Erwartete Ausgabe:

CONTAINER ID   IMAGE                  COMMAND                  CREATED          STATUS          PORTS                                       NAMES
...            prom/node-exporter     "/bin/node_exporter"     A few seconds ago   Up a few seconds   0.0.0.0:9100->9100/tcp, :::9100->9100/tcp   node-exporter
...            prom/prometheus        "/bin/prometheus --c…"   About a minute ago   Up about a minute   0.0.0.0:9090->9090/tcp, :::9090->9090/tcp   prometheus

prometheus.yml aktualisieren, um Node Exporter Target hinzuzufügen

In diesem Schritt konfigurieren Sie Prometheus so, dass es Metriken vom neu laufenden Node Exporter Container abruft (scrapes). Dies geschieht durch Bearbeiten der Konfigurationsdatei prometheus.yml, um einen neuen Scrape-Job hinzuzufügen.

Öffnen Sie zuerst die Datei prometheus.yml in Ihrem Projektverzeichnis mit dem nano-Editor:

nano ~/project/prometheus.yml

Fügen Sie nun eine neue Job-Konfiguration für den Node Exporter unter dem Abschnitt scrape_configs hinzu. Ihre endgültige Datei sollte wie folgt aussehen. Achten Sie auf die korrekte Einrückung, da YAML darauf empfindlich reagiert.

global:
  scrape_interval: 15s

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

  - job_name: "node_exporter"
    static_configs:
      - targets: ["node-exporter:9100"]

Hier ist, was der neue Block bewirkt:

  • job_name: 'node_exporter': Gibt diesem Scrape-Job einen Namen, der zur Kennzeichnung der gesammelten Metriken verwendet wird.
  • targets: ['node-exporter:9100']: Teilt Prometheus mit, wo der Node Exporter zu finden ist. Wir verwenden den Containernamen, da Docker eine interne DNS-Auflösung zwischen Containern im selben Netzwerk bietet. Der Hostname localhost ist auf jeden Container beschränkt, daher kann er nicht verwendet werden, um andere Container zu erreichen.

Nach der Bearbeitung speichern Sie die Datei und beenden Sie nano, indem Sie Ctrl+X, dann Y und dann Enter drücken.

Prometheus Container mit aktualisierter Konfiguration neu starten

Damit Prometheus die neue Konfiguration laden kann, müssen Sie seinen Container neu starten. Die zuvor konfigurierte Volume-Mount stellt sicher, dass der Container nach dem Neustart die aktualisierte prometheus.yml-Datei erkennt.

Führen Sie den folgenden Befehl aus, um den Prometheus-Container neu zu starten:

docker restart prometheus

Dieser Befehl stoppt den Container mit dem Namen prometheus ordnungsgemäß und startet ihn dann neu. Nach einigen Sekunden läuft Prometheus mit der neuen Konfiguration.

Lassen Sie uns nun die Änderung in der Prometheus-Benutzeroberfläche überprüfen.

  1. Klicken Sie in der LabEx-Oberfläche auf die Schaltfläche + (Neuer Tab), wählen Sie Web Service und geben Sie 9090 für den Port ein.
  2. Wenn sich der neue Tab öffnet, sollten Sie die Startseite des Prometheus Expression Browsers sehen.
  3. Klicken Sie in der oberen Navigationsleiste auf das Menü "Status" und wählen Sie dann "Targets".
Prometheus targets page showing UP status

Sie sollten nun zwei aufgeführte Ziele sehen: prometheus und node_exporter. Beide sollten den Status "UP" haben, was darauf hinweist, dass Prometheus erfolgreich Metriken sowohl von sich selbst als auch vom Node Exporter abruft.

node_cpu_seconds_total Metrik in der Benutzeroberfläche abfragen

Der letzte Schritt besteht darin, durch Ausführen einer Abfrage zu bestätigen, dass Prometheus erfolgreich Metriken vom Node Exporter aufnimmt.

Navigieren Sie zurück zur Hauptseite "Graph" in der Prometheus-Benutzeroberfläche, indem Sie auf den Link "Graph" in der Navigationsleiste klicken. Geben Sie im Eingabefeld "Expression" den folgenden Metriknamen ein:

node_cpu_seconds_total

Diese Metrik repräsentiert die Gesamtzeit in Sekunden, die die CPU in verschiedenen Modi (z. B. idle, user, system) verbracht hat.

Prometheus UI showing node_cpu_seconds_total query results

Klicken Sie auf die Schaltfläche "Execute". Wenn die Verbindung erfolgreich ist, sehen Sie unterhalb des Graphen eine Ergebnistabelle. Jedes Ergebnis entspricht einem anderen CPU-Kern und Modus. Das Erscheinen dieser Ergebnisse bestätigt, dass Ihre gesamte Monitoring-Pipeline korrekt funktioniert, von der Datenerfassung durch Node Exporter bis zur Aufnahme und Speicherung durch Prometheus.

Sie können zwischen den Ansichten "Table" und "Graph" wechseln, um die Daten zu visualisieren.

Zusammenfassung

Herzlichen Glückwunsch! Sie haben Ihr Monitoring-Setup erfolgreich erweitert, indem Sie einen externen Dienst hinzugefügt haben. In diesem Lab haben Sie gelernt, wie Sie den offiziellen Prometheus Node Exporter in einem Docker-Container ausführen, eine Prometheus-Instanz konfigurieren, um Metriken von diesem neuen Ziel abzurufen, und die Datenerfassung durch Abfragen von Host-Level-Metriken überprüfen. Dies ist eine grundlegende Fähigkeit für den Aufbau eines umfassenden Observability-Stacks, der Ihnen tiefe Einblicke in die Leistung und den Zustand Ihrer Systeme ermöglicht.