O mecanismo de rotação de log interno do postgres pode excluir arquivos de log mais antigos que um determinado tempo?

8

Estou usando o mecanismo de rotação de log interno do posgtres. Gostaria que arquivos de log com mais de 30 dias fossem excluídos. Como faço para o postgres fazer isso? Se o postgres não suportar isso, posso definir o logrotate para apenas apagar logs com mais de 30 dias?

Minha configuração atual é:

log_destination = 'stderr'             
logging_collector = on
log_directory = 'pg_log'                
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' 
#log_truncate_on_rotation = off 
log_rotation_age = 1440         
log_rotation_size = 0    
    
por Freiheit 04.11.2011 / 17:03

2 respostas

5

Eu não acredito que o mecanismo de registro do Postgres suporta essas limpezas, mas você está perfeitamente seguro de apagar logs antigos usando logrotate ou uma tarefa do cron, desde que você não mexa com o arquivo de log ativo que o Postgres está gravando.

Para o registro em log do Postgres, geralmente prefiro fazer log no syslog e deixar que os procedimentos normais de rotação de log façam o que desejam. Isso tem algumas vantagens, mas as duas grandes são a capacidade de usar seus procedimentos de rotação de log padrão (como logrotate) da mesma maneira que você faz para outros daemons e a capacidade de fazer com que seu daemon syslog envie os logs para um host remoto. isso é algo que você quer fazer um dia.

Outras opções são discutidas (ainda que brevemente) na seção 23.3 do manual do Postgres .

    
por 04.11.2011 / 19:44
1

Se você não estiver usando o syslog, pode simplesmente executar o seguinte script do cron e chamá-lo por um dia.

#!/bin/sh

HOME=/var/lib/pgsql
export HOME
PGDATA=/var/lib/pgsql/9.1/data
export PGDATA

/usr/bin/find $PGDATA/pg_log -type f -ctime +30 -name "*.log" -exec /bin/rm {} \;

Por não efetuar login no syslog, você também pode usar ferramentas como pgAdmin ou pgFouine para visualizar / analisar os logs do banco de dados.

    
por 04.11.2011 / 20:47