Logrotate日志切割工具的应用与配置

Logrotate日志切割工具的应用与配置,以下是公司生产环境亲测,跳了不少的坑,最后已经部署到生产了,可放心使用

注意:后经过在生产环境测试当中发现,在备份切割日志的时候有丢内容的现象发生,固慎用!!

简介

Logrotate是一个在Unix和类Unix系统(如Linux)上用于管理日志文件的实用程序。它可以帮助系统管理员自动地对日志文件进行轮转、压缩和删除,以避免日志文件不断增大占用过多的磁盘空间。

Logrotate的主要功能包括:
  1. 轮转日志文件:Logrotate可以按照一定的规则和时间间隔,将日志文件从当前时间点开始轮转,生成新的日志文件,同时保留一定数量的旧日志文件。这样可以让日志文件保持在一个可控的大小范围内,避免日志文件无限增长。
  2. 压缩日志文件:Logrotate可以对轮转后的日志文件进行压缩,以进一步减少磁盘空间的使用。压缩可以有效地减小日志文件的大小,同时保留文件的可读性,方便系统管理员进行故障排查和系统监控。
  3. 删除旧日志文件:Logrotate可以设置保留策略,自动删除过期或者不再需要的旧日志文件。这样可以避免过多的旧日志文件占用过多的磁盘空间。
  4. 配置灵活:Logrotate的配置文件可以根据不同的需求进行定制,可以灵活地设置日志文件的轮转规则、压缩方式、保留策略等。这使得Logrotate可以适应不同的系统和应用场景。

Logrotate是一个非常实用的工具,可以帮助系统管理员更好地管理和维护系统日志。通过Logrotate,系统管理员可以有效地控制日志文件的大小和数量,保证系统的稳定性和性能。

产生背景

1.线上nginx日志一天切割一次日志量10G左右,元旦至春节期间可达20G左右,服务器存储负载无法承受

2.切割后的日志不压缩,同步日志时间很长,日志归档相当不便,并且写入速度相当惊人,由此引发的思考是否要切割,是否要压缩

3.由于nginx产生的日志单体都比较大,为节省存储空间,方便查看,故此引入Logrotate做日志轮转切割处理

4.logrotate为linux原生工具,并且配合定时任务,稳定效果好,不存在安全问题

宗上所述,将nginx日志做切割、同步、删除处理,由此引入Logrotate

线上nginx日志现状:

测试

测试环境测试

测试节点:172.16.60.41

测试目录:/home/nginx/logs

测试时长:一周

测试用例:

测试问题一:执行脚本的时候清空原文件并压缩

测试问题二:压缩时间

测试问题三:压缩后的大小

测试问题四:压缩后的文件解压后是否与原文件大小和内容全部相同

测试问题五:在持续写入的情况下是否可以截断并压缩,如果不能需要先备份

测试问题六:是否按照规定周期压缩

测试问题七:是否需要设置定时任务

测试问题八:大数据量时操作时的效率问题

测试问题九:数据完整性

配置脚本:
/usr/local/nginx/logs/*.log {                           #日志文件所在的路径
        daily                                           #每天进行日志分割
        missingok                                       #在日志转储期间,任何错误将被忽略
        rotate 365                                      #保留365个备份
        compress                                        #通过gzip压缩转储以后的日志
        delaycompress                                   #delaycompress和compress一起使用时,转储的日志文件到下一次转储时才压缩,即这次切割的日志不压缩
        dateext                                         #日志后面带时间,如:nginx.access.log-20190516
        dateformat -%Y%m%d%s                            #日志时间格式
        dateyesterday                                   #如果定时任务时间设置的是0点就要配置此项,不然切割的内容是昨天的但是日志名却是当天的.
        notifempty                                      #当日志文件为空时,不进行轮转
        create 644 root root                            #轮转时指定创建新文件的属性
        sharedscripts                                   #运行postrotate脚本,作用是在所有日志都轮转后统一执行一次脚本。如果没有配置这个,那么每个日志轮转后都会执行一次脚本
            postrotate
                if [ -f /usr/local/nginx/nginx.pid ]; then
                    kill -USR1 `cat /usr/local/nginx/nginx.pid`
                fi
            endscript
}
定时任务:
#每天中午12点和0点各执行一次,可根据日志量调整时间
0 12,0 */1 * * /sbin/logrotate -f /etc/logrotate.d/nginx                              

测试结果:

#加了备份参数后源文件会被截断并清空后继续写入正常,截断后的文件压缩正常

#130M文件压缩需2秒,20G文件压缩大概需要3分钟,1G大小压缩不到10秒压缩后大小为1M

#130M文件压缩后大小为400k,20G文件压缩后大小为20M,根据写入内容不同稍有误差,后经实际信息测试误差在3倍左右

#经测试解压后文件大小相同

#测试中在持续写入的过程中可以正常截断压缩,7个文件每个300M生成压缩文件需要10几秒

#源文件inode号未变

#需要设置定任务并用绝对路径

#30个230M的文件执行一分钟,压缩后单个文件大小700K

#测试数据完整性得出的结论为,多次测试数据完整并无丢失现象出现

生产环境测试:

测试节点:172.16.4.116

测试目录:/home/nginx/logs

压缩比:1:36

脚本和定时任务同测试环境相同

结论:

测试结果与测试环境结果相同

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值