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.

Passwortverschlüsselung auf scram-sha-256

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.

Benutzerauthentifizierung

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

postgres_exporter herunterladen

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

configure postgres exporter

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.

postgres_exporter systemd Einstellungen

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.

postgres_exporter status

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.

Firewall einrichten

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.

pstgres_exporter Metriken

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.

postgres_exporter zu prometheus hinzufügen

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.

pg queries

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.

postgres_exporter prometheus

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.

Dashboard-Import

Gib die PostgreSQL Dashboard-ID „xxx“ ein und klicke auf Laden. Die PostgreSQL Dashboard-ID„9628“ ist im Grafana Dashboard Repository verfügbar.

importieren Dashboard id

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„.

neues Dashboard mitgestalten

Nachdem das Grafana-Dashboard importiert wurde, überprüfe dein neues Dashboard und du solltest die Überwachung des PostgreSQL-Dashboards wie unten dargestellt sehen.

PostgreSQL Dashboard Überwachung

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.

Das könnte dich auch interessieren …