一、服务介绍
服务器系统长期运行会产生大量的运行日志,若日志没有及时删除,日志文件日积月累将占满服务器所有存储空间,导致业务系统无法正常使用。nginx等日志较多的应用日常维护时日志管理及其重要。
Logrotate是一个Linux工具,用于管理系统中产生的日志文件。它可以自动将旧日志文件进行日志切割、压缩存档、删除和重命名等操作,以便释放磁盘空间。
二、安装配置
1、服务查询
#查询logrotate服务是否安装,该服务默认已安装
[root@node ~]# rpm -qa logrotate
logrotate-3.8.6-19.el7.x86_64 #已安装,若返回结果为空表示未安装
2、服务安装
#安装logrotate服务
[root@node ~]# yum -y install logrotate
三、Logrotate的基本使用
1、配置文件
#主配置文件
/etc/logrotate.conf
#存放所有日志转存规则文件,logrotate执行日志转存任务时会读取该目录下所有文件
/etc/logrotate.d/
#Logrotate是基于crond服务运行的,其脚本是/etc/cron.daily/logrotate,日志轮转是根据此计划任务自动完成的。此脚本文件不用修改,crond服务会自动调用logrotate.conf主配置文件。默认每天执行一次。
/etc/cron.daily/logrotate
2、手动切割日志
#手动切割日志
[root@node ~]# logrotate -fv /etc/logrotate.conf
命令语法:logrotate [OPTION...] <configfile>
参数 | 参数说明 |
-d | debug模式,测试配置文件是否有错误 |
-f | 强制转储文件 |
-m | 压缩日志后,发送日志到指定邮箱 |
-s | 使用指定的状态文件 |
-v | 显示转储过程 |
3、日志切割记录
#记录了上次日志文件切割时间
[root@node ~]# cat /var/lib/logrotate/logrotate.status
logrotate state -- version 2
"/var/log/yum.log" 2023-1-1-3:13:1
"/var/log/firewalld" 2022-5-3-11:0:0
"/var/log/boot.log" 2022-5-6-3:9:1
"/var/log/chrony/*.log" 2022-5-3-11:0:0
"/var/log/wtmp" 2022-5-3-11:0:0
"/var/log/spooler" 2023-3-19-3:7:1
"/var/log/btmp" 2023-3-1-3:28:1
"/var/log/maillog" 2023-3-19-3:7:1
"/var/log/wpa_supplicant.log" 2022-5-3-11:0:0
"/var/log/secure" 2023-3-19-3:7:1
"/var/log/messages" 2023-3-19-3:7:1
"/var/log/cron" 2023-3-19-3:7:1
四、Logrotate规则文件详解
注:一个规则文件内可添加多个日志规则文件
#创建日志轮转策略,策略名称自行定义
[root@node ~]# vi /etc/logrotate.d/nginx
#日志文件位置
/opt/nginx/logs/access.log
#日志转存规则,需用{}圈起来
{
compress #通过gzip对转储以后的日志进行压缩
daily #按天进行回滚(monthly按月回滚,weekly按天回滚,yearly按年回滚)
nocompress #不对日志进行gzip压缩处理
copytruncate #用于处理还在打开中的日志文件,以先拷贝再清空的方式对当前日志进行备份并截断操作;由于拷贝和清空之间有一个时间差,可能会丢失部分日志数据
nocopytruncate #备份日志文件但不进行截断操作
create mode owner group #轮转时指定创建新文件,可指定权限、属主和属组
nocreate #日志轮转后不创建新的日志文件
delaycompress #发生轮转的日志文件到下一次转储时才压缩
nodelaycompress #日志轮转同时进行压缩
missingok #如果日志丢失,忽略此日志不产生报错
errors address #轮转时产生的错误信息发送到指定的Email地址
ifempty #空日志也进行日志轮转
notifempty #空日志不进行轮转
olddir directory#轮转后的日志文件放入指定的目录,指定目录和当前日志文件需要在同一个文件系统
noolddir #轮转后的日志文件和当前日志文件放在同一个目录下
sharedscripts #所有日志都轮转后统一执行postrotate脚本
prerotate #在logrotate轮转之前需要执行的指令,如修改文件的属性
postrotate #在logrotate转储之后需要执行的指令,如重启(kill -HUP)服务
rotate X #指定日志文件删除之前轮转的次数,0:没有备份,5:保留5个备份
dateext #使用当期日期作为轮转日志的后缀名
dateformat .%s #配合dateext使用,定义文件切割后的文件名,只支持 %Y %m %d %s 这四个参数
minsize xM #日志超过x则立即进行回滚(如果未超过则按照设置得天或月进行回滚)
}
五、Logrotate示例
Nginx日志切割转存,每天转存生成一个压缩日志文件,当日志文件达到500M时也进行转存操作。仅保留10个转存文件。
# vi /etc/logrotate.d/nginx
/opt/nginx/logs/access.log
{
missingok
daily
copytruncate
rotate 10
notifempty
compress
dateext
minsize 500M
}
/opt/nginx/logs/error.log
{
missingok
daily
copytruncate
rotate 10
notifempty
compress
dateext
minsize 500M
}