PostgreSQL码农集散地

师傅,为什么我找不到pg数据库日志?

「点击蓝字,关注我吧 」
‍ ‍ ‍ ‍
作者:Digital Observer(施嘉伟) Oracle ACE Pro: Database PostgreSQL ACE Partner 11年数据库行业经验,现主要从事数据库服务工作 拥有Oracle OCM、DB2 10.1 Fundamentals、MySQL 8.0 OCP、WebLogic 12c OCA、KCP、PCTP、PCSD、OCI、PolarDB技术专家、达梦师资认证、数据安全咨询高级等认证 ITPUB认证专家、PolarDB开源社区技术顾问、HaloDB技术顾问、TiDB社区技术布道师、 国内某高校企业实践指导教师 公众号:Digital Observer;CSDN:施嘉伟;ITPUB:sjw1933;PGFans:施嘉伟。

背景描述

最近小徒弟在学习pg数据库,因为之前学习的是商业数据库oracle和sqlserver。突然问了我一个问题,师傅,我怎么找不到pg数据库的告警日志?




解答

确实,PostgreSQL 默认情况下未启用日志收集功能,这可能对数据库的调试与监控工作带来不便。该功能的启用与否由 `logging_collector` 参数控制。为了确保数据库操作的可追溯性,便于问题诊断及系统审计,建议在生产环境中启用此参数。开启日志收集功能后,数据库的日志信息将被保留至文件中,提供关键的运行信息与错误提示,也存在一定的缺点。最明显的问题是,随着时间的推移,日志文件会不断增大,可能导致磁盘空间的过度消耗,尤其是在高负载或长时间运行的系统中。所以要结合其它参数进行调优!

01 logging_collector默认值

确实,对于一位 Oracle DBA 来说,默认不启用 `logging_collector` 就像是没有启用数据库的 alert 日志一样,令人难以理解。在 Oracle 中,alert 日志是排查数据库问题的关键工具,任何严重错误、告警和事件都会记录在内。而在 PostgreSQL 中,如果没有启用 `logging_collector`,类似的日志信息将不会保存在文件中,排查问题时会严重受限。 日志是数据库运维的重要一环,没有它,监控系统健康状态、诊断性能问题、解决错误都变得更加困难。因此,启用日志收集对于保持 PostgreSQL 的可维护性至关重要。 0 2 问题延伸:国产pg系数据库是否默认开日志?




















我观察了其他两家国产数据库,分别是polardb开源版和halodb,我们看下他们两家日志是否默认开启。

polardb:

HaloDB:


国产数据库默认启用 `logging_collector` 功能,这一做法充分体现了对运维需求的重视。日志作为数据库运维的核心工具,通过默认开启日志收集,保障了系统的可监控性与问题诊断能力,显著提升了产品的易用性与可靠性。对于专业用户而言,这种设计简化了数据库管理,避免了日志未开启导致的问题排查困难,展现了国产数据库日趋成熟的产品设计理念。 0 3 最佳实践
alter system set logging_collector=on; alter system set log_destination='csvlog'; alter system set log_filename='postgresql-%a.log'; %a 表示周几的缩写(例如,Mon、Tue、Wed 等),每个日志文件的命名会根据生成的具体日期反映当前的星期几。 这意味着每一天的日志文件名会根据当天是星期几自动命名,且会覆盖前一周同一星期几的日志文件。
alter system set log_truncate_on_rotation=on; log_truncate_on_rotation :控制日志文件在轮换时是否被截断。如果设置为 on ,则在日志轮换时,如果新日志文件的文件名已经存在,该文件将被截断为 0 字节(即覆盖旧日志)。如果设置为 off ,则新的日志信息会追加到现有文件中。 on :启用截断功能,即每次轮换时,日志文件会被重写而不是追加。
alter system set log_rotation_age='1d'; 执行这个命令会设置日志轮换的时间间隔为 1 天,这样每天都会生成一个新的日志文件。这样可以帮助管理日志文件的大小,并便于归档和审计。
alter system set log_rotation_size=0; 执行这个命令会禁用基于文件大小的轮换机制,只保留基于时间间隔的轮换方式(由 log_rotation_age 控制)。这样,日志文件不会因为文件大小而轮换,仅在指定的时间间隔后进行轮换。


总结
在 上述步骤将配置 PostgreSQL 以每天生成新的日志文件,启用 CSV 格式,按周几命名,并在日志轮换时截断文件。通过额外的脚本清理机制,确保系统只保留7天的日志并进行循环覆盖。这种配置方案可以有效管理日志文件,防止磁盘空间的过度消耗。 当然也可以导入到数据库中方便查看!
END





















往期推荐:




探索Klustron数据库:高性能分布式新选择?

初探PolarDB for PostgreSQL开源数据库

半年度总结:技术路上的光芒

Oracle RAC添加节点会遇到哪些问题?
PostgreSQL常见连接报错处理







在看点这里
点击 "阅读原文"