CM功能介绍:日志压缩与回收

举报
起个名字11111 发表于 2021/09/30 11:01:46 2021/09/30
【摘要】 cm_agent组件具备日志文件压缩和回收的能力,避免日志占用过多的磁盘空间。本篇博文对cm_agent组件的日志压缩删除功能及常见问题的规避定位进行了介绍。

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"
    
  • 观察一段时间,确认旧日志文件被压缩

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。