Wie man PostgreSQL mit Prometheus und Grafana unter Ubuntu 22.04 überwacht
In diesem Tutorial richtest du die Monitoring-Plattformen Prometheus und Grafana ein, um den PostgreSQL-Datenbankserver zu überwachen. Du installierst und richtest den postgres_exporter ein, um die Daten des PostgreSQL-Servers zu sammeln und sie dem Prometheus-Server zur Verfügung zu stellen. Am Ende dieses Tutorials richtest du das Dashboard-Monitoring für den PostgreSQL-Server über die Datenvisualisierungsplattform Grafana ein.
Voraussetzungen
Für die Durchführung dieses Tutorials benötigst du die folgenden Voraussetzungen
- Einen Server, auf dem Prometheus und Grafana installiert sind.
- Einen Zielserver, auf dem ein PostgreSQL-Datenbankserver installiert ist.
- Einen Nicht-Root-Benutzer mit sudo/root-Administrator-Rechten.
Im Folgenden findest du einige Anleitungen für die Installation der einzelnen Komponenten.
Wie installiere ich Prometheus und die Grafana Monitoring Plattform auf Ubuntu 22.04 Server.
Wie installiere ich den PostgreSQL Datenbankserver auf Ubuntu 22.04 Server.
Wenn alle Voraussetzungen erfüllt sind, können wir loslegen.
PostgreSQL Server Konfiguration
Der PostgreSQL Server bietet zwei verschiedene Methoden zur Passwortverschlüsselung: md5 und scram-sha-256. Beide Passwortverschlüsselungen können über die PostgreSQL-Konfigurationsdatei „postgresql.conf“ konfiguriert werden.
In diesem Schritt richtest du PostgreSQL so ein, dass es die„scram-sha-256„-Passwortverschlüsselung verwendet.
In diesem Beispiel wird der PostgreSQL-Server v14 verwendet, der auf einem Ubuntu-System installiert ist. Die PostgreSQL-Konfigurationsdateien befinden sich daher im Verzeichnis „/etc/postgresql/14/main“.
Wechsle im Arbeitsverzeichnis in das Verzeichnis„/etc/postgresql/14/main“ und öffne die Konfigurationsdatei „postgresql.conf“ mit dem Editor-Befehl nano.
cd /etc/postgresql/14/main sudo nano postgresql.conf
Entferne die Auskommentierung der Option„password_encryption“ und ändere den Wert in„scram-sha-256„.
password_encryption = scram-sha-256 # scram-sha-256 or md5
Speichere die Datei und beende den Editor, wenn du fertig bist.
Als Nächstes öffnest du die Konfigurationsdatei„pg_hba.conf“ mit dem unten stehenden nano-Editor-Befehl. In der Datei „pg_hba.conf“ werden die Passwort-Authentifizierungsmethoden für Hosts oder IP-Adressen festgelegt.
sudo nano pg_hba.conf
Ändere die Standard-Authentifizierungsmethoden für den Host‚127.0.0.1/32‚ und ‚::1/128‚ in’scram-sha-256‚. Damit wird die Authentifizierungsmethode’scram-sha-256‚ für jede Client-Verbindung zum PostgreSQL-Server‚127.0.0.1‚ verwendet.
# "local" is for Unix domain socket connections only local all all peer # IPv4 local connections: host all all 127.0.0.1/32 scram-sha-256 # IPv6 local connections: host all all ::1/128 scram-sha-256
Speichere und beende den Editor, wenn du fertig bist.
Zum Schluss führst du den Befehl systemctl aus, um den PostgreSQL-Dienst neu zu starten und die Änderungen zu übernehmen.
sudo systemctl restart postgresql
Nachdem der PostgreSQL-Server konfiguriert ist, installierst du als Nächstes den „postgres_exporter“, mit dem du Metriken des PostgreSQL-Servers sammeln kannst.
Herunterladen von postgres_exporter
Der„postgres_exporter“ ist ein Prometheus-Exporter für die Metriken des PostgreSQL-Servers. Er unterstützt mehrere PostgreSQL-Versionen wie 9.4, 9.5, 9.6, 10, 11, 12, 13 und 14. Der „postgres_exporter“ ist eine einzelne Binärdatei, die hauptsächlich in Go geschrieben ist.
Du wirst den „postgres_exporter“ in diesen Schritten auf den PostgreSQL-Server herunterladen.
Um zu beginnen, führe den folgenden Befehl aus, um einen neuen Systembenutzer „postgres_exporter“ auf deinem PostgreSQL-Server zu erstellen.
sudo useradd -M -r -s /sbin/nologin postgres_exporter
Danach lädst du die Binärdatei „postgres_exporter“ mit dem unten stehenden wget-Befehl herunter. Schau auf jeden Fall auf der GitHub-Seite von „postgres_exporter“ nach, um die neueste Version von„postgres_exporter“ zu erhalten. Zum Zeitpunkt der Erstellung dieses Artikels ist die neueste Version von postgres_exporter v0.12.
wget https://github.com/prometheus-community/postgres_exporter/releases/download/v0.12.0-rc.0/postgres_exporter-0.12.0-rc.0.linux-amd64.tar.gz
Als Nächstes führst du den unten stehenden tar-Befehl aus, um das Paket postgres_exporter zu entpacken. Verschiebe dann das entpackte Verzeichnis von postgres_exporter in das Verzeichnis„/opt/postgres_exporter„.
tar xvf postgres_exporter*.tar.gz mv postgres_exporter*/ /opt/postgres_exporter
Überprüfe abschließend die Liste der Dateien und Verzeichnisse im Verzeichnis „postgres_exporter“. Du solltest sehen, dass das Binary„postgres_exporter“ verfügbar ist.
ls /opt/postgres_exporter
Nachdem du die Binary-Datei„postgres_exporter“ heruntergeladen hast, konfigurierst du den „postgres_exporter“ für die Erfassung von PostgreSQL-Server-Metriken.
postgres_exporter konfigurieren
In diesem Schritt konfigurierst du den „postgres_exporter“ für das Sammeln von PostgreSQL-Metriken, indem du den PostgreSQL-Benutzer und das Passwort festlegst. Außerdem richtest du den systemd-Dienst für den „postgres_exporter“ ein und konfigurierst ihn.
Mit dem„postgres_exporter“ kannst du Metriken für alle verfügbaren Datenbanken auf dem PostgreSQL-Server oder für bestimmte Datenbanken, die du überwachen möchtest, bereitstellen. Du kannst auch den sicheren SSL-Modus oder den Nicht-SSL-Modus verwenden.
Verschiebe das aktuelle Arbeitsverzeichnis mit dem cd-Befehl nach „/opt/postgres_exporter“.
cd /opt/postgres_exporter
Erstelle nun eine neue Datei ‚.env‚ mit dem unten stehenden nano-Editor-Befehl.
nano .env
Füge die folgenden Zeilen in die Datei ein. Achte auch darauf, dass du die Angaben zum PostgreSQL-Benutzer, zum Passwort und zum Host änderst. Mit dieser ‚.env‚-Datei kannst du PostgreSQL-Metriken von allen verfügbaren Datenbanken abrufen und sammeln. Du kannst auch Metriken von einer bestimmten PostgreSQL-Datenbank sammeln, indem du die folgende Konfigurationsdatei anpasst.
# Format #DATA_SOURCE_NAME=postgresql://username:password@localhost:5432/postgres?sslmode=disable
# Monitor all databases via postgres_exporter
DATA_SOURCE_NAME=“postgresql://postgres:strongpostgrespassword@localhost:5432/?sslmode=disable“
# Monitor specific databases on the PostgreSQL server
# DATA_SOURCE_NAME=“postgresql://username:password@localhost:5432/database-name?sslmode=disable“
Speichere die Datei und beende den Editor, wenn du fertig bist.
Als Nächstes führst du den folgenden chown-Befehl aus, um die Rechte am Verzeichnis „/opt/postgres_exporter“ auf den Benutzer „postgres_exporter“ zu ändern.
sudo chown -R postgres_exporter: /opt/postgres_exporter
Danach führst du den unten stehenden Befehl aus, um eine neue systemd-Dienstdatei „/etc/systemd/system/postgres_exporter.service“ zu erstellen. Damit kannst du den„postgres_exporter“ ganz einfach mit dem systemctl-Befehl verwalten.
sudo tee /etc/systemd/system/postgres_exporter.service<<EOF [Unit] Description=Prometheus exporter for Postgresql Wants=network-online.target After=network-online.target [Service] User=postgres_exporter Group=postgres_exporter WorkingDirectory=/opt/postgres_exporter EnvironmentFile=/opt/postgres_exporter/.env ExecStart=/opt/postgres_exporter/postgres_exporter --web.listen-address=:9187 --web.telemetry-path=/metrics Restart=always [Install] WantedBy=multi-user.target EOF
Führe nun den folgenden systemctl-Befehl aus, um den systemd manager neu zu laden und die Änderungen zu übernehmen.
sudo systemctl daemon-reload
Nachdem der systemd manager neu geladen wurde, starte und aktiviere den Dienst „postgres_exporter“ mit dem systemctl-Befehl (siehe unten).
sudo systemctl start postgres_exporter sudo systemctl enable postgres_exporter
Der „postgres_exporter“ sollte laufen und Metriken vom PostgreSQL-Server abrufen. Außerdem sollte er aktiviert sein und wird beim Booten automatisch ausgeführt.
Führe abschließend den folgenden Befehl aus, um den Status des Dienstes „postgres_exporter“ zu überprüfen. Stelle außerdem sicher, dass der „postgres_exporter“ läuft und aktiviert ist.
sudo systemctl status postgres_exporter
Du erhältst eine ähnliche Ausgabe wie diese – der Dienst„postgres_exporter“ läuft und ist aktiviert.
Zu diesem Zeitpunkt läuft der „postgres_exporter“ auf dem Standard-TCP-Port„9187“ des PostgreSQL-Servers. Dadurch werden die PostgreSQL-Metriken dem Prometheus-Server zugänglich gemacht, aber vorher musst du noch die Firewall auf dem PostgreSQL-Server einrichten.
Firewall einrichten
In diesem Schritt richtest du die Firewall so ein, dass sie den Standardport von„postgres_exporter“ öffnet – TCP 9187. Danach überprüfst du, ob die „postgres_exporter“-Metrik über den Webbrowser erreichbar ist.
Bei Ubuntu-Systemen, die UFW als Firewall verwenden, führe den folgenden ufw-Befehl aus, um Port 9187 zur ufw-Firewall hinzuzufügen. Lade dann die Firewall neu, um die Änderungen zu übernehmen.
sudo ufw allow 9187/tcp sudo ufw reload
Du kannst nun die Liste der Ports in der UFW mit dem unten stehenden ufw-Befehl überprüfen.
sudo ufw status
Du erhältst eine Ausgabe wie die folgende – der postgres_exporter Port 9187 wurde der Firewalld hinzugefügt.
Bei RHEL-basierten Distributionen, die firewalld als Standard-Firewall verwenden, führst du den folgenden firewall-cmd-Befehl aus, um Port 9187 zur firewalld hinzuzufügen. Lade dann die Firewalld neu, um die Änderungen zu übernehmen.
sudo firewall-cmd --add-port=9187/tcp --permanent sudo firewall-cmd --reload
Führe anschließend den folgenden Befehl aus, um zu überprüfen, ob der postgres_exporter-Port 9187 hinzugefügt wurde.
sudo firewall-cmd --list-ports
Du solltest nun sehen, dass der Port 9187 zur Firewall hinzugefügt wurde.
Zuletzt öffnest du deinen Webbrowser und rufst die IP-Adresse deines PostgreSQL-Servers auf, gefolgt von dem„postgres_exporter„-Port 9187 (d.h.: http://192.168.5.21:9187/metrics).
Du solltest die Details der PostgreSQL-Server-Metriken sehen, die der „postgres_exporter“ gesammelt hat.
Wenn die Firewall konfiguriert und der „postgres_exporter“ zugänglich ist, fügst du als Nächstes den „postgres_exporter“ zum Prometheus-Ziel „scrape_configs“ hinzu.
Hinzufügen von postgres_exporter zu Prometheus
Gehe zurück zum Prometheus-Server und öffne die Prometheus-Konfigurationsdatei„/etc/prometheus/prometheus.yml“ mit dem unten stehenden nano-Editor-Befehl.
sudo nano /etc/prometheus/prometheus.yml
Füge unter dem Abschnitt„scrape_configs“ die folgenden Zeilen in die Datei ein. In diesem Beispiel richtest du einen neuen Job für das Sammeln von PostgreSQL-Server-Metriken mit dem Namen„postgres_exporter“ ein. Der Zielserver von PostgreSQL ist„192.168.5.21:9187„, also die Metriken, die der Dienst„postgres_exporter“ ausgibt.
# PostgreSQL Monitoring with postgres_exporter - job_name: 'postgres_exporter' scrape_interval: 5s static_configs: - targets: ['192.168.5.21:9187']
Speichere die Datei und beende den Editor, wenn du fertig bist.
Führe nun den folgenden systemctl-Befehl aus, um den Prometheus-Dienst neu zu starten und die Änderungen zu übernehmen.
sudo systemctl restart prometheus
Nachdem du die neuen scrape_configs erstellt und den Prometheus-Server neu gestartet hast, überprüfst du den„postgres_exporter“ über das Prometheus-Web-Dashboard.
Öffne deinen Webbrowser und rufe die IP-Adresse des Prometheus-Servers auf, gefolgt von dem Standard-Port 9090 (also https://192.168.5.100:9090).
Melde dich mit deinem Benutzernamen und deinem Passwort am Prometheus-Server an, wenn du die Option basic_auth aktiviert hast.
Klicke im Prometheus-Dashboard auf das Symbol„Browser„, um die Liste der Prometheus-Abfragen aufzurufen. Gib dann„pg“ ein, um Abfragen zu filtern, die mit„pg“ beginnen. Du erhältst dann die Ausgabe wie im folgenden Screenshot.
Als Nächstes klickst du auf das Menü „Status“ und wählst „Ziele“ aus. Du solltest sehen, dass der Jobname„postgres_exporter“ auf dem PostgreSQL-Server mit der IP-Adresse„192.168.5.21:9187“ läuft.
Der Job„postgres_exporter“ ist nun dem Prometheus-Server hinzugefügt und die Metrik des PostgreSQL-Servers ist nun in Prometheus verfügbar.
In den nächsten Schritten richtest du das Grafana Dashboard zur Überwachung des PostgreSQL-Servers ein.
Einrichten des Dashboard-Monitorings über Grafana
Öffne deinen Grafana-Domainnamen oder die IP-Adresse des Servers und melde dich dann mit deinem Benutzernamen und Passwort im Grafana-Dashboard an.
Nach dem Einloggen klickst du auf das Menü Dashboard und wählst Importieren.
Gib die PostgreSQL Dashboard-ID „xxx“ ein und klicke auf Laden. Die PostgreSQL Dashboard-ID„9628“ ist im Grafana Dashboard Repository verfügbar.
Gib nun das neue Dashboard ein und wähle„Prometheus“ als Datenquelle. Klicke dann auf Importieren, um es anzuwenden.
In diesem Beispiel erstellst du ein neues Dashboard mit dem Namen„PostgreSQL Monitoring„.
Nachdem das Grafana-Dashboard importiert wurde, überprüfe dein neues Dashboard und du solltest die Überwachung des PostgreSQL-Dashboards wie unten dargestellt sehen.
Fazit
Herzlichen Glückwunsch! Du hast nun die Überwachung des PostgreSQL-Servers mit Prometheus und Grafana über den„postgres_exporter“ abgeschlossen. Außerdem hast du ein spezielles Dashboard für die Überwachung deines PostgreSQL-Servers erstellt. Damit erhältst du aufschlussreiche Details darüber, was in deinem PostgreSQL vor sich geht.
Auf der GitHub-Seite der Prometheus-Community findest du jetzt Details zu den verfügbaren Exportern in Prometheus. So kannst du deine Anwendungen über Grafana und den Prometheus Monitoring Stack überwachen.