Linux系统Logrotate服务介绍

时间:2022-07-25
本文章向大家介绍Linux系统Logrotate服务介绍,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

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.
mv LOGDIR/error.log LOGDIR/nginx_error.
kill -USR1 `cat /var/run/nginx.pid`
cd $LOGDIR
find ./ -name “*.log” –mtime +30 |xargs -i mv {} /tmp/

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