Integration · PostgreSQL

PostgreSQL Monitoring: Performance, Replikation und Queries

Überwachen Sie Verbindungen, Cache Hit Ratio, Locks, Vacuum und Replication Lag jeder Postgres-Instanz und sehen Sie, welcher Service und welche Query die Last erzeugen.
Obseria Apps und Funktionen: Observability, APM, Infrastruktur und Integrationen
Obseria Home-Dashboard mit Service-Zustand, offenen Problemen, SLO-Erfüllung und Ingestion
Obseria Trace-Explorer mit Span-Liste und Span-Attributen
Überblick

Warum PostgreSQL mit Obseria überwachen

Von der Query zum Aufrufer

Datenbank-Spans aus der OpenTelemetry-Instrumentierung zeigen, welcher Endpunkt ein langsames Statement ausführt. Sie beheben den Codepfad, nicht nur den Index.

Verlässliche Replikation

WAL Lag und Replikationsverzögerung pro Replika, mit Alerts, bevor Read Replicas veraltete Daten liefern oder ein Failover Schreibvorgänge verliert.

Selbst betrieben und managed

Dieselben Ansichten für PostgreSQL auf VMs, in Kubernetes, auf Amazon RDS und Aurora, Azure Database und Cloud SQL.

Abdeckung

PostgreSQL-Komponenten, die Obseria überwacht

  • Datenbanken. Größe, Commits, Rollbacks, Block-Reads, Deadlocks und Zeilenoperationen pro Datenbank aus pg_stat_database.
  • Tabellen und Indizes. Tabellen- und Indexgröße, Index Scans, Sequential Scans und Vacuum-Läufe pro Tabelle.
  • Verbindungen. Backends pro Datenbank im Vergleich zu max_connections, damit ein erschöpfter Pool früh sichtbar wird.
  • Replikation und WAL. Replikationsverzögerung in Bytes, WAL Lag und WAL-Alter für jeden Standby.
  • Background Writer und Checkpoints. Anzahl der Checkpoints, geschriebene Buffer und Checkpoint-Dauer aus pg_stat_bgwriter.
  • Logs und Queries. PostgreSQL-Logs inklusive langsamer Statements über den filelog-Receiver sowie clientseitige Datenbank-Spans.
Auf einen Blick

Die PostgreSQL-Kennzahlen, auf die es ankommt

Obseria erfasst diese Werte automatisch und zeigt sie in fertigen Dashboards und Alerts.

Verbindungen und Last

Zeigt, wie viele Nutzer und Anwendungen verbunden sind und wie nah die Datenbank daran ist, neue Verbindungen abzulehnen.

  • postgresql.backends
  • postgresql.connection.max

Tempo und Transaktionen

Zeigt, wie viel Arbeit erfolgreich abgeschlossen oder abgebrochen wird und wie oft Daten direkt aus dem schnellen Speicher kommen.

  • postgresql.commits
  • postgresql.rollbacks
  • postgresql.blks_hit

Replikation und Sicherheit

Macht sichtbar, ob Sicherungskopien Ihrer Daten aktuell sind, damit bei einem Ausfall keine jüngsten Änderungen verloren gehen.

  • postgresql.replication.data_delay
  • postgresql.wal.lag

Pflege und Wachstum

Hebt Blockaden, regelmäßige Aufräumarbeiten und das Wachstum der Datenbank hervor, damit Sie Speicher planen und Verzögerungen vermeiden.

  • postgresql.deadlocks
  • postgresql.table.vacuum.count
  • postgresql.db_size
Alle 10 Metriken im Detail anzeigen
MetrikEinheitAussage
postgresql.backends1Offene Verbindungen pro Datenbank; im Vergleich zu max_connections zeigt sich Pool-Erschöpfung.
postgresql.connection.max{connections}Konfiguriertes max_connections, die Obergrenze für Backends.
postgresql.commits1Committete Transaktionen, das grundlegende Durchsatzsignal einer Datenbank.
postgresql.rollbacks1Zurückgerollte Transaktionen; ein steigender Anteil deutet auf Anwendungsfehler oder Konflikte.
postgresql.blks_hit{blks_hit}In Shared Buffers gefundene Blöcke; zusammen mit Block-Reads ergibt sich die Cache Hit Ratio.
postgresql.deadlocks{deadlock}Erkannte Deadlocks pro Datenbank; jeder stetige Anstieg verdient eine Analyse.
postgresql.replication.data_delayByBytes an WAL, die eine Replika noch nicht angewendet hat.
postgresql.wal.lagsZeit zwischen dem Schreiben des WAL auf dem Primary und dem Flush oder Replay auf dem Standby.
postgresql.table.vacuum.count{vacuum}Vacuum-Läufe pro Tabelle; nie gevacuumte Tabellen sammeln Bloat an.
postgresql.db_sizeByBelegter Speicher pro Datenbank, für Kapazitätsplanung und Wachstums-Alerts.
Einrichtung

PostgreSQL-Monitoring in wenigen Minuten einrichten

  1. Schritt 1

    Monitoring-User anlegen

    Legen Sie eine Read-only-Rolle an und weisen Sie ihr pg_monitor zu. So liest sie Statistik-Views, ohne Zugriff auf Ihre Daten zu haben.

  2. Schritt 2

    postgresql-Receiver konfigurieren

    Ergänzen Sie den Receiver im OpenTelemetry Collector oder Obseria Agent mit Endpunkt, Zugangsdaten aus Umgebungsvariablen und den zu überwachenden Datenbanken.

  3. Schritt 3

    Traces und Logs ergänzen

    Instrumentieren Sie die aufrufenden Services mit OpenTelemetry und senden Sie die PostgreSQL-Logs, damit langsame Queries mit Requests und Logzeilen verknüpft sind.

Beispielkonfiguration · YAML
receivers:
  postgresql:
    endpoint: db-primary:5432
    transport: tcp
    username: otel_monitor
    password: ${env:POSTGRESQL_PASSWORD}
    databases: [orders, billing]
    collection_interval: 30s
    tls:
      insecure: false
      ca_file: /etc/otel/pg-ca.crt
    metrics:
      postgresql.deadlocks:
        enabled: true
      postgresql.blks_hit:
        enabled: true
exporters:
  otlphttp:
    endpoint: ${env:OBSERIA_OTLP_ENDPOINT}
    headers:
      Authorization: "Bearer ${env:OBSERIA_TOKEN}"
service:
  pipelines:
    metrics:
      receivers: [postgresql]
      exporters: [otlphttp]

Sofort einsatzbereit

Dashboards, Alerts und SLOs, die bereitstehen, sobald die ersten Daten ankommen.

  • PostgreSQL-Übersicht: Verbindungen, TPS, Cache Hit Ratio
  • Replication Lag pro Standby
  • Tabellen- und Indexgröße, Scans und Vacuum
  • Alert: Backends über 80 % von max_connections
  • Alert: steigende Replikationsverzögerung oder Deadlocks
Leitfaden

PostgreSQL-Monitoring: Darauf kommt es an

Warum PostgreSQL Monitoring wichtig ist

PostgreSQL ist für viele Anwendungen das führende System für Bestellungen, Konten und Bestände. Wird die Datenbank langsam, werden alle abhängigen Services mit ihr langsam, und das Symptom zeigt sich meist weit entfernt als Timeout in einer API oder als fehlschlagender Hintergrundjob. PostgreSQL Monitoring muss drei Fragen schnell beantworten: Ist die Datenbank selbst gesund, steht sie unter ungewöhnlicher Last, und welcher Workload verursacht diese Last?

Obseria erfasst Postgres-Metriken mit dem postgresql-Receiver des OpenTelemetry Collectors, der die eingebauten Statistik-Views wie pg_stat_database, pg_stat_bgwriter und pg_stat_replication liest. Zusammen mit den Datenbank-Spans Ihrer Anwendungen hat jede Metrik einen Aufrufer.

Die PostgreSQL-Metriken, auf die es ankommt

Verbindungen

Jede Verbindung ist ein eigener Backend-Prozess mit eigenem Speicher. postgresql.backends im Vergleich zu postgresql.connection.max zeigt, wie nah Sie daran sind, neue Clients abzuweisen. Viele inaktive Verbindungen deuten meist auf einen falsch konfigurierten Pool, viele aktive auf echte Last oder Blockierungen.

Durchsatz und Fehler

postgresql.commits und postgresql.rollbacks liefern Transaktionen pro Sekunde und den Anteil fehlgeschlagener Transaktionen. Plötzliche Rollback-Spitzen folgen oft auf ein Deployment, das Constraint-Verletzungen oder Serialisierungsfehler eingeführt hat.

Cache-Effizienz

Die Cache Hit Ratio ist blks_hit / (blks_hit + blks_read). Bei OLTP-Workloads liegt sie typischerweise sehr hoch; sinkt sie, passt das Working Set nicht mehr in shared_buffers, und Queries gehen auf die Platte.

Replikation und WAL

postgresql.replication.data_delay und postgresql.wal.lag zeigen, wie weit jeder Standby zurückliegt. Hoher Lag bedeutet veraltete Lesezugriffe auf Replikas und ein größeres Risiko, bei einem Failover Schreibvorgänge zu verlieren.

Vacuum und Bloat

MVCC hinterlässt tote Tupel, die Autovacuum aufräumen muss. postgresql.table.vacuum.count zusammen mit dem Größentrend pro Tabelle zeigt Tabellen, bei denen Autovacuum nicht hinterherkommt.

Typische Probleme und wie Sie sie erkennen

  • Erschöpfte Verbindungen: Die Backends nähern sich max_connections, Clients scheitern mit "too many clients". Alarmieren Sie bei 80 % und prüfen Sie die Pool-Einstellungen der aufrufenden Services.
  • Lock-Konflikte und Deadlocks: Lang laufende Transaktionen blockieren andere. Aktivieren Sie postgresql.deadlocks und postgresql.database.locks und setzen Sie log_lock_waits = on.
  • Langsame Queries: Ein fehlender Index wird zu Sequential Scans. Setzen Sie log_min_duration_statement, aktivieren Sie die Extension pg_stat_statements und nutzen Sie Datenbank-Spans, um zu sehen, welcher Endpunkt das Statement absetzt.
  • Replication Lag: Schreibspitzen oder eine ausgelastete Replika-Platte. Korrelieren Sie Lag mit Commit-Rate und I/O der Replika.
  • Table Bloat und Transaction-ID-Wraparound: Selten gevacuumte Tabellen wachsen und erzwingen im schlimmsten Fall ein Notfall-Vacuum. Beobachten Sie Vacuum-Läufe und Größe pro Tabelle.

Best Practices für PostgreSQL Monitoring

  1. Nutzen Sie für die Metrikerfassung eine eigene Rolle mit pg_monitor statt eines Superusers.
  2. Überwachen Sie Primary und jede Replika getrennt und versehen Sie sie mit ihrer Rolle als Tag.
  3. Alarmieren Sie zuerst auf Symptome (Verbindungssättigung, Replication Lag, Fehlerrate), dann auf Ursachen.
  4. Halten Sie Query-Texte in Spans bereinigt; die meisten OpenTelemetry-Instrumentierungen ersetzen Literale standardmäßig durch Platzhalter, und die Obseria Pipeline maskiert verbleibende Werte.
  5. Verfolgen Sie Datenbankgröße und Wachstum, um Speicher zu planen, bevor Platten volllaufen.

So unterstützt Obseria Ihr PostgreSQL Monitoring

Obseria führt Postgres-Metriken, Logs und die Datenbank-Spans Ihrer Services in einem Datenmodell in Obseria Lake zusammen. TopoGraph zeigt, welche Services von welcher Datenbank abhängen. Ein Alert auf Replication Lag oder Verbindungssättigung nennt so sofort die betroffenen Anwendungen. Obseria Intelligence korreliert eine Verlangsamung mit Deployments, Query-Mustern und Host-Metriken wie Plattenlatenz und zeigt die wahrscheinliche Ursache mit einer Beweiskette. Für Managed Services wie Amazon RDS, Azure Database for PostgreSQL oder Cloud SQL ergänzen die agentenlosen Cloud-Integrationen die Metriken des Anbieters, ganz ohne Agent auf dem Datenbank-Host.

Dashboards, Alerts und SLOs sind enthalten. Sie fragen alles mit OQL, PromQL oder SQL ab, zum Beispiel um die p95-Latenz der Datenbank-Spans pro Statement vor und nach einem Release zu vergleichen.

Häufige Fragen zum PostgreSQL-Monitoring

Der OpenTelemetry-postgresql-Receiver liest Standard-Statistik-Views, die in allen aktuell gepflegten PostgreSQL-Versionen verfügbar sind. Managed-Angebote wie Amazon RDS, Aurora PostgreSQL, Azure Database for PostgreSQL und Cloud SQL funktionieren ebenso.

Eine Read-only-Rolle mit der eingebauten Rolle pg_monitor genügt. Sie kann Statistik-Views lesen, aber nicht Ihre Tabellendaten.

Kombinieren Sie drei Quellen: Datenbank-Spans aus der OpenTelemetry-Instrumentierung Ihrer Services, PostgreSQL-Logs mit log_min_duration_statement und die Extension pg_stat_statements für aggregierte Statistiken.

Ja. Der Receiver meldet postgresql.replication.data_delay in Bytes und postgresql.wal.lag in Sekunden pro Standby, und auf beide können Sie alarmieren.

Die meisten OpenTelemetry-Datenbank-Instrumentierungen bereinigen Literale standardmäßig. Die Obseria Pipeline kann sensible Werte zusätzlich beim Ingest maskieren, bevor etwas gespeichert wird.

Starten Sie heute mit dem PostgreSQL-Monitoring

Binden Sie PostgreSQL in Minuten per OpenTelemetry oder Obseria Agent an. 14 Tage kostenlos.