logrotate实现日志切割和清理(清晰易懂)

Posted Smart_Maggie

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了logrotate实现日志切割和清理(清晰易懂)相关的知识,希望对你有一定的参考价值。

一、logrotate介绍

logrotate是centos自带命令,其他linux操作系统可能需要自行安装,用来进行日志切割和定期删除,简单来说就是将某个日志文件按照时间或大小分割成多份,删除时间久远的日志。

日志用来帮助我们了解程序运行情况,定位程序bug,如果不对日志及时进行清理就会占据磁盘空间,尤其对于服务器类型的项目,需要长期运行,日志量更大,一年前的日志大部分情况下对我们是无用的也无需保留,并且如果我们的日志记录频率很高,全部存储在一个文件中,文件是很大的,当需要查看时,使用vim或者其他软件打开也会很卡。

二、配置讲解

logrotate是基于crond服务(定时任务)来运行的,

有几个重要的配置:

1、/etc/logrotate.conf(主配置)和/etc/logrotate.d/*(子配置)

/etc/logrotate.conf是全局配置,logrotate.conf里面包含include /etc/logrotate.d这句,加载子配置文件的意思,说明/etc/logrotate.d/目录下是具体的配置,一般是以服务名称命名,比如yum等配置。主配置和子配置有冲突时,以子配置的规则为准。

logrotate配置文件及常用参数解释如下图:

2、/var/lib/logrotate.status,是logrotate自己的日志文件

记录logrotate的运行情况,可以查看被logrotate管理的日志文件的最后备份时间

3、logrotete 命令参数

 (上面三个照片来源:b站截图,侵删)

三、实现

实现方式有两种

方案1:是在原有的配置下新增(在主配置或子配置新增),依旧被原来的cron管理,系统的cron管理一般是每天执行一次,基于计划任务/etc/cron.daily/logrotate

方案2:是在自己在任意位置新建配置文件,然后自己写定时任务来管理,自己写定时任务更灵活,可以每小时,每天23:59:00,每周等任何时刻执行logrotate命令,但两者原理是一样的,都是logrotate命令被执行时就按照logrotate配置文件来切割清理日志

案例:方案2,每天23:59:00执行logrotate命令,按天清理,保留5天

step1,任意位置写配置文件,权限改成644

   

step2,写定时任务,定时执行logrotate

    crontab -e写入,内容为“  59 23 * * * /usr/sbin/logrotate -f /home/zmq/daily_logrotate  ”

step3,修改系统时间,测试效果

    调整系统时间为23:58:30,等待30s

    

    

    切割成功,logrotate本身的日志也记录在/var/lib/logrotate.status里了

    

四、注意事项

1、如果像我这样,自己新增一个配置文件,需要给配置文件的权限设置成644及以下,否则logrotate不生效

2、logrotate -d hello.conf :加-d运行该命令,只是测试此时是否满足日志分割的条件,实际上并没有进行分割备份文件

3、-f 参数,强制执行日志分割清理的功能,我觉得加上更好,因为执行logrotate命令要检查很多(比如系统时间等),导致执行失败,所以直接 -f 强制执行,简单粗暴

4、参考文章:这两文章有些点解释的很好,侵删

logrotate自定义切割时间的一些坑 - 梦轻尘 - 博客园

Linux日志切割神器logrotate原理介绍和配置详解 - 知乎

Nginx 日志切割(Logrotate)

Logrotate 配置文件

# ls /etc/logrotate.*
/etc/logrotate.conf

/etc/logrotate.d:
cups  dracut  fmdcn  httpd  iptraf  monit  psacct  puppet  sssd  syslog  yum  zabbix-agent

/etc/logrotate.conf 是 logrotate 的配置文件。

/etc/logrotate.d/ 是用于存储其他配置文件的目录。该目录里的所有文件都会被主动的读入 /etc/logrotate.conf。

配置 Logrotate 只需要在 /etc/logrotate.d/  新建一个文件,示例:

vim /etc/logrotate.d/fmdcn

/cache/cache/logs/fmdcn/*.log{  # /cache/cache/logs/fmdcn/*.log 为需要切割的日志路径
daily  # 日志文件将按天轮询,也可以是weekly, monthly
missingok  # 在日志轮询期间,任何错误将被忽略
dateext  # 定义日志文件后缀是日期格式,error.log-20170928
compress  # 在轮循任务完成后,已轮循的归档将使用 gzip 进行压缩
delaycompress  # 不将最近的归档压缩,压缩将在下一次轮询周期进行
rotate 30  # 保存 30 个日志文件,后续切割文件时,将时间最久的日志文件删除
notifempty  # 如果是空文件的话,不进行转储
create 640 root adm  # 以指定的权限和用户属性创建新的日志文件
sharedscripts  # when telling nginx that logs have been rotated, only do it once rather than once for each file group 
postrotate   # postrotate/endscript 在所有其它指令完成后,postrotate和endscript里面指定的命令将被执行
        [ ! -f /FastwebApp/fmdcn/nginx/logs/nginx.pid ] || kill -USR1 `cat /FastwebApp/fmdcn/nginx/logs/nginx.pid`
endscript
# postrotate 命令块发送一个信号到 nginx,告诉它日志已经被轮循,nginx 应该使用新的本件句柄
}

 

配置检查:
logrotate -d /etc/logrotate.d/fmdcn

运行后将显示 debug 信息

立即生效:

 logrotate -f -v /etc/logrotate.d/fmdcn

 


以上是关于logrotate实现日志切割和清理(清晰易懂)的主要内容,如果未能解决你的问题,请参考以下文章

日志切割:logrotate

rsyslog与 logrotate 服务以及日志切割方法小结 [Logrotatepythonshell脚本实现 ]

运维中的日志切割操作梳理(Logrotate/python/shell脚本实现)

Tomcat日志切割(logrotate)

Tomcat日志切割(logrotate)

日志切割: logrotatepythonshell实现