Linux使用Logrotate做日志切割

一、服务介绍

服务器系统长期运行会产生大量的运行日志,若日志没有及时删除,日志文件日积月累将占满服务器所有存储空间,导致业务系统无法正常使用。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...]

参数

参数说明

-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
}

你可能感兴趣的:(linux日志分割,logrotate,logrotate日志分割,nginx日志分割,日志文件过大)