最近巡检发现生产系统一台数据库备份服务器根目录占用率较高,达到93%。

排查后发现主要是有个日志文件占用了大部分空间:

根目录的总大小是30G,但是这个日志文件就占用了23G左右。这个日志文件是记录的服务器自身硬件的采集信息,因为没有做日志文件切割,所以从服务器运行以来一直保存着这个日志信息(没有删除过),所以时间长了就会导致日志文件占用磁盘空间。
优化思路是:采用系统的日志管理工具(Logrotate)对日志文件进行管理。
logrotate是Linux/Unix系统最核心的日志自动管理工具,专门负责相关日志(比如系统、应用日志等)的轮转、压缩、删除、备份,主要目的是可以防止相关日志记录的文件无限制增长导致磁盘空间占满。
1.命令路径:
可以使用命令which logrotate查看Logrotate执行程序所在路径,通常Linux系统都自带安装该程序工具,执行命令一般是在/usr/sbin/logrotate。
2.核心配置文件:/etc/logrotate.conf主配置文件(总规则、全局默认值)
/etc/logrotate.d/子配置目录(每个服务自己的独立规则,如nginx、syslog以及本文的案例sysmonitor.log)
3.关键知识点:
/etc/logrotate.d/里的配置优先级高于/etc/logrotate.conf 主配置。
Linux系统默认是把Logrotate工具纳入在crond的每天定时任务执行,在/etc/cron.daily目录下可以看到有logrote的执行脚本:
操作系统每天的定时任务会自动启动Logrotate程序,先后读取/etc/logrotate.conf和/etc/logrotate.d/目录下的子配置文件,根据配置对相应日志进行切割、删除、压缩等处理操作。

比如本文案例Logrotate关于sysmonitor.log的配置在/etc/logrotate.d/目录下:

会每天执行对sysmonitor.log文件进行切割处理。
1.创建关于/var/log/sysmonitor.log日志文件的logrotate配置:

字段说明:
2.测试logrotate日志轮转配置是否正确
logrotate -d /etc/logrotate.d/sysmonitor
注意:-d选项调试模式,不会真的切割日志,只用来检查配置是否正确,也是排查配置是否有冲突的重要方法。
强制执行logroate切割动作可以使用-f选项
logrotate -f /etc/logrotate.d/sysmonitor(通常不需要,因为系统每天会定时执行)
3.配置后的效果
配置完成后,系统会每天通过执行logroate工具对/var/log/sysmonitor.log文件进行切割、压缩、备份等操作,如下图,每天会按配置值进行生成日志文件,过期的数据会被删除掉。

最终达到了控制日志文件的生成,避免日志文件占用过多磁盘空间甚至占满带来其他问题。
1.配置Logrotate后,一定使用“-d”选项对配置进行语法、文件配置冲突等检查。
2.一个日志只能有一个Logroate配置,如果有重复配置文件会影响日志文件的处理,造成异常。