机房冷风吹-利用logrotate进行日志分割

tomcat的catalina.out日志60G了?nginx的日志40G?服务器硬盘因为日志太大撑爆硬盘?还要每天手动清除?每天还要手动备份?
试试系统自带的logrotate日志轮转功能,配置简单,稳定可靠,一次配置永久生效,为您排除后患!

描述
来自man手册
logrotate旨在简化生成大量日志文件的系统的管理。它允许自动轮转、压缩、删除和邮寄日志文件的数量。每个日志文件可以每天、每周、每月处理,也可以在其变得太大时处理。
一般情况下,logrotate是基于每天的cron job来执行的,所以对某个log文件的rotae每天执行一次,除非rotate的执行标准是基于log文件大小,并且你logrotate这个命令每天被执行了多次,也就是你自定义了定时任务,让logrotate每x分钟或者每x小时执行一次,再或者你手动执行这个命令添加了-f/–force这个选项。
可以提供任意数量的配置文件。新的配置文件可能会覆盖早期文件中给出的选项,因此日志文件列出的配置顺序很重要。通常,应该使用一个配置文件,其中包含所需的任何其他配置文件。

安装:
默认centos/redhat系统安装自带logrotate。

yum -y install logrotate crontabs 

软件包信息说明

[root@zzx ~]# rpm -ql  logrotate
/etc/cron.daily/logrotate
/etc/logrotate.conf  # 主配置文件
/etc/logrotate.d   # 配置目录

logrotate的配置文件是/etc/logrotate.conf,通常不需要对它进行修改。日志文件的轮循设置在独立的配置文件中,放在/etc/logrotate.d/目录下。

命令使用

logrotate [-?dfv][-s <状态文件>][--usage][配置文件]

参数说明:

-?或–help  在线帮助。
-d或–debug  详细显示指令执行过程,便于排错或了解程序执行的情况。
-f或–force  强行启动记录文件维护操作,纵使logrotate指令认为没有需要亦然。
-s<状态文件>或–state=<状态文件>  使用指定的状态文件。
-v或–version  显示指令执行过程。
-usage  显示指令基本用法。

配置文件参数:

rotate 5	    一次将存储5个归档日志。对于第六个归档,时间最久的归档将被删除。
missingok       如果日志不存在,不产生错误信息
notifempty      如果日志文件为空,不做rotate,这个跟你ifempty互斥
create 644 root root	以指定的权限创建全新的日志文件,同时logrotate也会重命名原始日志文件。
sharedscripts   配合prerotate and postrotate 使用,sharedscripts 开启的话,如果使用了对需要做rotate的log文件使用了通配符,那么’*‘prerotate** and postrotate 的脚本只会执行一次。没有sharedscripts 的话,每个需要log文件做rotate的时候都会执行一遍prerotate and postrotate 的脚本
delaycompress   延迟压缩旧的日志文件,先rotate,不进行压缩,等到下次rotate时,才会压缩上次rotate的文件。这个需要跟compress一起使用,单独使用不生效。 
postrotate/endscript   rotate之后想要执行的脚本,需要放在postrotate 与 endscript中间,这两个选项要单独成行。
daily           指定rotate周期为每天,还有weekly, monthly。  
rotate count    指定rotate日志文件保留的数量,如果没有配置这个参数,就不保留备份,设置1的话,就是保留1个rotate备份,10就是保留10个rotate备份。  
size size       当日志文件到达指定的大小时才转储,默认的大小单位是bytes,可以以k,M,G。比如size 10k,10M,10G。  
compress        通过gzip压缩然后备份日志。  
nocompress      默认值,不做gzip压缩处理。  
delaycompress   和compress配合使用,rotate的日志文件到下一次执行logrotate时才进行压缩处理。  
copytruncate    把当前日志备份并截断,先拷贝原日志文件再清空,由于拷贝和清空之间有一个时间差,可能会丢失部                 分日志数据。  
create mode owner group        rotate之后,创建新文件的日志文件并指定新文件的属性,比如:create 644 tomcat tomcat  
mail address     把rotate的日志文件发送到指定的E-mail。  
dateext          使用当期日期作为命名格式,如果指定的rotate大于1,默认rotate之后的文件名是:xx.log.1,xx.log.2, xx.log3,如果配置dateext规则,那么rotate之后的文件名就会以日期结尾:xx.log.2020-04-20,xx.log.2020-04-21, xx.log.2020-04-22 
dateformat -%Y%m%d%H.%s   定义文件rotate后的文件名的日期格式,必须配合dateext使用,查了一下资料,目前只支持: %Y %m %d %H %s 这几个个参数(年,月,日,时,秒) 

使用方法
这里用tomcat的catalina.out日志分割举例

  1. 创建日志分割的配置文件

/etc/logrotate.d文件夹下添加自己定义的配置文件,多个服务或多个路径的可以创建多个文件。

[root@zzx ~]# vim /etc/logrotate.d/tomcat
/usr/local/tomcat/logs/catalina.out  {
    copytruncate
    daily
    rotate 7 
    missingok
    compress
    notifempty
    dateext
    dateformat -%Y%m%d%H.%s
}
  1. 手动进行测试

#先利用debug模式测试,根据输出的提示查看配置是否生效,是否需要调整

logrotate -v /etc/logrotate.d/tomcat

#强制手动执行轮转,执行后查看是否有新文件生成,如果生成文件证明配置无误

logrotate -f /etc/logrotate.d/tomcat
  1. 第二天再进行确认执行无误
    之后就可以根据需求再进行配置定时任务进行备份等等。

nginx等服务的日志分割配置文件同理,可以根据需要自定义参数。
更多详细信息可以查看man手册。

你可能感兴趣的:(机房冷风吹,linux,centos,运维)