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

Hvordan roterer man PgBouncer-logfiler i Linux/Windows?

Før et dybt dyk ned i emnet, en kort oversigt om PgBouncer, det er en letvægtsforbindelsespooler til PostgreSQL, der dramatisk reducerer behandlingstiden og ressourcerne til at opretholde et stort antal klientforbindelser til en eller flere databaser. Anvendes typisk til at øge antallet af brugerforbindelser, der kan håndteres i et højtydende miljø. For flere detaljer om installation/konfiguration af PgBouncer henvises til dokumentationen her.
Ligesom andre værktøjer har PgBouncer en  stderr/syslog-logningsarkitektur til at registrere forbindelse, afbrydelse og  pooler_errors med forskellige detaljeringsniveauer. Lige nu går størstedelen af ​​logningen til en enkelt fil "pgbouncer.log" og vokser uendeligt. Nogle gange kan det være en potentiel risiko for, at et system ikke reagerer på grund af manglende diskplads på logfilens placering. På nuværende tidspunkt har PgBouncer-logning ingen indbygget konfiguration til at rotere logfiler på basis af alder eller størrelse, og derfor tvinger det brugere til at vælge alternative metoder. IMO, der er to tilgange til at håndtere det:-

  1. Konfigurer PgBouncer i "syslog"-metoden til at stole på OS-logrotation eller
  2. Konfigurer logrotation ved hjælp af OS-værktøjer på filen "pgbouncer.log".

Metode 1:

Det er ret ligetil at konfigurere syslog i PgBouncer, sæt "syslog" til 1 (standard 0); giv et navn for at begynde loglinjen i OS-logfiler i "syslog_ident" (standard 'pgbouncer') og angiv facilitetsdetaljerne i "syslog_facility" (standarddæmon). Et eksempel på output fra mine OS-logfiler(/var/log/messages):

5. august 16:54:27 raghavt pgbouncer[62549]:C-0x1cdfe60:postgres/postgres@unix(62621):6432 loginforsøg:db=postgres user=postgres tls=no
Aug 5 16:54:27 raghavt pgbouncer[62549]:S-0x1ce4b10:postgres/[email protected]:5432 ny forbindelse til server (fra 127.0.0.1:38947)
6Aug :54:27 raghavt pgbouncer[62549]:C-0x1cdfe60:postgres/postgres@unix(62621):6432 lukker fordi:klientlukningsanmodning (alder=0)

Bemærk:Hvis "syslog" er aktiveret, skal du kommentere eller slette parameteren "logfile", ellers vil det være yderligere logning.

Metode 2:

Logrotate er et af OS-værktøjerne, der har en evne til at rotere logs systematisk og arkivere for at reducere et operativsystems diskpladsbehov. Hver logfil kan håndteres dagligt, ugentligt, månedligt, eller når det bliver for stort. En standard konfigurationsfil "/etc/logrotate.conf" definerer logrotationens alder/størrelse/interval. Ved at bruge dette værktøj kan logfiler opbevares længere med mindre diskplads. Mange mennesker har artikuleret om brugen af ​​værktøjet, som du kan finde det over nettet alligevel, og derfor hopper jeg direkte ind i implementeringsfasen.
Opret først en konfigurationsfil i mappen /etc/logrotate.d/ til pgbouncer-logfiler . Jeg har navngivet det som "/etc/logrotate.d/pgbouncer" med nedenstående detaljer:

/var/log/pgbouncer/pgbouncer.log {
rotér 10
missingok
sharedscripts
notifempty
nocompress
størrelse 10m
dagligt
opret 0640 postgres postgres
postrotate
/bin/kill -HUP `cat /var/pgbouncer-postgres/pgbouncer.pid 2> /dev/ null` 2>/dev/null ||true
endscript
}

Om konfigurationsfilen, første linje angiver pgbouncer-logfilens placering(“logfile”-parameterværdier i pgbouncer.ini-filen), og dernæst er de parametre, der virker på rotationstærskler som; hvor mange logfiler der skal vedligeholdes (rotere); udstede ingen fejl og gå videre til næste log (missingok); hvilket script skal udføres før/efter rotation (prerotate/postrotate); køre en eller flere gange før/efter scripts (sharedscripts); roter ikke loggen, hvis den er tom (notifempty); efter rotation skal en gammel logfil komprimeres med gzip-værktøjet (compress/nocompress); på hvor meget størrelse log rotation skal udføres (størrelse); hvor ofte man skal rotere en bestemt log (dagligt); og hvilken tilladelse ny logfil skal være (opret).

Nu kan vi se nye logfiler roteret med 10M størrelse. (Vi kan endda gennemtvinge rotationen med kommandoen "logrotate -f /etc/logrotate.conf")

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

Det var ret simpelt , lad os nu tjekke det samme i Windows-miljøet.

På Windows:

Jeg ved meget mindre om Windows-værktøjer, og derfor googlede jeg noget og fandt et Windows-versionsværktøj kaldet “LogRotateWin” som fungerer på samme måde som Linux-versionen af ​​logrotate. For flere detaljer henvises til den detaljerede dokumentation tilgængelig om installation/konfiguration/brug her.
Lad os se, hvordan det virker, download først ".msi"-versionen af ​​LogRotateWin, der er tilgængelig på webstedet som "logrotateSetup*.zip"-fil. Udpak og kør ".msi"-filen, den vil installere værktøjet til "c:Program Files (x86)LogRotate"-placeringen. Du kan finde standardkonfigurationsfilen (logrotate.conf) under "c:Program Files (x86)LogRotateContent".
Rediger derefter filen "c:Program Files (x86)LogRotateContentlogrotate.conf" og angiv den fulde sti af "pgbouncer.log" fil med samme rotationsparametre. En prøvekopi af min konfigurationsfil testet på Windows 10. (Bemærk:Nedenstående parameterværdier bruges til at teste værktøjet)

c:Program Files (x86)LogRotateContent>mere logrotate.conf
“c:Program Files (x86)PgBouncerlogpgbouncer.log” {
rotate 10
copytruncate
opret
missingok
sharedscripts
nocompress
størrelse 200k
dagligt
}

For at bekræfte har jeg tvunget logrotation med "-f" mulighed

c:Program Files (x86)LogRotate>logrotate.exe -f Contentlogrotate.conf
logrotate:Tving indstillingen sat til true

Her er resultatet:

C:Program Files (x86)PgBouncerlog>dir
Lydstyrken i drev C har ingen etiket.
Lydstyrkens serienummer er F226-9FFB

Katalog over C:Program Files (x86)PgBouncerlog

08/08/2016 01:31 PM

.
08/08/2016 01:31 PM ..
08/08/2016 01:31 PM 0 pgbouncer.log
08/08/2016 13:31 6.626 pgbouncer.log.1
08/08/2016 13:31 13.252 pgbouncer.log.2
3 fil(er) 19.878 bytes
2 Dir(s) 26.905.051.136 bytes ledig

Nice right!!!.
På de fleste Linux-distributioner kører logrotate dagligt ved hjælp af "logrotate.conf" som en del af cronjob, ligesom på Windows, kan vi planlægge en opgave i Windows Task Scheduler til at rotere logfilerne dagligt. FYI, jeg har ikke udforsket meget om "LogRotateWin"-værktøjet, bare et grundlæggende niveau. Hvis du støder på et problem, bedes du skrive det på  logrotér det generelle diskussionsforum.
Tak, fordi du læste med.
–Raghav


  1. Hvordan formaterer man bigint-felt til en dato i Postgresql?

  2. PostgreSQL 12:Fremmednøgler og opdelte tabeller

  3. Håndtering af transaktioner i MySQL

  4. Sådan ÆNDRES flere kolonner på én gang i SQL Server