一、介绍日志切割logrotate
对于Linux系统安全来说,日志文件是极其重要的工具。不知为何,我发现很多运维同学的服务器上都运行着一些诸如每天切分Nginx日志之类的CRON脚本,大家似乎遗忘了Logrotate,争相发明自己的轮子,这真是让人沮丧啊!就好比明明身边躺着现成的性感美女,大家却忙着自娱自乐,罪过!
logrotate程序是一个日志文件管理工具。用于分割日志文件,删除旧的日志文件,并创建新的日志文件,起到"转储"作用。可以节省磁盘空间。例如,你可以设置logrotate,让/var/log/logfile日志文件每30天轮循,并删除超过6个月的日志。配置完后,logrotate的运作完全自动化,不必进行任何进一步的人为干预。
二、logrotate配置使用
1、安装logrotate
(1)系统版本,我使用的如下
[root@linuxidc ~]# cat /etc/RedHat-release
CentOS Linux release 7.3.1611 (Core)
[root@linuxidc ~]# uname -r
3.10.0-514.26.2.el7.x86_6
(2)默认centos系统安装自带logrotate,直接使用yum 安装
[root@linuxidc ~]# yum -y install logrotate
(3)软件包说明
[root@linuxidc ~]# rpm -ql logrotate
/etc/cron.daily/logrotate
/etc/logrotate.conf #logrotate 自身的配置文件
/etc/logrotate.d #配置切割设置的目录
注:logrotate的配置文件是/etc/logrotate.conf,通常不需要对它进行修改。
日志文件的轮循设置在独立的配置文件中,它(们)放在/etc/logrotate.d/目录下。
2、配置使用logrotate
(1)准备测试日志
创建测试日志/log-file,然后在其中填入一个10MB的随机比特流数据文件
[root@linuxidc ~]# touch /var/log/log-file
[root@linuxidc ~]# head -c 10M < /dev/urandom > /var/log/log-file
(2)配置切割设置
[root@linuxidc ~]# vim /etc/logrotate.d/log-file
[root@linuxidc ~]# vim /etc/logrotate.d/log-file
/var/log/test/log-file {
daily
rotate 15
compress
delaycompress
missingok
notifempty
dateext
sharedscripts
create 644 root root
postrotate
/usr/bin/killall -HUP rsyslogd
endscript
}
(3)配置文件参数说明
配置参数
说明
monthly
日志文件将按月轮循。其它可用值为'daily','weekly'或者'yearly'。
rotate 5
一次将存储5个归档日志。对于第六个归档,时间最久的归档将被删除。
compress
在轮循任务完成后,已轮循的归档将使用gzip进行压缩。
delaycompress
总是与compress选项一起用,delaycompress选项指示logrotate不要将最近的归档压缩,压缩将在下一次轮循周期进行。这在你或任何软件仍然需要读取最新归档时很有用。
missingok
在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误。
notifempty
如果日志文件为空,轮循不会进行。
dateext
切换后的日志文件会附加上一个短横线和YYYYMMDD格式的日期,没有这个配置项会附加一个小数点加一个数字序号
sharedscripts
在所有其它指令完成后,postrotate和endscript里面指定的命令将被执行。在这种情况下,rsyslogd 进程将立即再次读取其配置并继续运行。
create 644 root root
以指定的权限创建全新的日志文件,同时logrotate也会重命名原始日志文件。
postrotate/endscript
在所有其它指令完成后,postrotate和endscript里面指定的命令将被执行。在这种情况下,rsyslogd 进程将立即再次读取其配置并继续运行。
以上信息来源 "man logrotate"
(4)运行logrotate
logrotate可以在任何时候从命令行手动调用
① 要调用为/etc/lograte.d/下配置的所有日志切割配置
[root@linuxidc ~]# logrotate /etc/logrotate.conf
② 要为某个特定的配置调用logrotate,执行一次切割任务测试