sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur roterar man PgBouncer-loggar i Linux/Windows?

Innan du gör en djupdykning i ämnet, en kort beskrivning av PgBouncer, det är en lätt anslutningspooler för PostgreSQL som dramatiskt minskar bearbetningstiden och resurserna för att upprätthålla ett stort antal klientanslutningar till en eller flera databaser. Används vanligtvis för att öka antalet användaranslutningar som kan hanteras i en högpresterande miljö. För mer information om att installera/konfigurera PgBouncer, se dokumentationen här.
Precis som andra verktyg har PgBouncer en  stderr/syslog-loggningsarkitektur för att registrera anslutning, frånkoppling och  pooler_errors med olika utförlighetsnivåer. Från och med nu går större delen av loggning till en enda fil "pgbouncer.log" och växer i det oändliga. Ibland kan det vara en potentiell risk att ett system inte svarar på grund av brist på diskutrymme på loggfilens plats. För närvarande har PgBouncer-loggning ingen inbyggd konfiguration för att rotera loggar på basis av ålder eller storlek, därför tvingar den användare att välja alternativa metoder. IMO, det finns två sätt att hantera det:-

  1. Konfigurera PgBouncer i "syslog"-metoden för att lita på OS-loggrotation eller
  2. Konfigurera loggrotation med OS-verktyg i filen "pgbouncer.log".

Metod 1:

Det är ganska enkelt att konfigurera syslog i PgBouncer, ställ in "syslog" till 1 (standard 0); ge ett namn för att börja loggraden i OS-loggarna i "syslog_ident" (standard 'pgbouncer') och ange anläggningsdetaljerna i "syslog_facility" (standarddemon). Ett exempel på utdata från mina OS-loggar(/var/log/messages):

5 aug 16:54:27 raghavt pgbouncer[62549]:C-0x1cdfe60:postgres/postgres@unix(62621):6432 inloggningsförsök:db=postgres user=postgres tls=nej
5 aug 16:54:27 raghavt pgbouncer[62549]:S-0x1ce4b10:postgres/[email protected]:5432 ny anslutning till server (från 127.0.0.1:38947)
6Aug :54:27 raghavt pgbouncer[62549]:C-0x1cdfe60:postgres/postgres@unix(62621):6432 stänger eftersom:klientavslutningsbegäran (ålder=0)

Obs:Om "syslog" är aktiverat, kommentera eller töm parametern "logfile", annars blir det ytterligare loggning.

Metod 2:

Logrotate är ett av OS-verktygen som har en förmåga att rotera loggar systematiskt och arkivera för att minska ett operativsystems diskutrymmesbehov. Varje loggfil kan hanteras dagligen, veckovis, månadsvis eller när den blir för stor. En standardkonfigurationsfil "/etc/logrotate.conf" definierar loggrotationens ålder/storlek/intervall. Med hjälp av detta verktyg kan loggar sparas längre med mindre diskutrymme. Många människor har formulerat om användningen av verktyget som du kan upptäcka det över nätet i alla fall, så jag hoppar direkt in i implementeringsfasen.
Skapa först en konfigurationsfil i katalogen /etc/logrotate.d/ för pgbouncer-loggar . Jag har döpt den till "/etc/logrotate.d/pgbouncer" med nedanstående detaljer:

/var/log/pgbouncer/pgbouncer.log {
rotera 10
missingok
sharedscripts
notifempty
nocompress
storlek 10m
dagligen
skapa 0640 postgres postgres
postrotate
/bin/kill -HUP `cat /var/pgbouncer-postgres/pgbouncer.pid 2> /dev/ null` 2>/dev/null ||true
endscript
}

Angående konfigurationsfilen, första raden anger pgbouncer loggfilens plats (“logfile” parametervärden i pgbouncer.ini filen) och nästa är parametrarna som fungerar på rotationströsklar som; hur många loggfiler som ska underhållas (rotera); utfärda inget fel och gå vidare till nästa logg (missingok); vilket skript som ska köras före/efter rotation (förrotera/efterrotera); kör en eller flera gånger före/efter skript (delade skript); rotera inte loggen om den är tom (notifempty); efter rotation bör en gammal loggfil komprimeras med verktyget gzip (compress/nocompress); på hur mycket storlek stock rotation bör utföras (storlek); hur ofta man roterar en viss stock (dagligen); och vilken behörighet ny loggfil ska vara (skapa).

Nu kan vi se nya loggfiler roterade med 10 miljoner storlek. (Vi kan till och med tvinga fram rotationen med kommandot “logrotate -f /etc/logrotate.conf”)

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

Det var enkelt rätt , låter nu kontrollera detsamma i Windows-miljön.

I Windows:

Jag kan mycket mindre om Windows-verktyg, därför googlade jag lite och hittade ett Windows-versionsverktyg som heter “LogRotateWin” som fungerar på samma sätt som Linux-versionen av logrotate. Mer information finns i den detaljerade dokumentationen som finns tillgänglig om installation/konfiguration/användning här.
Låt oss se hur det fungerar, ladda först ned ".msi"-versionen av LogRotateWin som finns tillgänglig på webbplatsen som "logrotateSetup*.zip"-fil. Extrahera och kör ".msi"-filen, den kommer att installera verktyget till "c:Program Files (x86)LogRotate"-platsen. Du kan hitta standardkonfigurationsfilen (logrotate.conf) under "c:Program Files (x86)LogRotateContent".
Redigera sedan filen "c:Program Files (x86)LogRotateContentlogrotate.conf" och ange den fullständiga sökvägen av filen "pgbouncer.log" med samma rotationsparametrar. En exempelkopia av min konfigurationsfil testad i Windows 10. (Obs:Nedanstående parametervärden används för att testa verktyget)

c:Program Files (x86)LogRotateContent>mer logrotate.conf
“c:Program Files (x86)PgBouncerlogpgbouncer.log” {
rotate 10
copytruncate
skapa
missingok
sharedscripts
nocompress
storlek 200k
dagligen
}

För att verifiera har jag tvingat loggrotationen med alternativet "-f"

c:Program Files (x86)LogRotate>logrotate.exe -f Contentlogrotate.conf
logrotate:Tvinga alternativet satt till true

Här är resultatet:

C:Program Files (x86)PgBouncerlog>dir
Volymen i enhet C har ingen etikett.
Volymens serienummer är F226-9FFB

Katalog med C:Program Files (x86)PgBouncerlog

08/08/2016 01:31 PM

.
08/08/2016 01:31 PM ..
08/08/2016 13:31 PM 0 pgbouncer.log
08/08/2016 13:31 6 626 pgbouncer.log.1
08/08/2016 01:31 PM 13 252 pgbouncer.log.2
3 fil(er) 19 878 byte
2 Dir(s) 26 905 051 136 byte lediga

Bra va!!!.
På de flesta Linux-distributioner körs logrotate dagligen med "logrotate.conf" som en del av cronjob, på samma sätt på Windows kan vi schemalägga en uppgift i Windows Task Scheduler för att rotera loggarna dagligen. FYI, jag har inte utforskat mycket om "LogRotateWin" verktyg bara en grundläggande nivå. Om du stöter på något problem, lägg upp det på  loggrotera allmänt diskussionsforum.
Tack för att du läste.
–Raghav


  1. Kan inte ansluta till MySQL från Java:NullPointerException inuti MySQL-drivrutinanslutningslogiken

  2. Hur inaktiverar jag referensintegritet i Postgres 8.2?

  3. Databasunderställning – Hur man gör i IRI Voracity

  4. SQL Server 2017 Management Tools