温馨提示×

Ubuntu中PostgreSQL日志如何管理

小樊
46
2025-11-29 01:05:38
栏目: 云计算

Ubuntu中PostgreSQL日志管理

一 日志位置与快速查看

  • 常见日志路径
    • 系统日志目录:/var/log/postgresql/(Debian/Ubuntu 常用,文件名通常包含版本与实例名,如:postgresql-12-main.log
    • 数据目录内日志:$PGDATA/pg_log/(当启用日志收集器时,日志写入此目录;Ubuntu 常见 PGDATA 为:/var/lib/postgresql/12/main
  • 快速查看与检索
    • 实时查看:sudo tail -f /var/log/postgresql/postgresql-12-main.log
    • 过滤错误:grep ERROR /var/log/postgresql/postgresql-12-main.log
    • 图形化查看:使用 pgAdmin 的“日志”选项卡可实时查看与筛选。

二 核心配置与启用日志收集

  • 配置文件位置
    • Ubuntu 常见路径:/etc/postgresql/12/main/postgresql.conf(按实际版本替换 12
  • 建议的基础配置(示例)
    • 启用日志收集器与目录
      • logging_collector = on
      • 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 = on
    • 日志内容与格式
      • log_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 对不重启即可生效的参数)。

三 日志轮转与保留策略

  • 内置轮转参数
    • 通过 log_rotation_age(按时间)与 log_rotation_size(按大小)控制生成新文件;当按时间轮转且同名文件已存在时,log_truncate_on_rotation = on 可避免重复追加,直接覆盖旧同名文件,便于按时间分片管理。
  • 外部归档与清理
    • 使用 logrotate(推荐):创建 /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
      }
      
    • 使用 cron 清理(备选):以 postgres 用户添加任务,示例为每天 1:00 删除 7 天前 的日志
      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

  • 会话与正在执行的 SQL
    • SELECT pid, usename, application_name, client_addr, query_start, state, query FROM pg_stat_activity;
  • 按执行时长定位问题
    • 结合 log_min_duration_statement 将慢 SQL 写入日志,再用 grep/tail 分析
  • 图形化辅助
    • pgAdmin 日志页可按时间、级别筛选,便于快速定位。

五 注意事项与性能影响

  • 日志级别与记录范围
    • log_min_messageslog_min_error_statementlog_statement 越低/越广,日志量越大,可能对性能与磁盘造成压力;生产环境建议按需开启,慢 SQL 建议用 log_min_duration_statement 精确记录。
  • 变更生效方式
    • 多数日志参数支持在线重载(SELECT pg_reload_conf();),但涉及 logging_collector 等需要重启的参数,请使用 systemctl restart postgresql
  • 目录与权限
    • 确保日志目录存在且属主为 postgres:postgres,权限建议 0600,避免其他用户读取敏感日志。

0