使用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将无法保证一定会采集到该轮转文件末尾未被采集的少量日志。