Logrotate 对服务器日志按照小时切割并压缩
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Logrotate 对服务器日志按照小时切割并压缩相关的知识,希望对你有一定的参考价值。
背景介绍
对于互联网小公司而言,对于服务日志的处理一般都不咋样,在微服务使用之后之后可能稍微好一些,但还是有很多传统的服务,如:Tomcat,nginx 等在日志处理的时候仍然不是很友好。主要是很多时候开发需要查看线上服务的日志便于查找 BUG,所以我们很多时候不是在查日志就是查日志的路上。
为了便于开发自己去查看日志于是便使用 Nginx 做了个日志下载站点。但是问题再次来了,那就是日志量太大,不好下载。怎么办?压缩呗。毕竟纯文本压缩比率超级高,100M 的文件能够压缩到几 M 不香吗?
但是即使压缩之后,解压后仍然很多,我们可能只需要查看的是几点到几点的,其它的对于我们没有意义。要是能够按照小时再切割一下就好了。
于是想到了 Linux 的 logrotate。但是默认的规则好像并不能满足我们的需求,因为它最低的时间也是按天计算的。
这时候就需要另外一个东西了,crontab 定时任务。
关于 logrotate
一般在服务器初始化的时候这些工具都已经存在的,但是为了保险,还是手动安装一下:
yum -y install logrotate
服务简单的说明:
服务的主配置文件:/etc/logrotate.conf
在主配置中可以看到 include /etc/logrotate.d 说明我们可以将用户定义的配置直接放到这下面,系统会自动为我们执行。当然,系统的并不能很好的满足我们需求。
再看看配置模板:
日志文件绝对路径 {
各种参数...
}
参数包含:
参数 | 说明 |
---|---|
compress | 日志轮替时候对旧日志就行 gzip 压缩 |
nocompress | 不压缩 |
daily | 按天轮替 |
dateext | 使用当前日期命名旧日志 |
dateformat .%s | 对日期进行格式定制 |
ifempty | 日志没有内容的时候也进行轮替 |
notifempty | 日志是空的就不轮替 |
将轮替后的文件发送到指定E-mail地址 | |
nomail | 不发邮件 |
copytruncate | 轮替时候先拷贝日志,备份拷贝文件,在清空本来的文件,这样不会导致轮替后原文件消失,缺点就是可能丢失小部分日志 |
monthly | 一个月轮替一次 |
olddir | 轮替后日志文件放入指定的目录 |
rotate | 轮替最多保留之前的数据几次 |
size | 当日志增长到指定大小的时候开始轮替 |
weekly | 按周轮替 |
yearly | 按年轮替 |
Missingok | 如果日志丢失,不报错继续滚动下一个日志 |
切割 Tomcat 日志示例
说明:
1. 服务器上面有这样一个 tomcat 日志:/data/TEST-01-BACKEND/MALL/MALL-WEB-Serice-8000/logs/catalina.out
2. 我们想将这个文件按每两小时切割一次并压缩,保留 100 个旧的切割,切割的文件保存到:/data/TEST-01-BACKEND/MALL/MALL-WEB-Serice-8000/logs/archives 目录下。
开始配置:
1. 添加 logrotate 配置文件:
vi /etc/logrotate.d/tomcat
内容如下:
# MALL LOGROTATE /data/TEST-01-BACKEND/MALL/MALL-WEB-Serice-8000/logs/catalina.out { notifempty copytruncate rotate 100 missingok compress dateext dateformat .%Y%m%d-%H olddir /data/TEST-01-BACKEND/MALL/MALL-WEB-Serice-8000/logs/archives }
红色部分需要注意,第一个是为了轮替之后原文件还存在,第二个为压缩,第三个定义切割后文件的名称。
2. 手动执行一次轮替:
/usr/sbin/logrotate -vf /etc/logrotate.d/tomcat
这里如果报错:because parent directory has insecure permissions (It\'s world writable or writable by group which is not "root")
只需要在配置中参数加入:
su root root
3. 查看轮替后效果:
可以看到原本 300M 左右的被压缩到 64 M。
4. 加入定时任务:
crontab -e
内容如下:
# LOGROTATE 0 */2 * * * /usr/sbin/logrotate -vf /etc/logrotate.d/tomcat >> /tmp/logrotate.log
这样就能每隔两小时轮替一次了!
以上是关于Logrotate 对服务器日志按照小时切割并压缩的主要内容,如果未能解决你的问题,请参考以下文章