日志切割之Logrotate
介绍
日志文件包含了关于系统中发生的事件的有用信息,在排障过程中或者系统性能分析时经常被用到。对于忙碌的服务器,日志文件大小会增长极快,服务器会很快消耗磁盘空间,这成了个问题。除此之外,处理一个单个的庞大日志文件也常常是件十分棘手的事。
logrotate是个十分有用的工具,它可以自动对日志进行截断(或轮循)、压缩以及删除旧的日志文件。例如,你可以设置logrotate,让/var/log/foo日志文件每30天轮循,并删除超过6个月的日志。配置完后,logrotate的运作完全自动化,不必进行任何进一步的人为干预。
安装
默认centos系统安装自带logrotate,安装方法如下
yum -y install logrotate crontabs
软件包信息说明
[root@clsn6 ~]# rpm -ql logrotate
/etc/cron.daily/logrotate
/etc/logrotate.conf # 主配置文件
/etc/logrotate.d # 配置目录
配置文件
logrotate的配置文件是/etc/logrotate.conf,通常不需要对它进行修改。日志文件的轮循设置在独立的配置文件中,它(们)放在/etc/logrotate.d/目录下。
配置参数 | 说明 |
---|---|
monthly | 日志文件将按月轮循。其它可用值为’daily’,’weekly’或者’yearly’。 |
rotate 5 | 一次将存储5个归档日志。对于第六个归档,时间最久的归档将被删除。 |
compress | 已轮循的归档将使用gzip进行压缩。 |
nocompress | |
delaycompress | 与compress选项一起用,表示logrotate保留一个最新的文件不压缩 |
missingok | 在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误。 |
notifempty | 如果日志文件为空,轮循不会进行。 |
create 644 root root | 以指定的权限创建全新的日志文件,同时logrotate也会重命名原始日志文件。 |
prerotate/postrotate | 在logrotate转储之前/之后需要执行的指令,必须独立成行 |
copytruncate | 用于还在打开中的日志文件,把当前日志备份并截断 |
dateext | 使用当期日期作为命名格式 |
dateformat .%s | 配合dateext使用,紧跟在下一行出现,定义文件切割后的文件名,必须配合dateext使用,只支持 %Y %m %d %s 这四个参数 |
sharedscripts | 运行postrotate脚本,作用是在所有日志都轮转后统一执行一次脚本。如果没有配置这个,那么每个日志轮转后都会执行一次脚本 |
errors address | 专储时的错误信息发送到指定的Email 地址 |
ifempty | 日志文件为空文件也做轮转 (缺省选项) |
notifempty | 日志文件为空时,不进行轮转 |
mail address | 把转储的日志文件发送到指定的E-mail 地址 |
nomail | 转储时不发送日志文件 |
olddir directory | 转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统 |
noolddir | 转储后的日志文件和当前日志文件放在同一个目录下 |
daily/weekly/monthly | 指定转储周期为每天/周/月 |
rotate count | 指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份 |
logrotate处理tomcat catalina.out日志
配置
vim /etc/logrotate.d/tomcat-epg_api
vim /etc/logrotate.d/tomcat-epg_api
/web/soft/tomcat-8.5.51-epg_api-9080/logs/catalina.out {
dateext
dateformat -%Y-%m-%d
copytruncate
missingok
}
执行切割
logrotate --force /etc/logrotate.d/ tomcat-epg_api
如果/web/soft/tomcat-8.5.51-epg_api-9080/logs目录下出现:catalina.out-20200311 这样的文件表示切割成功