PostgreSQLのログローテションはローテーションするファイル数を設定できないみたいなので、logrotateで管理する設定が必要となった。
設定方法を備忘録として残す。
設定の流れ
- PostgreSQLのログをsyslogに流す設定
- syslogのログ出力設定
- logrotateのローテションの設定
出力先ファイル
/var/log/postgresql/postgresql.log
PostgreSQLのログをsyslogに流す設定
posgres.conf
vim /usr/local/pgsql/data/postgresql.conf
log_destinationをsyslog
に設定
log_destination = 'syslog'
ファシィリティの設定(syslogとの連携で必要)
syslog_facility = 'LOCAL1'
ログ出力の先頭に表示するフォーマットを設定
log_line_prefix = '[database:%d][user:%u]'
%d:データベース名
%u:アクセスユーザ名
全てのログを出力
log_statement = 'all' # none, ddl, mod, all
postgresql.confの設定反映
SELECT pg_reload_conf()
を実行
su postgres
/usr/local/pgsql/bin/psql
postgres=# SELECT pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
syslogのログ出力設定
設定ファイル
vim /etc/rsyslog.conf
以下追加する
# postgres
local1.* /var/log/postgresql/postgresql.log
再起動
/etc/init.d/rsyslog restart
logrotateのローテションの設定
設定ファイル
以下設定ファイル追加
touch /etc/logrotate.d/postgresql
以下追記
/var/log/postgresql/*.log {
daily
compress
delaycompress
notifempty
copytruncate
missingok
create 0640 postgres root
rotate 30
}
logrotateの設定反映
sudo logrotate /etc/logrotate.conf
ログが出力されているか確認
tail -f -n 100 /var/log/postgresql/postgresql.log
参考サイト
PostgreSQL 実行されたSQLをログに出力(システム全体の設定)
https://www.kakiro-web.com/postgresql/postgresql-sql-log-system.html
PostgreSQL で最低限設定しておくべきログ関連パラメータ+α
https://qiita.com/ynakayama/items/d38c70dd7b61590e3f4e
PostgreSQLをlogratate側で管理する方法
https://www.postgresql.jp/document/9.1/html/logfile-maintenance.html
ログローテーションするためのlogrotate設定とちょっとしたtips
https://qiita.com/K_Yagi/items/7843429f34678e475be6