文档首页/ 云日志服务 LTS/ 常见问题/ 日志接入/ 使用ICAgent采集日志时,推荐的日志轮转方案是什么?
更新时间:2024-04-18 GMT+08:00

使用ICAgent采集日志时,推荐的日志轮转方案是什么?

日志轮转也叫日志切割或日志绕接,通俗来讲是对日志文件的大小进行控制。 软件系统通常会长时间的不停机运行,这样会产生很多信息记录到不同的日志中。随着时间的推移,日志的容量自然会越来越大,而硬盘的空间是有限的,就需要对日志文件的大小进行控制。

常用的日志轮转方式有两种:按时间轮转和按日志大小轮转。

  • 按时间轮转:在进行轮转日志时,以时间为标准,当日志出现的时间满足设定的时间阈值时,则进行日志轮转。类似的典型用法有:/var/log/messages 日志即按每7天轮转一次的规则进行日志切分。
  • 按日志大小轮转:在进行轮转日志时,以日志大小为标准,当日志的大小满足设定的大小时,则进行日志轮转。一般应用程序的日志多使用日志大小进行轮转。

在使用日志轮转时,有以下建议:

  • 如何轮转日志

    ICAgent不会对您的日志轮转,建议在应用程序中,使用成熟的软件包自定义日志轮转规则。例如:Java的logback、log4j2、Python的logging、Linux系统的logrotate。典型配置日志文件超过100/50/20MB轮转一次,保存10-20个历史日志文件。

  • 轮转后日志文件命名建议

    最佳实践建议:假设您的日志文件路径是/your/log/path/**/*.log,建议您轮转后的文件命名为:/your/log/path/**/*.xxx.log。此处的xxx按照用户习惯,一般是指日期,如20240103,但不能含字母。

    自定义轮转规则:如果您的日志文件轮转后命名规则不符合上述的最佳实践建议,可能导致轮转文件被重复采集,您可以通过自定义轮转规则来规避此问题。您可以为每条日志采集路径添加自定义轮转规则,基于正则表达式匹配轮转后的文件名,匹配成功的文件名会被识别为日志轮转文件,不会被重复采集。例如您的日志文件为/your/log/path/**/app1.log,轮转后的文件为/your/log/path/**/app1.20240103.biz.log,那么可以配置自定义轮转规则为{basename}\.[0-9-\.]+\.[0-9]+\.biz\.log。

  • 轮转后日志文件不建议压缩

    如果您的日志打印速率较高,日志文件会快速轮转,此时轮转后的文件末尾可能会有少量日志还未被采集,ICAgent将通过Linux的inode识别采集文件的唯一性,如果您轮转后的日志文件是压缩文件,则inode会发生变化。由于您的日志文件名和inode都发生变化,ICAgent将无法保证一定会采集到该轮转文件末尾未被采集的少量日志。

    例如:假设您轮转后的文件被压缩,文件名为:/your/log/path/**/*.log.xxx.zip,该文件的文件名和inode都发生变化,则ICAgent将无法保证一定会采集到该轮转文件末尾未被采集的少量日志。