Ubuntu 上 PostgreSQL 日志管理实用指南
一 日志位置与快速查看
sudo journalctl -u postgresql.service -fsudo tail -f /var/log/postgresql/postgresql-14-main.logsystemctl status postgresqlsudo -u postgres psql二 核心配置与生效方式
logging_collector = onlog_directory = 'pg_log'log_filename = 'postgresql-%Y-%m-%d.log'log_rotation_age = 1dlog_rotation_size = 100MB(示例值)log_truncate_on_rotation = onlog_destination = 'csvlog'(便于分析与入库)log_connections = on,log_disconnections = onlog_checkpoints = onlog_lock_waits = onlog_min_duration_statement = 1000(单位毫秒,示例为记录超过 1 秒 的语句)log_statement = 'all'(生产慎用,性能与合规需评估)sudo systemctl restart postgresqlsudo systemctl restart postgresql@<version>-main三 日志轮转与清理
log_rotation_age 与 log_rotation_size 控制,避免单个日志过大、便于日常运维。sudo crontab -e -u postgres
# 每天 1 点清理 7 天前日志
0 1 * * * find /var/lib/postgresql/14/main/pg_log -type f \( -name '*.log' -o -name '*.csv' \) -mtime +7 -delete >/dev/null 2>&1
四 日志分析与报表
sudo apt-get install pgbadgerpgbadger /var/lib/postgresql/14/main/pg_log/postgresql-*.log -o /var/www/html/pg-report.html
pgbadger --begin='2025-04-20 00:00:00' --end='2025-04-24 23:59:59' *.log
五 易混淆日志与注意事项
log_statement = 'all'、log_duration = on 会产生大量日志,可能影响性能与磁盘占用;建议结合 log_min_duration_statement 做阈值采样,生产环境谨慎开启全量语句日志。