How To Look Up
Be aware of this thing called “astronomy”

庞大的纪录档

当进行资料汇入或模组开发的时候,资料库常有大量存取, PostgreSQL 和Odoo 就可能会产生大量的纪录档,尤其是一边要侦错,必须要让PostgreSQL 和Odoo 记录所有细节的时候。这些记录档如果没有清理,很容易就会占去大量的硬盘空间。我们在为客户从旧系统转移到Odoo 的时候,就曾经发生过产生了超过30 GB 的纪录档,导致系统当机的情况。即使没有以上的情况,日积月累下来,纪录档仍然会占去可观的硬碟空间。有错误需要检查纪录档时,庞大的纪录档也可能造成开启档案上的困难。

清理纪录档

最直观的清理方式,就是由系统管理员定期将记录档清空,但是这个方式仰赖系统管理员的手动作业,而且万一日后需要检查纪录的时候就麻烦了。而Linux 系统上本来就内建有工具来解决这个问题。Logrotate 是Linux 上用来封存纪录档的工具,可以依照设定排程自动将旧的纪录封存到另一个档案并且压缩,减少纪录档占用的空间。


PostgreSQL 纪录档,设定成纪录所有SQL statement

使用Logrotate

Logrotate 封存的动作是透过设定档内的选项决定,设定档通常会放在/etc/logrotate.conf 或/etc/logrotate.d 之下的档案。如果有/etc/logrotate.d 这个目录的话,建议可以将不同程式的纪录档设定放在这个目录下的不同档案,方便管理。个别设定档会有类似以下的内容:

/var/log/postgresql/*.log { 
    weekly
    # 每周执行
    rotate 10
    # 最多保留10 个旧纪录档
    copytruncate
    # 将记录档内容复制至别个档案后清空纪录档
    delaycompress
    # 延后一次再压缩纪录档
    compress
    # 压缩旧纪录档
    notifempty
    # 如果纪录档为空,暂不封存
    missingok
    # 找不到记录档也不会发出错误讯息
    su root root
    # 以root:root 身份执行
    create 640 postgres postgres
    # 以root:root 身份建立旧纪录档
}

第一行的「/var/log/postgresql/*.log」是指定PostgreSQL 纪录档的路径。每个设定区块({ 到} 及之间的内容)之前都要指定该区块的封存记录档路径。其他设定区块内的常用选项如下:

daily

每天封存。以Odoo 和PostgreSQL 来说,建议使用这个选项。

weekly

每周封存

monthly

每月封存

yearly

每年封存

rotate [count]

保留[count] 个封存记录档,超过这个设定数字时,会从最旧的封存记录档开始删除。

crompress

压缩封存后的纪录档。强烈建议使用这个选项,可以有效地减少封存记录档的大小。

delaycrompress

延后一次压缩封存纪录档。每次执行时封存的纪录档会等到下一次执行的时候才封存。

missingok

指定的纪录档路径找不到档案时,不会发出错误警告。

notifempty

不封存空白纪录档

create [rwx] [user] [group]

建立封存档案时的权限。[rwx] 为Linux 档案的权限,例如640 。[user] 为档案拥有者。[group] 为档案所属群组。

以Odoo 为例

/var/log/odoo/*.log { 
    daily
    missingok
    rotate 70
    compress
    delaycompress
    notifempty
    create 640 odoo odoo }

此处对Odoo 的纪录档所在目录下,以.log 结尾的档案每天进行封存。Odoo 纪录档的位置预设为/var/log/odoo ,或是设定在Odoo 设定档( 通常在/etc/odoo-server.conf )内的logfile 选项。保留70 个封存的档案,封存后的档案在下一次封存动作时会被压缩。

若以Logrotate 来封存Odoo 纪录档时,请记得将 Odoo 设定档内的logrotate 选项关掉。

附注

如何在Odoo 里设定栏位预设值?
设定栏位预设值来加速输入并减少错误

咨询

联系我们: 0755-28282314

电话

演示

微信