温馨提示×

PostgreSQL在Ubuntu上的日志管理方法

小樊
42
2025-12-06 20:37:53
栏目: 云计算

Ubuntu 上 PostgreSQL 日志管理实用指南

一 日志位置与快速查看

  • 常见路径与方式
    • 系统日志:使用 journalctl 查看服务日志
      示例:sudo journalctl -u postgresql.service -f
    • 传统日志文件:Debian/Ubuntu 常见为 /var/log/postgresql/postgresql--main.log
      示例:sudo tail -f /var/log/postgresql/postgresql-14-main.log
  • 版本与实例确认
    • 查看服务状态:systemctl status postgresql
    • 确认数据目录(PGDATA):常见为 /var/lib/postgresql//main
    • 进入 psql:sudo -u postgres psql
      以上路径与方式适用于 Ubuntu 上的常见安装形态,便于快速定位与实时查看日志。

二 核心配置与生效方式

  • 配置文件位置
    • 通常为:/etc/postgresql//main/postgresql.conf
  • 常用参数与建议
    • 启用日志收集器:logging_collector = on
    • 日志目录(相对 PGDATA):log_directory = 'pg_log'
    • 日志文件名:log_filename = 'postgresql-%Y-%m-%d.log'
    • 日志轮转
      • 按时间:log_rotation_age = 1d
      • 按大小:log_rotation_size = 100MB(示例值)
      • 同名覆盖:log_truncate_on_rotation = on
    • 日志格式:建议 log_destination = 'csvlog'(便于分析与入库)
    • 记录内容(按需开启)
      • 连接/断开:log_connections = onlog_disconnections = on
      • 检查点:log_checkpoints = on
      • 锁等待:log_lock_waits = on
      • 慢查询:log_min_duration_statement = 1000(单位毫秒,示例为记录超过 1 秒 的语句)
      • 语句级审计:log_statement = 'all'(生产慎用,性能与合规需评估)
  • 使配置生效
    • 修改后重启:sudo systemctl restart postgresql
    • 或按实例重启:sudo systemctl restart postgresql@<version>-main
      上述参数覆盖日志收集、轮转、内容与格式,是 Ubuntu 上最常用且有效的组合。

三 日志轮转与清理

  • 内置按时间与大小轮转
    • 通过 log_rotation_agelog_rotation_size 控制,避免单个日志过大、便于日常运维。
  • 外部定时清理(推荐)
    • postgres 用户添加定时任务,清理 7 天前 的 .log/.csv 日志:
      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
      
    • 注意:PGDATA 在不同环境可能为 /var/lib/postgresql//main/usr/local/postgresql/data,请按实际修改路径。

四 日志分析与报表

  • 使用 pgBadger 生成 HTML 报表
    • 安装:sudo apt-get install pgbadger
    • 分析当日日志并输出报表:
      pgbadger /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
      
    • 建议将报表生成加入 crontab 做每日自动分析,便于长期趋势与问题排查。

五 易混淆日志与注意事项

  • 区分运行日志与 WAL
    • 运行日志:记录服务运行、错误、慢查询、审计等,路径见上文。
    • WAL(Write-Ahead Logging):事务日志,位于 $PGDATA/pg_wal,用于崩溃恢复与复制,不是文本运行日志,不应与运行日志混用或清理策略混为一谈。
  • 审计与性能权衡
    • 开启 log_statement = 'all'log_duration = on 会产生大量日志,可能影响性能与磁盘占用;建议结合 log_min_duration_statement 做阈值采样,生产环境谨慎开启全量语句日志。

0