postgresの内部ログローテーションメカニズムは、特定の時間より古いログファイルを削除できますか?


9

posgtresの内部ログローテーションメカニズムを使用しています。30日以上経過したログファイルを削除してください。postgresでこれを行うにはどうすればよいですか?postgresがサポートしていない場合、30日より古いログのみを削除するようにlogrotateを設定できますか?

私の現在の設定は:

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    

回答:


5

Postgresのロギングメカニズムがこのクリーンアップをサポートしているとは思いませんが、Postgresが書き込んでいるアクティブなログファイルをいじらない限り、logrotateまたはcronジョブを使用して古いログを完全に安全に削除できます。

Postgresロギングの場合、私は通常、syslogにログを記録し、通常のログローテーション手順を実行することを好みます。これにはいくつかの利点がありますが、2つの大きな利点は、標準のログローテーション手順(logrotateなど)を他のデーモンと同じように使用できることと、syslogデーモンがログをリモートホストに送信できるようにすることです。それはあなたがいつかしたいことです。

その他のオプションについては、Postgresマニュアルのセクション23.3で(少しではありますが)議論されています


1

syslogを使用していない場合は、cronから次のスクリプトを実行して、1日で呼び出すことができます。

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

syslogにログを記録しないことで、pgAdminやpgFouineなどのツールを使用して、データベースログを表示/分析することもできます。


pgFouineは私をこの道に導いたものです。SyslogログからpgFouineを使用できますが、正しく設定するための作業が増えます。
フライハイト
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.