PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come ruotare i log di PgBouncer in Linux/Windows?

Prima di approfondire l'argomento, una breve descrizione di PgBouncer, è un pooler di connessioni leggero per PostgreSQL che riduce drasticamente il tempo di elaborazione e le risorse per mantenere un gran numero di connessioni client a uno o più database. In genere utilizzato per aumentare il numero di connessioni utente che possono essere gestite in un ambiente ad alte prestazioni. Per maggiori dettagli sull'installazione/configurazione di PgBouncer, fai riferimento alla documentazione qui.
Come altri strumenti, PgBouncer dispone di un'architettura di registrazione stderr/syslog per registrare connessioni, disconnessioni e pooler_error con diversi livelli di dettaglio. A partire da ora, la maggior parte della registrazione va in un singolo file "pgbouncer.log" e cresce all'infinito. A volte, potrebbe essere un potenziale rischio che un sistema non risponda a causa della mancanza di spazio su disco nella posizione del file di registro. Al momento, la registrazione di PgBouncer non ha una configurazione integrata per ruotare i registri in base all'età o alle dimensioni, quindi costringe gli utenti a scegliere metodi alternativi. IMO, ci sono due approcci per gestirlo :-

  1. Configura PgBouncer nel metodo "syslog" per fare affidamento sulla rotazione del registro del sistema operativo o
  2. Configura la rotazione del registro utilizzando le utilità del sistema operativo nel file "pgbouncer.log".

Metodo 1:

È abbastanza semplice configurare syslog in PgBouncer, impostare "syslog" su 1 (predefinito 0); dare un nome per iniziare la riga di registro nei registri del sistema operativo in "syslog_ident" (predefinito "pgbouncer") e specificare i dettagli della struttura in "syslog_facility" (demone predefinito). Un output di esempio dai miei log del sistema operativo(/var/log/messages):

Aug 5 16:54:27 raghavt pgbouncer[62549]:C-0x1cdfe60:postgres/postgres@unix(62621):6432 tentativo di accesso:db=postgres user=postgres tls=no
Aug 5 16:54:27 raghavt pgbouncer[62549]:S-0x1ce4b10:postgres/[email protected]:5432 nuova connessione al server (da 127.0.0.1:38947)
Aug 5 16 :54:27 raghavt pgbouncer[62549]:C-0x1cdfe60:postgres/postgres@unix(62621):6432 chiusura perché:richiesta di chiusura del client (età=0)

Nota:se "syslog" è abilitato, commenta o cancella il parametro "file di registro", altrimenti sarà una registrazione aggiuntiva.

Metodo 2:

Logrotate è una delle utility del sistema operativo che ha la capacità di ruotare i registri sistematicamente e archiviarli per ridurre il requisito di spazio su disco di un sistema operativo. Ogni file di registro può essere gestito giornalmente, settimanalmente, mensilmente o quando diventa troppo grande. Un file di configurazione predefinito "/etc/logrotate.conf" definisce l'età/dimensione/intervallo di rotazione del registro. Utilizzando questo strumento i registri possono essere conservati più a lungo con meno spazio su disco. Molte persone si sono articolate sull'utilizzo dell'utilità che puoi comunque scoprire in rete, quindi sto saltando direttamente nella fase di implementazione.
In primo luogo, crea un file di configurazione nella directory /etc/logrotate.d/ per i log di pgbouncer . L'ho chiamato "/etc/logrotate.d/pgbouncer" con i dettagli seguenti:

/var/log/pgbouncer/pgbouncer.log {
ruota 10
missingok
script condivisi
notifempty
nocompress
dimensione 10 m
ogni giorno
crea 0640 postgres postgres
postrotate
/bin/kill -HUP `cat /var/pgbouncer-postgres/pgbouncer.pid 2> /dev/ null` 2>/dev/null ||true
endscript
}

Per quanto riguarda il file di configurazione, la prima riga indica la posizione del file di log di pgbouncer (valori dei parametri "file di registro" nel file pgbouncer.ini) e la successiva sono i parametri che funzionano sulle soglie di rotazione come; quanti file di registro mantenere (ruotare); non emettere errori e passare al registro successivo (missingok); quale script deve essere eseguito prima/dopo la rotazione (prerotazione/postrotazione); eseguire una o più volte gli script pre/post (sharedscript); non ruotare il log se è vuoto (notifempty); dopo la rotazione un vecchio file di log dovrebbe essere compresso con l'utility gzip (compress/nocompress); su quante dimensioni deve essere eseguita la rotazione del registro (dimensione); con quale frequenza ruotare un determinato registro (giornaliero); e quale autorizzazione dovrebbe essere il nuovo file di registro (creare).

Ora possiamo vedere i nuovi file di registro ruotati con una dimensione di 10 M. (Possiamo anche forzare la rotazione con il comando “logrotate -f /etc/logrotate.conf”)

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

Era semplice, vero , ora controlliamo lo stesso in ambiente Windows.

Su Windows:

So molto meno delle utilità di Windows, di conseguenza ho cercato su Google e ho trovato un'utilità per la versione di Windows chiamata "LogRotateWin" che funziona come la versione Linux di logrotate. Per maggiori dettagli, fare riferimento alla documentazione dettagliata disponibile su Installazione/Configurazione/Utilizzo qui.
Vediamo come funziona, prima scarica la versione “.msi” di LogRotateWin disponibile sul sito come file “logrotateSetup*.zip”. Estrarre ed eseguire il file ".msi", installerà l'utilità nella posizione "c:Program Files (x86)LogRotate". È possibile trovare il file di configurazione predefinito (logrotate.conf) in "c:Program Files (x86)LogRotateContent".
Successivamente, modificare il file "c:Program Files (x86)LogRotateContentlogrotate.conf" e specificare il percorso completo del file “pgbouncer.log” con gli stessi parametri di rotazione. Una copia di esempio del mio file di configurazione testato su Windows 10. (Nota:i valori dei parametri di seguito vengono utilizzati per testare l'utilità)

c:Programmi (x86)LogRotateContent>più logrotate.conf
“c:Programmi (x86)PgBouncerlogpgbouncer.log” {
ruota 10
copytruncate
crea
missingok
script condivisi
nocompress
dimensione 200k
ogni giorno
}

Per verificare, ho forzato la rotazione del log con l'opzione “-f”

c:Programmi (x86)LogRotate>logrotate.exe -f Contentlogrotate.conf
logrotate:Forza l'opzione impostata su true

Ecco il risultato:

C:Program Files (x86)PgBouncerlog>dir
Il volume nell'unità C non ha etichetta.
Il numero di serie del volume è F226-9FFB

Directory di C:Programmi (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 File 19.878 byte
2 Dir(s) 26.905.051.136 byte liberi

Bello proprio !!!.
Sulla maggior parte delle distribuzioni Linux, logrotate viene eseguito quotidianamente utilizzando "logrotate.conf" come parte di cronjob, allo stesso modo su Windows, possiamo pianificare un'attività nell'Utilità di pianificazione di Windows per ruotare i registri ogni giorno. Cordiali saluti, non ho esplorato molto sull'utilità "LogRotateWin" solo a livello di base. Nel caso, se riscontri un problema, pubblicalo sul forum di discussione generale di logrotate.
Grazie per aver letto.
–Raghav