如果服务日志文件大小增长较快,不断消耗磁盘空间就会触发告警,如果需要人为定期按照各种维度去手动清理日志就显得十分棘手。为了节省空间和方便整理,可以将日志文件按时间或大小分成多份,删除时间久远的日志文件,这就是通常说的日志滚动。logrotate 是一个Linux系统日志的管理工具,它在很多 Linux 发行版上都是默认安装的。
logrotate运行机制
系统会定时运行 logrotate,一般是每天一次,系统是这么实现按天执行的。crontab 会每天定时执行 /etc/cron.daily 目录下的脚本,而这个目录下有个文件叫 logrotate
# cat /etc/cron.daily/logrotate
#!/bin/sh
/usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
可以看到这个脚本主要做的事就是以 /etc/logrotate.conf 为配置文件执行了 logrotate。就是这样实现了每天执行一次 logrotate。
/etc/logrotate.conf 配置文件中有关键的一行:
include /etc/logrotate.d
这样的话,我们可以将我们自己程序的 logrotate.d 配置文件放在/etc/logrotate.d/。例如 syslog,nginx
logrotate运行命令
logrotate [OPTION...] <configfile>
-d, --debug :debug 模式,测试配置文件是否有错误。
-f, --force :强制转储文件。
-m, --mail=command :压缩日志后,发送日志到指定邮箱。
-s, --state=statefile :使用指定的状态文件。
-v, --verbose :显示转储过程。
通常惯用的做法是配合 crontab 来定时调用。
但是,我们可以debug方式运行,测试配置文件是否有错误。
logrotate -d <configfile>
并不会真正进行 rotate 或者 compress 操作,但是会打印出整个执行的流程,和调用的脚本等详细信息。
配置文件详解
cron 任务配置
参考资料
1、https://zhuanlan.zhihu.com/p/90507023
2、https://linux.cn/article-4126-1.html
网友评论