observer 日志不产生归档日志,想问哪些参数控制的

【 使用环境 】
测试环境

【 OB 】

【 使用版本 】
4.3.5.2

【问题描述】
observer日志只有当天的日志,之前的日志并没有产生归档,如下图

max_syslog_file_count设置的300,enable_syslog_recycle也是开启的

我的日志远没有300个,为什么就给清除了,只保留了今天的日志

1 个赞

OceanBase 的 observer 日志没有生成历史归档文件,仅保留当天日志——是由于 系统运行日志的本地回收机制 触发了旧日志清理所致。以下是对相关参数和机制的专业分析:

:mag: 核心原因分析

您提到已设置 max_syslog_file_count=300 并开启 enable_syslog_recycle=true,理论上应保留最多 300 个日志文件,但实际上日志仍被清除,主要原因在于另一个关键参数:syslog_disk_size

根据官方文档,日志清理策略由两个维度共同决定:

:white_check_mark: 1. max_syslog_file_count:基于日志数量的限制

  • 类型:集群级配置项
  • 默认值:0(表示不限制数量)
  • 作用:控制每种日志(如 observer.logelection.log 等)最多保留多少个文件
  • 生效条件:必须同时满足:
    • enable_syslog_recycle = true
    • max_syslog_file_count > 0

:pushpin: 注意:单个日志文件大小为 256MB(固定),所以若 max_syslog_file_count=300,理论上可占用约 75GB 空间。

参考文档:max_syslog_file_count 属性说明

:white_check_mark: 2. syslog_disk_size:基于日志磁盘总大小的限制(更优先!)

这是您问题的关键所在!

条件 行为
max_syslog_file_count=0, syslog_disk_size=0 不回收日志,直到磁盘写满
max_syslog_file_count=0, syslog_disk_size>0 按照 syslog_disk_size 配额回收旧日志
max_syslog_file_count>0, syslog_disk_size=0 按照最大文件数回收
max_syslog_file_count>0, syslog_disk_size>0 任一条件触发即开始删除最旧日志

:warning: 重点:当两者都大于 0 时,系统将同时考虑数量和磁盘空间限制,一旦任一阈值达到,就开始清理。

此外:

  • 当剩余可用磁盘空间 < 2GB 时,系统会强制删除最旧日志以释放空间。
  • 如果启用了压缩(syslog_compress_func != none),则在剩余空间 < 4GB 时启动压缩。

参考文档:syslog_disk_size 使用说明

:question: 为什么只保留“当天”的日志?

这种现象通常表明:

  1. syslog_disk_size 被设置为一个较小值(例如几 GB),不足以容纳多天日志;
  2. 或者磁盘本身空间紧张,触发了低于 2GB 的紧急清理;
  3. 日志滚动频率高(例如因高负载产生大量日志),快速耗尽配额。

即使 max_syslog_file_count=300,如果总日志体积超过 syslog_disk_size 设定值,系统仍会删除旧文件。

– 查看当前配置 SELECT * FROM oceanbase.GV$OB_PARAMETERS WHERE NAME IN (‘max_syslog_file_count’, ‘enable_syslog_recycle’, ‘syslog_disk_size’);

:file_folder: 关于“归档日志”的误解澄清

需要特别说明:

  • observer.log运行日志(diagnostic log),不属于数据库事务日志(WAL)。
  • 它不会像 Oracle Redo Log 那样进行“归档(archiving)”。
  • 若需长期保存,应通过外部工具(如 logrotate、rsync、ELK、SLS 等)定期备份至远程存储。

若您指的是 事务日志归档(Log Archiving) 用于备份恢复,请参考 OceanBase 的 日志归档模式 功能,它独立于 observer.log 的管理机制。

:white_check_mark: 总结

参数 作用 是否关键
enable_syslog_recycle 控制是否启用日志回收 :white_check_mark: 必须开启
max_syslog_file_count 按文件数量限制日志保留 :warning:syslog_disk_size 影响
syslog_disk_size 按总磁盘空间限制日志总量 :fire: 最关键因素
磁盘剩余空间 小于 2GB 时强制清理 :bell: 紧急兜底机制

因此,您看到“只保留当天日志”的根本原因极可能是 syslog_disk_size 设置过小或磁盘空间不足。

:pushpin: 建议立即检查 syslog_disk_size 设置,并结合磁盘容量合理规划日志保留策略

如需进一步诊断,可提供:

du -sh $OBDATA/log/*.log*
df -h $OBDATA
1 个赞

ob的系统日志清理有2个策略,如果是ocp管理的ob,ocp会监控安装目录磁盘大小,超过一定阀值会触发日志清理,如果没超过阀值按ob的日志保留个数策略进行。

可以确认下安装目录的磁盘大小是否接近80%左右。

https://www.oceanbase.com/docs/common-ocp-1000000003339297#1-title-OCP%20%E5%85%A8%E5%B1%80%E6%97%A5%E5%BF%97%E4%BF%9D%E7%95%99%E7%AD%96%E7%95%A5)

这个目录存储了observer的运行日志,先看下目录空间是否充足,ocp管理的集群,如果目录空间使用到了80%也会清理,另外你这个环境使用频繁吗,可以关闭enable_syslog_recycle,先不用自动回收看看是否能保留日志。

学习了