sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo rotar los registros de PgBouncer en Linux/Windows?

Antes de profundizar en el tema, un breve resumen sobre PgBouncer, es un agrupador de conexiones liviano para PostgreSQL que reduce drásticamente el tiempo de procesamiento y los recursos para mantener una gran cantidad de conexiones de clientes a una o más bases de datos. Por lo general, se usa para aumentar la cantidad de conexiones de usuario que se pueden manejar en un entorno de alto rendimiento. Para obtener más detalles sobre la instalación/configuración de PgBouncer, consulte la documentación aquí.
Al igual que otras herramientas, PgBouncer tiene una arquitectura de registro stderr/syslog para registrar errores de conexión, desconexión y pooler_errors con diferentes niveles de detalle. A partir de ahora, la mayor parte del registro va a un solo archivo "pgbouncer.log" y crece sin cesar. A veces, puede haber un riesgo potencial de que un sistema deje de responder debido a la falta de espacio en disco en la ubicación del archivo de registro. En la actualidad, el registro de PgBouncer no tiene una configuración integrada para rotar los registros en función de la antigüedad o el tamaño, por lo que obliga a los usuarios a elegir métodos alternativos. En mi opinión, hay dos enfoques para manejarlo:-

  1. Configure PgBouncer en el método "syslog" para confiar en la rotación del registro del sistema operativo o
  2. Configure la rotación de registros utilizando las utilidades del sistema operativo en el archivo "pgbouncer.log".

Método 1:

Es bastante sencillo configurar syslog en PgBouncer, configure "syslog" en 1 (predeterminado 0); asigne un nombre para comenzar la línea de registro en los registros del sistema operativo en "syslog_ident" (predeterminado "pgbouncer") y especifique los detalles de la instalación en "syslog_facility" (demonio predeterminado). Una salida de muestra de los registros de mi sistema operativo (/var/log/messages):

5 de agosto 16:54:27 raghavt pgbouncer[62549]:C-0x1cdfe60:postgres/postgres@unix(62621):6432 intento de inicio de sesión:db=postgres user=postgres tls=no
5 de agosto 16:54:27 raghavt pgbouncer[62549]:S-0x1ce4b10:postgres/[email protected]:5432 nueva conexión al servidor (desde 127.0.0.1:38947)
5 de agosto 16 :54:27 raghavt pgbouncer[62549]:C-0x1cdfe60:postgres/postgres@unix(62621):6432 cerrando porque:solicitud de cierre del cliente (edad=0)

Nota:si "syslog" está habilitado, comente o borre el parámetro "archivo de registro", de lo contrario será un registro adicional.

Método 2:

Logrotate es una de las utilidades del sistema operativo que tiene la capacidad de rotar registros sistemáticamente y archivarlos para reducir el requisito de espacio en disco de un sistema operativo. Cada archivo de registro se puede manejar diariamente, semanalmente, mensualmente o cuando crece demasiado. Un archivo de configuración predeterminado “/etc/logrotate.conf” define la edad/tamaño/intervalo de rotación del registro. Con esta herramienta, los registros se pueden mantener por más tiempo con menos espacio en disco. Mucha gente ha comentado sobre el uso de la utilidad que puede descubrir en la red de todos modos, por lo que estoy saltando directamente a la fase de implementación.
Primero, cree un archivo de configuración en el directorio /etc/logrotate.d/ para los registros de pgbouncer . Lo he nombrado como "/etc/logrotate.d/pgbouncer" con los detalles a continuación:

/var/log/pgbouncer/pgbouncer.log {
rotar 10
missingok
sharedscripts
notifempty
nocompress
tamaño 10m
diariamente
crear 0640 postgres postgres
postrotate
/bin/kill -HUP `cat /var/pgbouncer-postgres/pgbouncer.pid 2> /dev/ null` 2>/dev/null ||true
endscript
}

Acerca del archivo de configuración, la primera línea indica la ubicación del archivo de registro de pgbouncer (valores del parámetro "archivo de registro" en el archivo pgbouncer.ini) y luego están los parámetros que funcionan en los umbrales de rotación como; cuántos archivos de registro mantener (rotar); no emita ningún error y continúe con el siguiente registro (missingok); qué script debe ejecutarse antes/después de la rotación (prerotación/postrotación); ejecutar una o varias veces secuencias de comandos anteriores/posteriores (secuencias de comandos compartidas); no rotar el registro si está vacío (notifempty); después de la rotación, se debe comprimir un archivo de registro antiguo con la utilidad gzip (compress/nocompress); sobre cuánto tamaño se debe realizar la rotación del registro (tamaño); con qué frecuencia rotar un registro en particular (diariamente); y qué permiso debe tener el nuevo archivo de registro (crear).

Ahora podemos ver nuevos archivos de registro rotados con un tamaño de 10 M. (Incluso podemos forzar la rotación con el comando “logrotate -f /etc/logrotate.conf”)

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

eso fue simple verdad , ahora comprobemos lo mismo en el entorno de Windows.

En Windows:

Sé muy poco sobre las utilidades de Windows, por lo que busqué en Google y encontré una utilidad de versión de Windows llamada "LogRotateWin" que funciona igual que la versión Linux de logrotate. Para obtener más detalles, consulte la documentación detallada disponible en Instalación/Configuración/Uso aquí.
Veamos cómo funciona, primero descargue la versión ".msi" de LogRotateWin disponible en el sitio como archivo “logrotateSetup*.zip”. Extraiga y ejecute el archivo “.msi”, instalará la utilidad en la ubicación “c:Program Files (x86)LogRotate”. Puede encontrar el archivo de configuración predeterminado (logrotate.conf) en "c:Archivos de programa (x86)LogRotateContent".
A continuación, edite el archivo "c:Archivos de programa (x86)LogRotateContentlogrotate.conf" y especifique la ruta completa del archivo “pgbouncer.log” con los mismos parámetros de rotación. Una copia de muestra de mi archivo de configuración probado en Windows 10. (Nota:los valores de los parámetros a continuación se usan para probar la utilidad)

c:Archivos de programa (x86)LogRotateContent>more logrotate.conf
“c:Archivos de programa (x86)PgBouncerlogpgbouncer.log” {
rotar 10
copytruncate
create
missingok
sharedscripts
nocompress
tamaño 200k
diariamente
}

Para verificar, he forzado la rotación del registro con la opción “-f”

c:Archivos de programa (x86)LogRotate>logrotate.exe -f Contentlogrotate.conf
logrotate:opción Forzar establecida en verdadero

Aquí está el resultado:

C:Archivos de programa (x86)PgBouncerlog>dir
El volumen en la unidad C no tiene etiqueta.
El número de serie del volumen es F226-9FFB

Directorio de C:Archivos de programa (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 Archivo(s) 19,878 bytes
2 Dir(s) 26 905 051 136 bytes libres

¡¡¡Muy bien !!!.
En la mayoría de las distribuciones de Linux, logrotate se ejecuta diariamente usando "logrotate.conf" como parte de cronjob, de manera similar en Windows, podemos programar una tarea en el Programador de tareas de Windows para rotar los registros diariamente. Para su información, no he explorado mucho sobre la utilidad "LogRotateWin", solo un nivel básico. En caso de que encuentre algún problema, publíquelo en el foro de discusión general de logrotate.
Gracias por leer.
–Raghav