查看原文
其他

Linux系统Logrotate服务介绍

2017-07-01 民工哥 民工哥Linux运维


logrotate简介

   对于日常管理linux来说,日志文件显得非常的重要,它可以看出问题出现的点与相关错误信息,同样还可以根据信息来分析问题所出现的原因所在,是管理系统与服务必不可少的工具之一。

  logrotate是个十分有用的工具,它可以自动对日志进行截断(或轮循)、压缩以及删除旧的日志文件。例如,你可以设置logrotate,让/var/log/XXX日志文件每10天轮循,并删除超过1个月的日志。配置完后,logrotate的运作完全自动化,其实与系统的定时任务调用自定义脚本作用相同,它的运行也是定时任务来调用它的配置文件,从而实现上述效果的


配置文件及参数说明

安装命令非常简单(一般系统都会默认安装)

yum install logrotate crontabs

配置文件目录

/etc/logrotate.d

     #所有需要此功能的配置文件存放目录

[root@centos logrotate.d]# cat zabbix-agent

/var/log/zabbix/zabbix_agentd.log {

        daily 

        rotate 12

        compress

        delaycompress

        missingok

        notifempty

        create 0664 zabbix zabbix

}

参数说明

daily            #指定转储周期为每天

weekly         #指定转储周期为每周

monthly        #指定转储周期为每月

rotate 12       #转储的次数

compress       #通过gzip压缩转储以后的日志

nocompress   #不需要压缩时,用这个参数

copytruncate  

#用于还在打开中的日志文件,把当前日志备份并截断

nocopytruncate

#备份日志文件但是不截断

delaycompress  

#和compress一起使用时,转储的日志文件到下一次转储时才压缩

notifempty    

#如果是空文件的话,不转储

postrotate/endscript

#在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行

sharedscripts  运行postrotate脚本,作用是在所有日志都轮转后统一执行一次脚本。如果没有配置那么每个日志轮转后都会执行一次脚本

size size      

#当日志文件到达指定的大小时才转储,Size可以指定bytes(缺省)以及KB(sizek)或者MB(sizem)



logrotate运行流程

1、系统的定时任务来运行/etc/cron.daily/logrotate

[root@ ~]# cat /etc/cron.daily/logrotate

#!/bin/sh

/usr/sbin/logrotate /etc/logrotate.conf

EXITVALUE=$?

if [ $EXITVALUE != 0 ]; then

    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"

fi

exit 0

2、每天通过执行/usr/sbin/logrotate命令调用/etc/logrotate.conf这个配置文件

[root@resources ~]# cat /etc/logrotate.conf

# see "man logrotate" for details

# rotate log files weekly

weekly

# keep 4 weeks worth of backlogs

rotate 4

# create new (empty) log files after rotating old ones

create

# use date as a suffix of the rotated file

dateext

# uncomment this if you want your log files compressed

#compress

# RPM packages drop log rotation information into this directory

include /etc/logrotate.d

# no packages own wtmp and btmp -- we'll rotate them here

/var/log/wtmp {

    monthly

    create 0664 root utmp

minsize 1M

    rotate 1

}

/var/log/btmp {

    missingok

    monthly

    create 0600 root utmp

    rotate 1

}

# system-specific logs may be also be configured here.

3、最终调用/etc/logrotate.d下面的配置文件执行相关操作

[root@ logrotate.d]# cat vsftpd 

/var/log/vsftpd.log {

    # ftpd doesn't handle SIGHUP properly

    nocompress

    missingok

}

/var/log/xferlog {

    # ftpd doesn't handle SIGHUP properly

    nocompress

    missingok

}

需要注意的是当/etc/logrotate.conf读入文件时,include指定的文件中的参数会覆盖默认的参数


logrotate生产实例分享

______________分享一个切割nginx日志的例子________________

vim /etc/logrotate.d/nginx

##############################

# for cut nginx log everyday                 

# create by mingongge at 2017-05-31                                                       

##############################

/var/log/nginx/*.log {

daily

rotate 7

missingok

notifempty

dateext

sharedscripts

postrotate

   if [ -f /usr/local/nginx/logs/nginx.pid ];then

      kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`

   fi

endscript

}

上下两个配置实现的效果相同,请各自参考按需配置

vim /servser/scripts/auto_cut_nginxlog.sh

#!/bin/sh

#####################################

# this scripts for auto cut nginx log everyday 

# create by mingongge at 2017-05-31                                                                                

#####################################

LOGDIR=/var/log/nginx/

DATE=`date +%F`

mv $LOGDIR/access.log $LOGDIR/nginx_access.${DATE}.log

mv $LOGDIR/error.log $LOGDIR/nginx_error.${DATE}.log

kill -USR1 `cat /var/run/nginx.pid`

cd $LOGDIR

find ./ -name “*.log” –mtime +30 |xargs -i mv {} /tmp/

#实际生产环境大家还是要小心使用rm命令,或者说最好禁用此命令改用mv(后悔药哦!!)

—————————————————————————


写文不易,扫码直接打赏民工哥吧!!







您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存