Zum Inhalt springen

Konfiguration der PostgreSQL-Protokollierung

Abfrageprotokollierung, log_line_prefix, Locale und ergänzende Statistikdaten für pgBadger konfigurieren

pgBadger kann nur Informationen auswerten, die PostgreSQL in das Protokoll schreibt. Beginnen Sie mit einem analysierbaren Präfix und einer gezielt gewählten Richtlinie für die Anweisungsprotokollierung. Fügen Sie anschließend die Betriebsereignisse hinzu, die Sie analysieren möchten.

Mindestkonfiguration für die Abfrageprotokollierung

Um Abfragetext und -dauer zu erfassen, aktivieren Sie die dauerabhängige Protokollierung von Anweisungen:

log_min_duration_statement = 0

0 protokolliert jede abgeschlossene Anweisung. Auf einem stark ausgelasteten Server sollten Sie einen höheren Schwellenwert in Millisekunden wählen, um das Protokollvolumen zu begrenzen. Prüfen Sie den zusätzlichen Aufwand und die Zunahme des Speicherbedarfs, bevor Sie in der Produktion einen niedrigen Schwellenwert aktivieren.

Wenn Sie nur Dauer und Anzahl der Abfragen, aber nicht den Abfragetext benötigen, verwenden Sie:

log_min_duration_statement = -1
log_duration = on

Verwenden Sie vorzugsweise log_min_duration_statement, wenn Sie Berichte über die langsamsten Abfragen und die Gesamtabfragezeit benötigen.

Erforderliche Präfixfelder

Ein benutzerdefinierter log_line_prefix muss die beiden folgenden Felder enthalten:

  • ein Zeitfeld: %t, %m oder %n;
  • ein Prozess- oder Sitzungsfeld: %p oder %c.

Ein minimales stderr-Präfix ist:

log_line_prefix = '%t [%p]: '

Ein nützlicheres Präfix protokolliert Benutzer, Datenbank, Anwendung und Client:

log_line_prefix = '%t [%p]: user=%u,db=%d,app=%a,client=%h '

Das entsprechende Präfix für ein syslog-Ziel lässt die bereits durch syslog bereitgestellten Zeitstempel- und Prozessfelder weg:

log_line_prefix = 'user=%u,db=%d,app=%a,client=%h '

Eine weitere unterstützte Reihenfolge der Schlüssel ist:

log_line_prefix = '%t [%p]: db=%d,user=%u,app=%a,client=%h '

Wenn Ihr Präfix keiner von pgBadger erkannten Form entspricht, übergeben Sie den exakten Wert mit --prefix. Geben Sie ihn genau wie in postgresql.conf an; vereinfachen oder verändern Sie ihn nicht.

Aktivieren Sie die Ereignisklassen, die im Bericht erscheinen sollen:

log_checkpoints = on
log_connections = on
log_disconnections = on
log_lock_waits = on
log_temp_files = 0
log_autovacuum_min_duration = 0
log_error_verbosity = default

Diese Einstellungen können erheblichen Protokollverkehr erzeugen. Insbesondere protokollieren log_temp_files = 0 und log_autovacuum_min_duration = 0 jedes passende Ereignis; passen Sie die Werte an die Arbeitslast und das Aufbewahrungsbudget an.

Servernachrichten auf Englisch beibehalten

Der Parser erkennt PostgreSQL-Servernachrichten auf Englisch. Verwenden Sie entweder:

lc_messages = 'en_US.UTF-8'

oder:

lc_messages = 'C'

Locale-Einstellungen wie fr_FR.UTF-8 werden vom Parser des Originalprojekts nicht unterstützt.

Widersprüchliche Einstellungen für Anweisungen vermeiden

Aktivieren Sie log_min_duration_statement, log_duration und log_statement = 'all' nicht gemeinsam. Dieselbe Ausführung kann mehrfach protokolliert werden, was die pgBadger-Zähler verfälscht und die Protokollmenge erheblich erhöht.

ZielEmpfohlene Einstellung
Abfragetext und Zeitmessunglog_min_duration_statement = 0 oder ein gewählter Schwellenwert
Dauer und Anzahl alleinlog_min_duration_statement = -1, log_duration = on
Umfassende Protokollierung von AnweisungenBehandeln Sie log_statement als separate Protokollierungsrichtlinie; kombinieren Sie die drei Einstellungen nicht für pgBadger-Statistiken

Prüfen Sie nach dem Neuladen von PostgreSQL mehrere echte Protokolleinträge, bevor Sie eine umfangreiche Analyse ausführen. Stellen Sie sicher, dass die Felder für Zeitstempel, Prozess-/Sitzungskennung, Benutzer, Datenbank, Anwendung und Client dem ausgewählten Format entsprechen.