PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie rotiere ich PgBouncer-Protokolle unter Linux/Windows?

Bevor Sie tief in das Thema eintauchen, ein kurzer Überblick über PgBouncer, einen leichten Verbindungspooler für PostgreSQL, der die Verarbeitungszeit und die Ressourcen für die Aufrechterhaltung einer großen Anzahl von Clientverbindungen zu einer oder mehreren Datenbanken drastisch reduziert. Wird normalerweise verwendet, um die Anzahl der Benutzerverbindungen zu erhöhen, die in einer Hochleistungsumgebung verarbeitet werden können. Weitere Einzelheiten zum Installieren/Konfigurieren von PgBouncer finden Sie in der Dokumentation hier.
Wie andere Tools verfügt PgBouncer über eine  stderr/syslog-Protokollierungsarchitektur, um Verbindungs-, Trennungs- und  pooler_errors mit unterschiedlichen Ausführlichkeitsstufen aufzuzeichnen. Ab sofort geht der größte Teil der Protokollierung in eine einzige Datei „pgbouncer.log“ und wächst endlos. Manchmal besteht das potenzielle Risiko, dass ein System aufgrund von Speicherplatzmangel am Speicherort der Protokolldatei nicht mehr reagiert. Derzeit verfügt die PgBouncer-Protokollierung über keine integrierte Konfiguration zum Rotieren von Protokollen auf der Grundlage von Alter oder Größe, sodass Benutzer gezwungen sind, alternative Methoden zu wählen. IMO, es gibt zwei Ansätze, um damit umzugehen:-

  1. Konfigurieren Sie PgBouncer in der „syslog“-Methode, um sich auf die Protokollrotation des Betriebssystems zu verlassen, oder
  2. Konfigurieren Sie die Protokollrotation mithilfe von Betriebssystemdienstprogrammen in der Datei „pgbouncer.log“.

Methode 1:

Es ist ziemlich einfach, Syslog in PgBouncer zu konfigurieren, setzen Sie „syslog“ auf 1 (Standard 0); Geben Sie einen Namen an, um die Protokollzeile in den Betriebssystemprotokollen in „syslog_ident“ (Standard „pgbouncer“) zu beginnen, und geben Sie die Einrichtungsdetails in „syslog_facility“ (Standard-Daemon) an. Eine Beispielausgabe meiner Betriebssystemprotokolle (/var/log/messages):

5. August 16:54:27 raghavt pgbouncer[62549]:C-0x1cdfe60:postgres/postgres@unix(62621):6432 Anmeldeversuch:db=postgres user=postgres tls=nein
5. August 16:54:27 raghavt pgbouncer[62549]:S-0x1ce4b10:postgres/[email protected]:5432 neue Verbindung zum Server (von 127.0.0.1:38947)
5. August 16 :54:27 raghavt pgbouncer[62549]:C-0x1cdfe60:postgres/postgres@unix(62621):6432 wird geschlossen, weil:Client-Schließanforderung (Alter=0)

Hinweis:Wenn „syslog“ aktiviert ist, kommentieren Sie den Parameter „logfile“ aus oder löschen Sie ihn, da es sonst zu einer zusätzlichen Protokollierung kommt.

Methode 2:

Logrotate ist eines der Betriebssystem-Dienstprogramme, das Protokolle systematisch rotieren und archivieren kann, um den Speicherplatzbedarf eines Betriebssystems zu reduzieren. Jede Protokolldatei kann täglich, wöchentlich, monatlich oder wenn sie zu groß wird, bearbeitet werden. Eine Standardkonfigurationsdatei „/etc/logrotate.conf“ definiert Alter/Größe/Intervall der Protokollrotation. Mit diesem Tool können Protokolle länger mit weniger Speicherplatz aufbewahrt werden. Viele Leute haben sich über die Verwendung des Dienstprogramms geäußert, das Sie sowieso über das Internet entdecken können, und springen daher direkt in die Implementierungsphase.
Erstellen Sie zuerst eine Konfigurationsdatei im Verzeichnis /etc/logrotate.d/ für pgbouncer-Protokolle . Ich habe es als „/etc/logrotate.d/pgbouncer“ mit den folgenden Details benannt:

/var/log/pgbouncer/pgbouncer.log {
rotate 10
missingok
sharedscripts
notifempty
nocompress
Größe 10m
täglich
erstelle 0640 postgres postgres
postrotate
/bin/kill -HUP `cat /var/pgbouncer-postgres/pgbouncer.pid 2> /dev/ null` 2>/dev/null ||true
endscript
}

In Bezug auf die Konfigurationsdatei gibt die erste Zeile den Speicherort der pgbouncer-Protokolldatei an („logfile“-Parameterwerte in der Datei pgbouncer.ini) und als Nächstes die Parameter, die auf Rotationsschwellenwerte wirken, wie z. wie viele Protokolldateien gepflegt (rotiert) werden sollen; keinen Fehler ausgeben und zum nächsten Log weitergehen (missingok); welches Skript soll vor/nach der Rotation ausgeführt werden (prerotate/postrotate); Pre-/Post-Skripte (Sharedscripts) einmal oder mehrmals ausführen; Rotieren Sie das Protokoll nicht, wenn es leer ist (notifempty); Nach der Rotation sollte eine alte Protokolldatei mit dem gzip-Dienstprogramm komprimiert werden (compress/nocompress); auf wie viel Größe die Protokollrotation durchgeführt werden soll (Größe); wie oft soll ein bestimmtes Protokoll gedreht werden (täglich); und welche Berechtigung neue Logdatei haben soll (erstellen).

Jetzt können wir neue Protokolldateien sehen, die mit einer Größe von 10 M rotiert sind. (Wir können die Rotation sogar mit dem Befehl „logrotate -f /etc/logrotate.conf“ erzwingen)

[[email protected] pgbouncer]# ls -lrth
insgesamt 16K
-rw-r—–. 1 postgres postgres 10M 27. Juli 15:30 pgbouncer.log-20160727
-rw-r—–. 1 postgres postgres 11K 27. Juli 18:32 pgbouncer.log

Das war einfach richtig , jetzt können wir dasselbe in der Windows-Umgebung überprüfen.

Unter Windows:

Ich weiß sehr wenig über Windows-Dienstprogramme, daher habe ich etwas gegoogelt und ein Dienstprogramm der Windows-Version namens „LogRotateWin“ gefunden die genauso funktioniert wie die Linux-Version von logrotate. Weitere Einzelheiten finden Sie in der detaillierten Dokumentation, die unter Installation/Konfiguration/Verwendung hier verfügbar ist.
Mal sehen, wie es funktioniert, laden Sie zuerst die „.msi“-Version von LogRotateWin herunter, die auf der Website verfügbar ist als „logrotateSetup*.zip“-Datei. Extrahieren Sie die „.msi“-Datei und führen Sie sie aus. Das Dienstprogramm wird am Speicherort „c:Program Files (x86)LogRotate“ installiert. Sie finden die Standardkonfigurationsdatei (logrotate.conf) unter „c:Program Files (x86)LogRotateContent“.
Bearbeiten Sie als Nächstes die Datei „c:Program Files (x86)LogRotateContentlogrotate.conf“ und geben Sie den vollständigen Pfad an der Datei „pgbouncer.log“ mit denselben Rotationsparametern. Eine Beispielkopie meiner Konfigurationsdatei, die unter Windows 10 getestet wurde. (Hinweis:Die folgenden Parameterwerte werden zum Testen des Dienstprogramms verwendet)

c:Program Files (x86)LogRotateContent>more logrotate.conf
“c:Program Files (x86)PgBouncerlogpgbouncer.log” {
rotate 10
copytruncate
create
missingok
sharedscripts
nocompress
Größe 200k
täglich
}

Zur Überprüfung habe ich die Protokollrotation mit der Option „-f“ erzwungen

c:Program Files (x86)LogRotate>logrotate.exe -f Contentlogrotate.conf
logrotate:Force-Option auf true gesetzt

Hier ist das Ergebnis:

C:Program Files (x86)PgBouncerlog>dir
Volume in Laufwerk C hat keine Bezeichnung.
Volume-Seriennummer ist F226-9FFB

Verzeichnis der C:Programmdateien (x86)PgBouncerlog

08.08.2016 13:31

.
08.08.2016 13:31 ..
08.08.2016 13:31 0 pgbouncer.log
08.08.2016 13:31 6.626 pgbouncer.log.1
08.08.2016 13:31 13.252 pgbouncer.log.2
3 Datei(en) 19.878 bytes
2 Dir(s) 26.905.051.136 Byte frei

Schön richtig !!!.
Bei den meisten Linux-Distributionen wird logrotate täglich mit „logrotate.conf“ als Teil des Cronjobs ausgeführt, ähnlich können wir unter Windows eine Aufgabe im Windows-Taskplaner planen, um die Protokolle täglich zu rotieren. Zu Ihrer Information, ich habe nicht viel über das Dienstprogramm „LogRotateWin“ erforscht, nur auf einer grundlegenden Ebene. Falls Sie auf ein Problem stoßen, posten Sie es bitte im  allgemeinen Diskussionsforum von logrotate.
Vielen Dank fürs Lesen.
–Raghav