¿Es posible excluir usuarios específicos en la actividad de registro de PostgreSQL?


10

Necesito monitorear la actividad de los usuarios en nuestras bases de datos. He establecido los siguientes parámetros en postgresql.conf:

log_min_duration_statement = 0
log_connections = on
log_disconnections = on
log_line_prefix = '%t %a %d %h %u |'

Sin embargo, me doy cuenta de que la mayoría de los archivos de registro están llenos de declaraciones ejecutadas por el postgresusuario, que se utilizan mediante scripts que escribí para tareas de mantenimiento: recalcular vistas materializadas, pg_dump, pg_restore, extraer vistas como archivos tabulados, etc. El resultado es diario archivos de registro que tengan más de 12 Mb de tamaño.

¿Hay alguna manera de excluir la actividad de usuarios específicos del registro?


3
IIRC, ALTER USER ... SET log_connections = offetc.
Craig Ringer

Brillante, lo haré.
Sébastien Clément

1
@CraigRinger se conectó como dezso(un superusuario), siempre ERROR: parameter "log_connections" cannot be set after connection startALTER ROLE bob SET log_connections = off
aparece

@dezso Drat. Parte de por qué califiqué con el IIRC ... no estaba seguro.
Craig Ringer

1
@CraigRinger He intentado esto ayer, pensando que era posible, luego voté por la pregunta: D
dezso

Respuestas:


5

Usando el ALTER ROLE ... SET parameter;comando, fue posible personalizar los parámetros de registro específicos del usuario. Tenga en cuenta que el parámetro solo tiene efecto después de cerrar sesión.

Configuración de log_min_duration_statement = -1 (primer inicio de sesión):

consola psql

P:\>psql -U postgres -h 132.156.208.45 -d my_db

my_db=# SHOW log_min_duration_statement;
 log_min_duration_statement
----------------------------
 0
(1 ligne)

my_db=# SELECT COUNT(*) FROM organisms;
 count
-------
   153
(1 ligne)

my_db=# ALTER ROLE postgres SET log_min_duration_statement=-1;
ALTER ROLE

my_db=# SHOW log_min_duration_statement;
 log_min_duration_statement
----------------------------
 0
(1 ligne)

my_db=# SELECT COUNT(*) FROM mv_rings;
 count
--------
 115270
(1 ligne)

my_db=# \q

Resultado en el registro:

Tenga en cuenta que dentro de esa sesión, todas las declaraciones son visibles en el registro incluso después de configurar log_min_duration_statement = -1.

2015-10-15 14:14:01 EDT [unknown] my_db 123.456.789.012 postgres |LOG:  connection authorized: user=postgres database=my_db
2015-10-15 14:14:08 EDT psql my_db 123.456.789.012 postgres |LOG:  duration: 0.000 ms  statement: SHOW log_min_duration_statement;
2015-10-15 14:15:26 EDT psql my_db 123.456.789.012 postgres |LOG:  duration: 32.000 ms  statement: SELECT COUNT(*) FROM organisms;
2015-10-15 14:15:45 EDT psql my_db 123.456.789.012 postgres |LOG:  duration: 31.000 ms  statement: ALTER ROLE postgres SET log_min_duration_statement=-1;
2015-10-15 14:16:08 EDT psql my_db 123.456.789.012 postgres |LOG:  duration: 0.000 ms  statement: SHOW log_min_duration_statement;
2015-10-15 14:17:10 EDT psql my_db 123.456.789.012 postgres |LOG:  duration: 2059.000 ms  statement: SELECT COUNT(*) FROM mv_rings;
2015-10-15 14:17:29 EDT psql my_db 123.456.789.012 postgres |LOG:  disconnection: session time: 0:03:27.450 user=postgres database=my_db host=123.456.789.012 port=65269

Al ver el efecto de log_min_duration_statement (segundo inicio de sesión):

consola psql

P:\>psql -U postgres -h 132.156.208.45 -d my_db

my_db=# SHOW log_min_duration_statement;
 log_min_duration_statement
----------------------------
 -1
(1 ligne)

my_db=# SELECT COUNT(*) FROM germplasms;
 count
--------
 475290
(1 ligne)

my_db=# \q

Resultado en el registro:

Como se esperaba, ninguna de las declaraciones se registra.

2015-10-15 14:17:44 EDT [unknown] my_db 123.456.789.012 postgres |LOG:  connection authorized: user=postgres database=my_db
2015-10-15 14:20:27 EDT psql my_db 123.456.789.012 postgres |LOG:  disconnection: session time: 0:02:43.333 user=postgres database=my_db host=123.456.789.012 port=49372
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.