Ubuntu中PostgreSQL的日志管理方法
导读:Ubuntu中PostgreSQL日志管理方法 一 日志位置与快速查看 常见路径与方式 使用 Debian/Ubuntu 的打包安装时,日志通常写入系统日志目录:/var/log/postgresql/,文件名包含版本与主实例名,例如:...
Ubuntu中PostgreSQL日志管理方法
一 日志位置与快速查看
- 常见路径与方式
- 使用 Debian/Ubuntu 的打包安装时,日志通常写入系统日志目录:/var/log/postgresql/,文件名包含版本与主实例名,例如:postgresql-14-main.log。可直接用以下命令实时查看:
- 实时查看服务日志:
sudo tail -f /var/log/postgresql/postgresql-< version> -main.log - 通过 systemd 查看:
sudo journalctl -u postgresql.service -f
- 实时查看服务日志:
- 若启用了日志收集器(见下文),日志也可能写入数据目录下的 pg_log 子目录(相对 PGDATA),文件名可按策略生成(如带时间戳)。Ubuntu 常见 PGDATA 为:/var/lib/postgresql//main。
- 使用 Debian/Ubuntu 的打包安装时,日志通常写入系统日志目录:/var/log/postgresql/,文件名包含版本与主实例名,例如:postgresql-14-main.log。可直接用以下命令实时查看:
- 快速定位配置文件与数据目录
- 配置文件路径通常为:/etc/postgresql//main/postgresql.conf
- 数据目录通常为:/var/lib/postgresql//main
- 可使用
sudo -u postgres psql -c "show config_file; "与show data_directory;在数据库中查询实际路径。
二 启用与配置日志收集
- 编辑配置文件(以实际版本为准):
sudo nano /etc/postgresql/< version> /main/postgresql.conf - 常用参数与建议
- 启用日志收集器:
logging_collector = on - 日志目录(相对 PGDATA):
log_directory = 'pg_log' - 日志文件名格式:
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' - 日志轮转
- 按时间:
log_rotation_age = 1d - 按大小:
log_rotation_size = 100MB - 轮转时是否截断同名旧文件:
log_truncate_on_rotation = off
- 按时间:
- 日志级别与输出
- 最低日志级别:
log_min_messages = info - 输出格式(便于检索):
log_line_prefix = '%m %p %u %d %r'
- 最低日志级别:
- 记录内容(按需开启)
- 记录慢 SQL:
log_min_duration_statement = 60(单位秒) - 记录连接/断开:
log_connections = on,log_disconnections = on - 记录检查点:
log_checkpoints = on - 记录语句执行时间:
log_duration = on - 记录锁等待:
log_lock_waits = on - 记录 DDL 或更多语句:
log_statement = 'ddl'(或'mod'、'all')
- 记录慢 SQL:
- 启用日志收集器:
- 使配置生效
- 重启服务:
sudo systemctl restart postgresql - 验证参数:
sudo -u postgres psql -c "show logging_collector; show log_directory; show log_filename; "。
- 重启服务:
三 日志轮转与保留策略
- 内置轮转
- 通过
log_rotation_age与log_rotation_size控制按时间或按大小切分日志,避免单个文件过大。 - 示例:每天生成一个新文件,或当文件达到 100MB 时切换,保留策略由外部清理脚本或系统策略实现。
- 通过
- 外部清理(定时任务)
- 以 postgres 用户添加定时任务,自动删除 7 天前 的日志(路径按实际环境调整):
- 编辑:
sudo crontab -e -u postgres - 示例任务(每天 1:00 清理 7 天前 .log/.csv 文件):
0 1 * * * find /var/lib/postgresql/12/main/pg_log -type f \( -name '*.log' -o -name '*.csv' \) -mtime +7 -exec rm { } \; > /dev/null 2> & 1
- 查看任务:
crontab -l -u postgres
- 编辑:
- 提示:若日志写入 /var/log/postgresql/,请将上述路径替换为实际日志目录。
- 以 postgres 用户添加定时任务,自动删除 7 天前 的日志(路径按实际环境调整):
四 常见问题与排查
- 日志不生成或找不到
- 确认
logging_collector = on,并检查log_directory与log_filename是否指向正确目录与命名规则;重启后到目标目录查看新文件。
- 确认
- 权限问题
- 确保 postgres 用户对日志目录与文件具备写权限;使用
ls -ld /var/log/postgresql /var/lib/postgresql/< version> /main/pg_log检查。
- 确保 postgres 用户对日志目录与文件具备写权限;使用
- 日志过大
- 合理设置
log_rotation_size与log_rotation_age,并配置定时清理;必要时降低log_min_messages与log_statement的详细程度以减少日志量。
- 合理设置
- 需要更详细的语句级日志
- 开启
log_min_duration_statement与log_statement,并配合log_line_prefix输出时间、进程、用户、数据库、来源地址等,便于检索与审计。
- 开启
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu中PostgreSQL的日志管理方法
本文地址: https://pptw.com/jishu/782412.html
