KingbaseES SYS_LOG 自动清理配置
KingbaseES 数据库初始化后,默认不会自动清理系统日志(SYS_LOG)。随着业务运行,日志文件会持续累积,不仅占用大量存储空间,还可能影响数据库性能。本文将详细介绍 SYS_LOG 自动清理的核心参数、配置方法及实操场景,帮助快速实现日志的自动化管理。
一、日志自动清理核心参数解析
KingbaseES 通过一组专用参数控制日志的生成、轮转与清理,核心参数及默认值如下表所示:
| 参数名称 | 默认值 | 功能说明 |
|---|---|---|
| log_filename | kingbase-%Y-%m-%d_%H%M%S.log | 日志文件名格式,支持时间占位符(如 % Y 代表年份、% H 代表小时),决定日志轮转周期 |
| log_rotation_age | 1440(单位:分钟) | 日志文件最大存活时间,默认 1 天(1440 分钟),达到时间后自动生成新日志文件 |
| log_rotation_size | 10240(单位:KB) | 单日志文件最大尺寸,默认 10MB,超过该大小后触发日志轮转 |
| log_truncate_on_rotation | off | 同名日志文件处理方式:off 为追加模式,on 为清空模式(仅时间轮转时生效) |
| logging_collector | on | 日志收集功能开关,开启后才会生成独立日志文件(需保持 on 状态) |
| log_destination | 'csvlog' | 日志输出格式,支持 csvlog(CSV 格式)、stderr(标准错误流)、syslog 等 |
关键参数补充说明
- log_rotation_age 与 log_rotation_size:两者为 “或” 关系,满足任一条件即触发日志轮转(生成新文件),无需等两个条件同时满足。
- log_truncate_on_rotation:仅在 “基于时间的轮转” 时生效(如按小时、按天轮转),服务器启动或基于文件大小的轮转时,即使设为 on 也不会清空原有文件。
- log_filename 的时间占位符:通过调整占位符可灵活控制日志保存周期,常用格式及效果如下:
kingbase-%I.log:% I 为 12 小时制小时,最多保存 12 小时日志(每小时 1 个文件)kingbase-%H.log:% H 为 24 小时制小时,最多保存 24 小时日志(每小时 1 个文件)kingbase-%w.log:% w 为星期(0 = 周日),最多保存 7 天日志(每天 1 个文件)kingbase-%d.log:% d 为日期,最多保存 30 天日志(每天 1 个文件)kingbase-%j.log:% j 为年内天数(1-366),最多保存 1 年日志(每天 1 个文件)
二、自动清理配置步骤(实操版)
日志自动清理的核心是通过参数组合实现 “日志轮转 + 自动淘汰过期文件”,具体步骤如下:
1. 编辑数据库配置文件
KingbaseES 的核心配置文件为
kingbase.conf,默认路径通常为:/opt/Kingbase/ES/V8/Server/kingbase.conf
通过编辑器打开文件,找到日志相关参数段,根据需求修改参数值。
2. 常见场景配置示例
场景 1:按天轮转,保存 7 天日志(适用于常规业务)
需求:每天生成 1 个日志文件,保留最近 7 天,过期自动淘汰,文件大小超过 50MB 时提前轮转。
# 日志文件名格式(按天命名,如kingbase-2024-05-20.log)
log_filename = 'kingbase-%Y-%m-%d.log'
# 日志最大存活时间1天(24*60=1440分钟,默认值不变)
log_rotation_age = 1440
# 单文件最大50MB(50*1024=51200 KB)
log_rotation_size = 51200
# 同名文件时清空(避免按天轮转时追加旧文件)
log_truncate_on_rotation = on
# 保持日志收集开启
logging_collector = on
# 日志格式按需选择(csvlog或stderr)
log_destination = 'csvlog'
场景 2:按小时轮转,保存 24 小时日志(适用于排查短期问题)
需求:每小时生成 1 个日志文件,保留最近 24 小时,文件大小超过 10MB 时提前轮转。
log_filename = 'kingbase-%Y-%m-%d-%H.log'
log_rotation_age = 60 # 每60分钟轮转一次
log_rotation_size = 10240 # 保持默认10MB
log_truncate_on_rotation = on
logging_collector = on
log_destination = 'stderr'
场景 3:仅按文件大小轮转,限制单文件 20MB(适用于日志量较大场景)
需求:不按时间限制,仅当文件超过 20MB 时轮转,保留最近 10 个文件(通过系统工具配合清理)。
log_filename = 'kingbase-%Y-%m-%d-%H%M%S.log'
log_rotation_age = 0 # 0表示禁用时间轮转
log_rotation_size = 20480 # 20MB
log_truncate_on_rotation = off # 禁用清空,按时间戳命名避免重复
logging_collector = on
3. 使配置生效
修改
kingbase.conf后,无需重启数据库,执行以下命令重载配置即可:SELECT sys_reload_conf();
若重载失败,可通过重启数据库确保配置生效(生产环境建议低峰期操作):
# 停止数据库
systemctl stop kingbasees
# 启动数据库
systemctl start kingbasees
三、配置验证与注意事项
1. 验证配置是否生效
- 查看日志目录(默认路径为
/opt/Kingbase/ES/V8/data/sys_log),确认日志文件是否按配置的格式命名(如按天命名则显示kingbase-2024-05-20.log)。 - 等待轮转条件触发(如达到指定时间或文件大小),检查是否自动生成新文件,旧文件是否保留在目录中(过期文件会被自动淘汰)。
- 执行以下 SQL 查看当前参数配置:
SELECT name, setting FROM sys_settings WHERE name IN ('log_filename', 'log_rotation_age', 'log_rotation_size', 'log_truncate_on_rotation');
2. 关键注意事项
- 避免日志丢失:配置
log_truncate_on_rotation = on时,需确保日志文件名格式能唯一标识周期(如包含日期 / 小时),避免误清空未过期的日志。 - 存储空间预留:即使配置了自动清理,仍需预留一定存储空间,防止日志轮转瞬间占用过多空间(如大事务产生的超大日志文件)。
- 日志格式选择:csvlog 格式便于用工具分析,stderr 格式适合实时查看,可根据运维需求选择。
- 长期日志备份:若需保留超过清理周期的日志,可配合定时任务(如 crontab)将重要日志备份到异地存储。
四、总结
KingbaseES 的 SYS_LOG 自动清理功能通过简单的参数配置即可实现,核心是通过
log_filename定义轮转周期,log_rotation_age和log_rotation_size控制轮转触发条件,log_truncate_on_rotation优化文件存储方式。根据业务场景选择合适的配置组合,既能避免日志占满存储空间,又能保证排查问题时所需的日志完整性,是 KingbaseES 运维的基础必备技能。
浙公网安备 33010602011771号