一、日志配置基础
-
修改配置文件
通过postgresql.conf设置日志参数(路径:/etc/postgresql/<版本>/main/):logging_collector = on:启用日志收集。log_directory = '/var/log/postgresql':指定日志目录。log_filename = 'postgresql-%Y-%m-%d.log':按日期命名日志文件。log_min_duration_statement = 1000:记录执行超1秒的慢查询。log_lock_waits = on:记录锁等待信息。
-
动态调整参数
使用ALTER SYSTEM命令无需重启即可修改部分参数,如:ALTER SYSTEM SET log_min_duration_statement = '500ms';
二、日志轮转与清理
-
使用logrotate工具
创建配置文件/etc/logrotate.d/postgresql,内容示例:/var/log/postgresql/postgresql-*.log { daily rotate 7 compress missingok postrotate /bin/kill -HUP `cat /var/run/postgresql/*.pid` 2>/dev/null || true endscript }daily:每日轮转;rotate 7:保留7天日志;compress:压缩旧日志。
-
手动触发轮转
执行以下命令手动轮转日志:sudo logrotate -f /etc/logrotate.d/postgresql
三、日志分析与监控
-
实时查看日志
sudo tail -f /var/log/postgresql/postgresql-*.log # 实时查看最新日志 sudo grep 'ERROR' /var/log/postgresql/*.log # 筛选错误日志 -
生成分析报告
使用pgBadger工具解析日志并生成可视化报告:sudo apt-get install pgbadger pgbadger /var/log/postgresql/postgresql-*.log -o report.html # 生成HTML报告报告可展示慢查询、锁等待等关键信息。
-
设置定时任务
通过crontab每天凌晨生成前一天日志报告:0 2 * * * pgbadger /var/log/postgresql/postgresql-$(date -d "yesterday" +%Y-%m-%d).log -o /var/www/html/report.html
四、安全与优化建议
- 权限控制:确保日志目录仅允许
postgres用户读写,避免敏感信息泄露。 - 性能平衡:生产环境中
log_statement建议设为ddl或mod,避免记录所有SELECT语句影响性能。 - 日志归档:定期将历史日志归档至其他存储(如对象存储),释放磁盘空间。