Может ли внутренний механизм ротации журналов postgres удалять файлы журнала старше определенного времени?

9

Я использую механизм ротации журналов от Posgtres. Я хотел бы удалить файлы журнала старше 30 дней. Как мне получить postgres для этого? Если postgres не поддерживает его, могу ли я настроить logrotate на удаление журналов старше 30 дней?

Мой текущий конфиг:

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    
Freiheit
источник

Ответы:

5

Я не верю, что механизм ведения журнала Postgres поддерживает эту очистку, но вы совершенно безопасно удаляете старые журналы, используя logrotate или задание cron, если вы не связываетесь с активным файлом журнала, в который пишет Postgres.

Для ведения журнала в Postgres я обычно предпочитаю входить в syslog, и пусть обычные процедуры ротации журналов делают свое дело. Это имеет несколько преимуществ, но два больших из них - это возможность использовать ваши стандартные процедуры ротации журналов (например, logrotate) так же, как вы это делаете для других демонов, и возможность заставить ваш демон syslog отправлять журналы на удаленный хост, если это то, что вы хотите сделать один день.

Другие варианты обсуждаются (хотя и кратко) в разделе 23.3 руководства Postgres .

voretaq7
источник
1

Если вы не используете syslog, вы можете просто запустить следующий скрипт из cron и вызвать его через день.

#!/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 {} \;

Не входя в системный журнал, вы также можете использовать такие инструменты, как pgAdmin или pgFouine для просмотра / анализа журналов базы данных.

gsiems
источник
pgFouine - это то, что привело меня на этот путь. Вы можете использовать pgFouine из журнала syslog, но это еще не все, что нужно для правильной настройки.
Freiheit