logrotate介绍
参考:https://linux.cn/article-4126-1.html
参考:https://blog.csdn.net/vicky_lxw/article/details/58594400
日志文件包含了关于系统中发生的事件的有用信息,在排障过程中或者系统性能分析时经常被用到。对于忙碌的服务器,日志文件大小会增长极快,服务器会很快消耗磁盘空间,这成了个问题。除此之外,处理一个单个的庞大日志文件也常常是件十分棘手的事。
logrotate是个十分有用的工具,它可以自动对日志进行截断(或轮循)、压缩以及删除旧的日志文件。例如,你可以设置logrotate,让/var/log/foo日志文件每30天轮循,并删除超过6个月的日志。配置完后,logrotate的运作完全自动化,不必进行任何进一步的人为干预。另外,旧日志也可以通过电子邮件发送,不过该选项超出了本教程的讨论范围。
默认会安装如没有安装则使用 yum install logrotate crontabs 安装
命令参数
-d, --debug模式, 隐含-v,不会对日志文件做实际操作
-f, --force 强制轮转日志
-m, --mail 邮寄日志时使用的命令
-s, --state 指定另一个state文件
-v, --verbose 详细信息
--usage 打印帮助
配置文件参数
monthly: 日志文件将按月轮循。其它可用值为‘daily’,‘weekly’或者‘yearly’。
rotate 5: 一次将存储5个归档日志。对于第六个归档,时间最久的归档将被删除。
compress: 在轮循任务完成后,已轮循的归档将使用gzip进行压缩。
delaycompress: 总是与compress选项一起用,delaycompress选项指示logrotate不要将最近的归档压缩,压缩将在下一次轮循周期进行。这在你或任何软件仍然需要读取最新归档时很有用。
missingok: 在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误。
notifempty: 如果日志文件为空,轮循不会进行。
create 644 root root: 以指定的权限创建全新的日志文件,同时logrotate也会重命名原始日志文件。
postrotate/endscript: 在所有其它指令完成后,postrotate和endscript里面指定的命令将被执行。在这种情况下,rsyslogd 进程将立即再次读取其配置并继续运行。
实战
因为我们的日志已经被elk采集走了,所以本地的日志就没有必要保留一个月,而且会触发zabbix空间报警,所以修改日志处理策略
[root@baiyongjie logrotate.d]# ls /var/log/
anaconda boot.log-20191015 cron-20190930 journal messages-20190922 php-fpm secure-20191013 tuned yum.log
audit boot.log-20191016 cron-20191006 lastlog messages-20190930 redis spooler vsftpd yum.log-20190101
boot.log btmp cron-20191013 maillog messages-20191006 rhsm spooler-20190922 wtmp
boot.log-20191010 btmp-20191001 dmesg maillog-20190922 messages-20191013 sa spooler-20190930 xferlog
boot.log-20191011 chrony dmesg.old maillog-20190930 multi-nic-util secure spooler-20191006 xferlog-20190922
boot.log-20191012 cloud-init.log ecs_network_optimization.log maillog-20191006 mysqld.log secure-20190922 spooler-20191013 xferlog-20190930
boot.log-20191013 cron grubby maillog-20191013 ntp.log secure-20190930 squid xferlog-20191006
boot.log-20191014 cron-20190922 grubby_prune_debug messages ntpstats secure-20191006 tallylog xferlog-20191013
修改配置文件
因为是测试环境我直接修改的是全局的配置文件,生产环境应该修改/etc/logrotate.d/目录下的对应文件
$ cp /etc/logrotate.conf{,.bak}
#修改后对比
$ diff /etc/logrotate.conf{,.bak}
6c6
< rotate 2 #保留2周
---
> rotate 4
15,16c15
< compress #开启历史日志压缩
< delaycompress #指示logrotate不要将最近的归档压缩,压缩将在下一次轮循周期进行。
---
> #compress
执行logrotate
$ logrotate -fv /etc/logrotate.conf
reading config file /etc/logrotate.conf
including /etc/logrotate.d
reading config file bootlog
reading config file chrony
reading config file mysql
reading config file php-fpm
reading config file redis
......
removing /var/log/secure-20190922.gz
removing old log /var/log/secure-20190922.gz
removing /var/log/secure-20190930.gz
removing old log /var/log/secure-20190930.gz
removing /var/log/secure-20191006.gz
removing old log /var/log/secure-20191006.gz
......
compressing log with: /bin/gzip
removing /var/log/btmp-20191001.gz
removing old log /var/log/btmp-20191001.gz
destination /var/log/btmp-20191016 already exists, skipping rotation
[root@baiyongjie ~]# ls /var/log/
anaconda boot.log-20191014.gz cron grubby_prune_debug messages-20191013.gz redis spooler-20191013.gz wtmp-20191016.gz
audit boot.log-20191015.gz cron-20191013.gz journal messages-20191016.gz rhsm spooler-20191016.gz xferlog
boot.log boot.log-20191016.gz cron-20191016.gz lastlog multi-nic-util sa squid xferlog-20191013
boot.log-20191010.gz btmp dmesg maillog mysqld.log secure tallylog xferlog-20191016
boot.log-20191011.gz btmp-20191016.gz dmesg.old maillog-20191013.gz ntp.log secure-20191013.gz tuned yum.log
boot.log-20191012.gz chrony ecs_network_optimization.log maillog-20191016.gz ntpstats secure-20191016.gz vsftpd yum.log-20190101
boot.log-20191013.gz cloud-init.log grubby messages php-fpm spooler wtmp yum.log-20191016.gz
线上示例
# cat /etc/logrotate.d/syslog
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
compress
delaycompress
daily
missingok
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}