Logrotate日志切割工具的应用与配置,以下是公司生产环境亲测,跳了不少的坑,最后已经部署到生产了,可放心使用
简介
Logrotate是一个在Unix和类Unix系统(如Linux)上用于管理日志文件的实用程序。它可以帮助系统管理员自动地对日志文件进行轮转、压缩和删除,以避免日志文件不断增大占用过多的磁盘空间。
Logrotate的主要功能包括:
- 轮转日志文件:Logrotate可以按照一定的规则和时间间隔,将日志文件从当前时间点开始轮转,生成新的日志文件,同时保留一定数量的旧日志文件。这样可以让日志文件保持在一个可控的大小范围内,避免日志文件无限增长。
- 压缩日志文件:Logrotate可以对轮转后的日志文件进行压缩,以进一步减少磁盘空间的使用。压缩可以有效地减小日志文件的大小,同时保留文件的可读性,方便系统管理员进行故障排查和系统监控。
- 删除旧日志文件:Logrotate可以设置保留策略,自动删除过期或者不再需要的旧日志文件。这样可以避免过多的旧日志文件占用过多的磁盘空间。
- 配置灵活: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
脚本和定时任务同测试环境相同
结论:
测试结果与测试环境结果相同