Назад | Перейти на главную страницу

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

Я использую внутренний механизм вращения журнала 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    

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

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

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

Если вы не используете системный журнал, вы можете просто запустить следующий скрипт из 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, для просмотра / анализа журналов базы данных.