CM功能介绍:日志压缩与回收
CM功能介绍:日志压缩与回收
cm_agent组件具备日志文件压缩和回收的能力,避免日志占用过多的磁盘空间。
配置参数
开关参数
下面两个参数均设置为 on
时,cm_agent进程启动之初创建常驻子线程(称为日志压缩线程),负责日志文件的压缩和回收。
enable_log_compress = on
security_mode = on
两个参数在线上和线下环境中默认值有区别:
- 对于线下环境(由
FIM
负责日志文件的压缩回收),enable_log_compress
默认值为on
,而security_mode
的默认值为off
- 对于线上环境,两个参数的默认值均为
on
控制参数
log_threshold_check_interval
:日志文件压缩的回收的执行周期- 单位:秒,默认值:
1800
- cm_agent进程启动并经过一个执行周期后,才会开始日志文件的压缩和回收
- 单位:秒,默认值:
log_max_size
:所有日志文件总大小超过阈值后,触发日志文件回收- 单位:
MB
,默认值:1024
- 单位:
log_max_count
:所有日志文件个数超过阈值后,触发日志文件回收- 单位:个,默认值:
10000
- 单位:个,默认值:
log_saved_days
:所有日志文件个数超过阈值,触发日志文件回收时,日志文件的保留天数- 单位:天,默认值:
90
(日志文件超过10000
时,90
天之前的文件将被删除,其余保留)
- 单位:天,默认值:
管控对象
CM日志文件压缩和回收功能所处理的日志文件,位于 $GAUSSLOG
目录,有两种配置形式(称为 pattern
):
-
配置文件中以
log_pattern_
的形式指定的(部分列举如下,详情请查看配置文件)log_pattern_cm_agent = cm_agent- log_pattern_cm_ctl = cm_ctl- log_pattern_postgresql = postgresql-
-
硬编码在代码中的(
8.1
版本之后具备,全部列举如下)gs_scheduler- roach_agent- roach_controller- roach_agent_security- disaster_gs_local- disaster_roach_agent- disaster_roach_controller- disaster_roach_agent_security-
注意事项
参数调整
配置文件位于 cm_agent 数据目录,8.0
版本对应 cm_agent.conf
文件;8.1
版本对应 cm.conf
文件。
开关参数
- 线下环境中不建议修改开关参数
- 线上环境中,必要时可修改
enable_log_compress
参数的值控制功能是否打开,但必须重启cm_agent进程、重启cm_agent进程、重启cm_agent进程才能生效
控制参数
- 内核从
8.1
版本开始,支持gs_guc reload
在线修改控制参数 - 如果日志磁盘空间充足,可调整
log_max_size
参数,以保存更多的日志文件 - 不建议调整其它参数
管控对象
- 管控对象参数均不支持
gs_guc
- 不建议调整管控对象参数
关键日志
沙箱内进入 $GAUSSLOG/cm/cm_agent
目录,按照关键词进行搜索。
线程启动
日志压缩线程启动前将打印日志
Get GAUSSLOG from environment
启动失败时打印
Failed to create log file thread
如果功能被关闭,则打印
Get GAUSSLOG from environment failed
从 8.1
版本开始,线程启动前有更明确的日志信息
Starting thread LogCompress
线程工作
日志压缩线程每轮工作中,将以此打印如下日志(可用于判断线程是否正常工作)
gzCompressLogByPattern begins
removeLogFileByCapacity begins
removeLogFileBySavedTotality begins
规则简介
受管控的日志文件
cm_agent 递归读取 $GAUSSLOG
目录,并记录需要管控的日志文件(参考配置参数的介绍)。以配置文件中指定的类型为例
log_pattern_postgresql = postgresql-
cm_agent 读取到 postgresql-
开头的文件名(属于 pattern
集合),则记录并用于后续流程。
典型的日志文件命名为 postgresql-2021-09-19_000000.log
,即以某个 pattern
开头,后面跟着时间戳。
日志压缩
对于受管控,且未压缩的日志文件,cm_agent 将不同 pattern
类型的日志文件,分别根据时间戳(从文件名解析得到)排序后,压缩最新文件以外的所有文件。
日志回收
- 根据总大小回收日志文件:日志文件总大小(包括未压缩日志与已压缩日志)超过
log_max_size
所对应的值,则触发日志删除 - 根据总个数回收日志文件:日志文件总个数(包括未压缩日志与已压缩日志)超过
log_max_count
所对应的值,则删除时间戳距今大于log_saved_days
的日志文件 - 如果日志文件未压缩,则不会被删除
问题规避与定位
如果日志文件长期未被压缩和回收,则可通过
- 手动删除较早的日志文件
进行规避,然后按照如下思路排查原因。
快速排查
- (常见)开关参数被设置为
off
- 检查开关参数设置是否合理
- (常见)开关参数设置为
on
后未重启 cm_agent 进程- 比较 cm_agent 进程启动时间和配置文件修改时间,排查参数设置后是否重启进程
- (少见)cm_agent 进程频繁重启
- 检查是否有文件名过长的日志文件
- 在 cm_agent 日志文件中搜索进程启动的关键字
详细排查流程
下面的排查流程均在问题节点的沙箱内执行。
开关参数检查
执行 cm_ctl query -Cvd | head
获取 cm_server 的数据目录
将上面红框中的 cm_server
替换为 cm_agent
并进入目录,然后查看配置文件中参数的值:
cd /data/1p1s1d/data/cm/cm_agent
grep "enable_log_compress" cm.conf
grep "security_mode" cm.conf
以下图为例,enable_log_compress
被设置为 off
,应修改为 on
并重启 cm_agent 进程。
线程启动检查
如果配置参数已打开,根据关键日志检查 cm_agent 是否启动了日志压缩线程
- 比较 cm_agent 进程启动时间和配置文件修改时间,排查参数设置后是否重启进程
有两种方式查看 cm_agent 进程启动时间
# 方式一:通过 ps 命令查看
ps ux | grep -v grep | grep cm_agent
# 方式二:grep 日志关键词查看(8.0版本关键词为 begin printing environment)
grep "Starting cm_agent" cm_agent-2021-09-16_172609-current.log
使用 stat
命令查看配置文件最近修改时间
stat cm.conf
以上面截图为例,进程启动时间为 9 月 16 日,而配置文件修改时间为 9 月 27 日,因此有理由怀疑修改配置文件相关词参数后,未重启进程。
在 cm_agent 日志中进一步验证搜索
grep -e "enable_log_compress" -e "Starting cm_agent" cm_agent-2021-09-16_172609-current.log
以上图为例,搜索结果表明,cm_agent 进程启动时间为 9 月 27 日 17:54(第一行),启动时 enable_log_compress = off
(第二行)因此未创建日志压缩线程(第三行)。后面 17:55 修改 enable_log_compress = on
并 reload 参数(第四行),但由于未重启进程,因此修改实际上不生效。
频繁重启检查
进入 cm_agent 日志目录,检查 cm_agent 进程是否频繁重启
# 8.0 版本关键词为 begin printing environment
grep -r "Starting cm_agent" cm_agent*.log
如果确实有频繁重启的现象,检查 $GAUSSLOG
目录下是否有文件名较长的日志文件,如
postgresql123456789123456789-2021-09-16_172610.log
如果存在,通常情况下为定位问题时生成了临时文件,但定位结束后未及时删除。将这些文件删除即可。
后续检查
-
查找最新日志,确保所有节点cm_agent日志压缩线程已启动
# 8.1 版本 gs_ssh -c "grep 'Starting thread LogCompress' $GAUSSLOG/cm/cm_agent/cm_agent*cur*.log" # 8.0 版本 gs_ssh -c "grep 'Get GAUSSLOG from env' $GAUSSLOG/cm/cm_agent/cm_agent*cur*.log"
-
观察一段时间,确认旧日志文件被压缩
- 点赞
- 收藏
- 关注作者
评论(0)