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个月内不可修改。