我有一个非常简单的要求 - PostgreSQL日志目录应该有固定的最大大小,例如所有PostgreSQL日志最大10 GB。
可以通过创建固定大小的日志并使用日志轮换来实现(例如,旋转10个日志文件,每个日志文件1 GB)。
我尝试使用PostgreSQL日志记录配置来设置它,但我没有设法实现这一点。问题是“log_truncate_on_rotation”不适用于基于大小的旋转,仅适用于基于时间的旋转。
所以,我的问题是 - 是否可以仅使用PostgreSQL配置实现,或者我必须使用其他东西?如果没有,为什么PostgreSQL没有这个功能?
我的选择很少:
答案 0 :(得分:1)
是的 - 你没有这样的功能你是对的 - 你需要一个cron
https://www.postgresql.org/docs/current/static/runtime-config-logging.html
log_truncate_on_rotation(boolean)
启用logging_collector时,此参数将导致 PostgreSQL截断(覆盖),而不是追加,任何 现有的同名日志文件。但是,会发生截断 仅当由于基于时间的轮换而打开新文件时,不会 在服务器启动或基于大小的轮换期间。
你可以设置甚至是微不足道的工作来检查日志量:
* * * * * rm $(ls -t /PGDATA/pg_log/* | tail -n 1)
答案 1 :(得分:0)
除了别人说的话,我建议不要重新发明轮子。
Logrot通常由cron调用,即使每分钟运行它也不是一个好主意,如果你有postgres日志大小问题,你可以添加一个额外的cron条目,根据日志dir大小有条件地执行它或自由空间(如您所愿)。
关注自由空间:
数据:
joanmi@alpha:~$ sudo df -h /var/log/postgresql
S. fitxers Mida En ús Lliure %Ús Muntat a
/dev/mapper/kubuntu--vg-root 229G 131G 87G 61% /
取货:
joanmi@alpha:~$ sudo df -h /var/log/postgresql | tail -n 1 | cut -d ' ' -f 5
131G
关注已用空间:
请注意,这是更昂贵的计算。 这对我来说足够快,因为我没有大数据库 机器(它只是我的工作站)。
数据:
joanmi@alpha:~$ sudo du -sh /var/log/postgresql/
76K /var/log/postgresql/
取货:
joanmi@alpha:~$ sudo du -sh /var/log/postgresql/ | cut -f 1
76K
最后......
用户可读性较低(但在脚本中更容易比较):
joanmi@alpha:~$ sudo df /var/log/postgresql | tail -n 1 | cut -d ' ' -f 5
137003128
或
joanmi@alpha:~$ sudo du -s /var/log/postgresql/ | cut -f 1
76
注意:我使用sudo来避免权限问题。 在根cron作业中,它可以被删除。
示例:强>
关于自由空间:
这不输出任何内容(如果你至少有100k免费):
[[ \
$(df /var/log/postgresql | tail -n 1 | cut -d ' ' -f 5) \
-gt 100 \
]] \
|| echo 'Logrotate should be performedd!!'
这会输出Logrotate should be performedd!!
(除非你有一个非常大的磁盘; - )):
[[ \
$(df /var/log/postgresql | tail -n 1 | cut -d ' ' -f 5) \
-gt 100000000000000000000 \
]] \
|| echo 'Logrotate should be performedd!!'