Prometheus: Abrufen von Metriken von Linux

Wie man Linux-Server-Metriken in Prometheus mit Node Exporter abruft

👋 Willkommen in der Stackhero-Dokumentation!

Stackhero bietet eine einsatzbereite Prometheus Cloud-Lösung, die zahlreiche Vorteile bietet, darunter:

  • Alert Manager inklusive, um Warnungen an Slack, Mattermost, PagerDuty usw. zu senden.
  • Dedizierter E-Mail-Server zum Versenden von unbegrenzten E-Mail-Warnungen.
  • Blackbox zur Überprüfung von HTTP, ICMP, TCP und mehr.
  • Einfache Konfiguration mit Online-Konfigurationsdatei-Editor.
  • Mühelose Updates mit nur einem Klick.
  • Optimale Leistung und robuste Sicherheit durch eine private und dedizierte VM.

Sparen Sie Zeit und vereinfachen Sie Ihr Leben: Es dauert nur 5 Minuten, um die Prometheus Cloud Hosting-Lösung von Stackhero auszuprobieren!

Node Exporter ist eine Software, die Sie auf *NIX-Kernen (Linux, OpenBSD, FreeBSD oder Darwin) installieren können, um Systemmetriken für Prometheus bereitzustellen. Es ist ein wesentlicher Bestandteil zur Überwachung der Serverleistung und der Infrastrukturgesundheit.

In der Prometheus-Terminologie fungiert Node Exporter als Exporteur und wird als Ziel in Ihrer Prometheus-Konfiguration hinzugefügt. Prometheus verbindet sich in regelmäßigen Abständen über HTTP mit Node Exporter über den TCP-Port 9100, um Metriken abzurufen.

Zusammenfassend ermöglicht Node Exporter die Überwachung eines Linux-basierten Systems. Für Windows-Systeme können Sie den Windows Exporter verwenden.

Großes Bild von Stackhero für PrometheusGroßes Bild von Stackhero für Prometheus

Sie können Node Exporter von seiner GitHub-Releases-Seite herunterladen. Es wird als Binärdatei verteilt, die direkt auf Ihrem System läuft. Da es für den kontinuierlichen Betrieb ausgelegt ist, wird empfohlen, es so zu konfigurieren, dass es automatisch beim Start Ihres Servers startet.

Standardmäßig öffnet Node Exporter Port 9100 für die Welt ohne Authentifizierung oder Verschlüsselung. Es wird dringend empfohlen, sowohl Authentifizierung als auch TLS-Verschlüsselung hinzuzufügen (siehe unten) und eine Firewall einzurichten, um den Zugriff auf Port 9100 zu beschränken, sodass nur Ihr Prometheus-Server oder andere autorisierte IP-Adressen eine Verbindung herstellen können.

Sie können diese Schritte auf Ubuntu befolgen:

# Gehen Sie zu https://github.com/prometheus/node_exporter/releases, um die neueste Versionsnummer zu erhalten.
node_exporter_version="1.2.0"
node_exporter_release="linux-amd64"

# node_exporter herunterladen und installieren
cd /tmp
wget https://github.com/prometheus/node_exporter/releases/download/v${node_exporter_version}/node_exporter-${node_exporter_version}.${node_exporter_release}.tar.gz
tar xvfa node_exporter-${node_exporter_version}.${node_exporter_release}.tar.gz
sudo mv node_exporter-${node_exporter_version}.${node_exporter_release}/node_exporter /usr/local/bin/
rm -rf node_exporter-${node_exporter_version}.${node_exporter_release} node_exporter-${node_exporter_version}.${node_exporter_release}.tar.gz

# Erstellen Sie einen Benutzer "node_exporter"
sudo useradd -rs /bin/false node_exporter

# Erstellen Sie einen systemd-Dienst, um node_exporter automatisch beim Start zu starten
sudo bash -c 'cat << EOF > /etc/systemd/system/node_exporter.service
[Unit]
Description=Node Exporter
After=network.target

[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter --web.config=/etc/prometheus_node_exporter/configuration.yml

[Install]
WantedBy=multi-user.target
EOF'

# Erstellen Sie ein Konfigurationsverzeichnis und eine Datei
sudo mkdir -p /etc/prometheus_node_exporter/
sudo touch /etc/prometheus_node_exporter/configuration.yml
sudo chmod 700 /etc/prometheus_node_exporter
sudo chmod 600 /etc/prometheus_node_exporter/*
sudo chown -R node_exporter:node_exporter /etc/prometheus_node_exporter

sudo systemctl daemon-reload
sudo systemctl enable node_exporter

# Starten Sie den node_exporter-Daemon und überprüfen Sie seinen Status
sudo systemctl start node_exporter
sudo systemctl status node_exporter

Zu diesem Zeitpunkt sollte die node_exporter-Binärdatei auf Ihrem Server laufen. Um zu bestätigen, dass es funktioniert, können Sie sich verbinden und überprüfen, ob es Metriken zurückgibt:

curl http://localhost:9100/metrics

Node Exporter öffnet Port 9100 für das öffentliche Netzwerk. Das bedeutet, dass jeder eine Verbindung herstellen und Ihre Servermetriken abrufen kann! Mindestens sollten Sie Authentifizierung und TLS-Verschlüsselung hinzufügen (siehe unten) und es wird dringend empfohlen, eine Firewall einzurichten, um Anfragen an Port 9100 von anderen IPs als Ihrem Prometheus-Server zu blockieren.

Der Installationsprozess für Node Exporter auf Debian ist identisch mit der oben beschriebenen Ubuntu-Methode. Folgen Sie einfach den gleichen Anweisungen.

Die Installationsschritte für Node Exporter hängen von dem System ab, das Sie verwenden. Obwohl keine detaillierte Dokumentation für jede Plattform bereitgestellt wird, besteht das grundlegende Verfahren darin, das zu Ihrem System passende Binärprogramm herunterzuladen und es so zu konfigurieren, dass es beim Start ausgeführt wird.

Standardmäßig führt Node Exporter keine Authentifizierung durch, was bedeutet, dass jeder die bereitgestellten Metriken abrufen kann. Um den Zugriff zu sichern, können Sie eine grundlegende Authentifizierung für einen Benutzer hinzufügen.

Generieren Sie ein Passwort mit den folgenden Befehlen:

password=`openssl rand -base64 32`
passwordHashed=`echo ${password} | htpasswd -inBC 10 "" | tr -d ':'`
echo "Klartext-Passwort für den Prometheus-Server aufbewahren: ${password}"

Wenn Sie das htpasswd-Binärprogramm nicht haben, können Sie es auf Debian/Ubuntu mit apt-get install --no-install-recommends apache2-utils installieren.

Bewahren Sie das Klartext-Passwort sicher auf, da Sie es bei der Konfiguration von Prometheus benötigen.

Fügen Sie die folgenden Zeilen zur Konfigurationsdatei hinzu, um einen Benutzer namens "prometheus" mit dem generierten Passwort-Hash hinzuzufügen:

sudo cat << EOF >> /etc/prometheus_node_exporter/configuration.yml
basic_auth_users:
  prometheus: ${passwordHashed}

EOF

# Node Exporter neu starten
sudo systemctl restart node_exporter

Überprüfen Sie schließlich, ob die Authentifizierung korrekt funktioniert:

  • Das Ausführen von curl http://localhost:9100/metrics sollte "Unauthorized" zurückgeben.
  • Das Ausführen von curl -u prometheus:${password} http://localhost:9100/metrics sollte die Liste der Metriken zurückgeben.

Standardmäßig verschlüsselt Node Exporter keine Kommunikation. Das bedeutet, dass Anmeldedaten, einschließlich des zuvor definierten Passworts, im Klartext übertragen werden. Um die Kommunikation zu sichern, können Sie die TLS-Verschlüsselung wie folgt aktivieren.

Führen Sie die folgenden Befehle aus, um ein TLS-Zertifikat und einen Schlüssel zu erstellen:

# TLS-Zertifikat erstellen
cd /tmp
sudo openssl req -new -newkey rsa:2048 -days 3650 -nodes -x509 \
  -keyout /etc/prometheus_node_exporter/tlsCertificate.key \
  -out /etc/prometheus_node_exporter/tlsCertificate.crt \
  -subj "/CN=`hostname`" \
  -addext "subjectAltName = DNS:`hostname`"
sudo chmod 600 /etc/prometheus_node_exporter/*
sudo chown -R node_exporter:node_exporter /etc/prometheus_node_exporter

Fügen Sie die folgenden Zeilen zur Konfigurationsdatei hinzu, um TLS-Einstellungen hinzuzufügen, und starten Sie dann Node Exporter neu:

sudo cat << 'EOF' >> /etc/prometheus_node_exporter/configuration.yml
tls_server_config:
  cert_file: /etc/prometheus_node_exporter/tlsCertificate.crt
  key_file: /etc/prometheus_node_exporter/tlsCertificate.key

EOF

# Prometheus Node Exporter neu starten
sudo systemctl restart node_exporter

Sie können überprüfen, ob TLS aktiv ist, indem Sie sich mit dem folgenden Befehl über HTTPS verbinden:

curl -k -u prometheus:${password} https://localhost:9100/metrics

Beachten Sie, dass diese Methode kein CA-Zertifikat verwendet, sodass Sie die Option "-k" an cURL übergeben müssen, um die Zertifikatsüberprüfung zu umgehen.

Nachdem Sie Node Exporter installiert und gesichert haben, konfigurieren Sie Ihren Prometheus-Server, um Metriken in regelmäßigen Abständen abzurufen.

Wählen Sie auf Stackhero Ihren Prometheus-Dienst aus und gehen Sie zur URL "Prometheus-Konfiguration". Fügen Sie dann Folgendes zu Ihrem scrape_configs-Abschnitt hinzu:

scrape_configs:

  - job_name: "My servers pool"
    static_configs:
      - targets: [ "<yourLinuxServerDomain>:9100" ]
    basic_auth:
      username: "prometheus"
      password: "<password>"
    scheme: https
    tls_config:
      insecure_skip_verify: true
    # Relabeling "instance", um den ":9100"-Teil zu entfernen
    relabel_configs:
      - source_labels: [__address__]
        target_label: instance
        regex: '([^:]+)(:[0-9]+)?'
        replacement: '${1}'

Speichern Sie die Datei und überprüfen Sie die Prometheus-Protokolle, um zu bestätigen, dass sie erfolgreich neu geladen wurde (Sie können die Protokolle im Stackhero-Dashboard anzeigen, indem Sie Ihren Prometheus-Dienst auswählen und auf die Registerkarte "Logs" klicken).

Überprüfen Sie schließlich, ob Prometheus Metriken abruft, indem Sie auf das Prometheus-UI im Stackhero-Dashboard zugreifen und zu Status > Targets navigieren. Ihr Linux-Server sollte in der Zielliste als UP erscheinen.

Das Ziel "myLinuxServer" ist UPDas Ziel "myLinuxServer" ist UP

Um die von Node Exporter abgerufenen Metriken anzuzeigen, melden Sie sich über das Stackhero-Dashboard mit der URL "Prometheus UI" oder direkt unter https://<prometheusDomain>/ bei Prometheus an.

Geben Sie im Feld "Expression" node_memory_MemTotal_bytes ein und drücken Sie die Eingabetaste. Wenn alles korrekt konfiguriert ist, sehen Sie den gesamten RAM des Servers in Bytes angezeigt.

Die Gesamtmenge an RAM für diesen Server beträgt 4068794368 Bytes, was 3,78 GB entsprichtDie Gesamtmenge an RAM für diesen Server beträgt 4068794368 Bytes, was 3,78 GB entspricht

Grafana kann mühelos Dashboards basierend auf Prometheus-Daten erstellen. Für detaillierte Anweisungen zur Konfiguration von Grafana zur Anzeige von Prometheus-Daten, lesen Sie bitte die Dokumentation von Grafana.

Beispiel eines von Grafana generierten Dashboards, basierend auf Prometheus Node Exporter-DatenBeispiel eines von Grafana generierten Dashboards, basierend auf Prometheus Node Exporter-Daten