Ubuntu中PostgreSQL日志管理
一 日志位置与快速查看
sudo tail -f /var/log/postgresql/postgresql-12-main.loggrep ERROR /var/log/postgresql/postgresql-12-main.log二 核心配置与启用日志收集
logging_collector = onlog_directory = 'pg_log'log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'log_rotation_age = 1dlog_rotation_size = 100MBlog_truncate_on_rotation = onlog_statement = 'ddl'(可按需设为 ‘mod’ 或 ‘all’)log_min_duration_statement = 1000(单位毫秒,记录超过 1 秒的慢 SQL)log_line_prefix = '%m [%p] %u %d %r '(时间、进程、用户、数据库、来源)sudo systemctl restart postgresql(或 sudo systemctl reload postgresql 对不重启即可生效的参数)。三 日志轮转与保留策略
/etc/logrotate.d/postgresql,示例/var/log/postgresql/*.log {
daily
rotate 7
compress
missingok
notifempty
create 0600 postgres postgres
sharedscripts
postrotate
systemctl reload postgresql >/dev/null 2>&1 || true
endscript
}
0 1 * * * find /var/lib/postgresql/12/main/pg_log -type f -name '*.log' -mtime +7 -delete >/dev/null 2>&1
注意将路径替换为你的 PGDATA/pg_log 实际路径。四 审计与运行监控 SQL
SELECT pid, usename, application_name, client_addr, query_start, state, query FROM pg_stat_activity;log_min_duration_statement 将慢 SQL 写入日志,再用 grep/tail 分析五 注意事项与性能影响
log_min_messages、log_min_error_statement、log_statement 越低/越广,日志量越大,可能对性能与磁盘造成压力;生产环境建议按需开启,慢 SQL 建议用 log_min_duration_statement 精确记录。SELECT pg_reload_conf();),但涉及 logging_collector 等需要重启的参数,请使用 systemctl restart postgresql。