È possibile escludere utenti specifici nell'attività di registro di PostgreSQL?


10

Devo monitorare l'attività degli utenti nei nostri database. Ho impostato i seguenti parametri in postgresql.conf:

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

Tuttavia, mi rendo conto che la maggior parte dei file di registro sono pieni di istruzioni eseguite postgresdall'utente, utilizzate dagli script che ho scritto per le attività di manutenzione: ricalcola le viste materializzate, pg_dump, pg_restore, estrae le viste come file tabulati, ecc. Il risultato è giornaliero file di registro di dimensioni superiori a 12 Mb.

C'è un modo per escludere l'attività di utenti specifici dal registro?


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

Fantastico, lo farò.
Sébastien Clément,

1
@CraigRinger ha effettuato l'accesso come dezso(un superutente), ottengo sempre ERROR: parameter "log_connections" cannot be set after connection startquando ALTER ROLE bob SET log_connections = off
provo

@dezso Drat. Parte del motivo per cui mi sono qualificato con IIRC ... non ne ero sicuro.
Craig Ringer,

1
@CraigRinger L'ho provato ieri, pensando che fosse possibile - quindi ho annullato la domanda: D
dezso

Risposte:


5

Utilizzando il ALTER ROLE ... SET parameter;comando, è stato possibile personalizzare i parametri di registro specifici dell'utente. Si noti che il parametro ha effetto solo dopo il logout.

Impostazione log_min_duration_statement = -1 (1o accesso):

console 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

Risultato sul registro:

Si noti che all'interno di quella sessione, tutte le istruzioni sono visibili nel registro anche dopo aver impostato 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

Vedere l'effetto di log_min_duration_statement (secondo accesso):

console 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

Risultato sul registro:

Come previsto, nessuna delle dichiarazioni viene registrata.

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.