logrotate切割Tomcat日志catalina.out
背景
需要Flume采集Tomcat的日志catalina.out,就需要按天切分日志,过程中遇到一些坑,记录一下,供遇到相同问题的同学参考。
环境
CentOS 6.5(非root权限)、Tomcat 6.0.35、logrotate 3.15.1(由于后面提到的特殊需求,后来自己安装的logrotate版本,没有使用系统集成的版本)
方案
前期考虑过的几种方案:
- logrotate、cronolog 等日志切分工具
- 改造Tomcat的日志框架为可支持时间切分的log4j等
- 自己写脚本重启Tomcat、备份日志,cron定时执行
最终基于以下优势决定使用logrotate:
- CentOS自带的工具,不需要额外安装、配置环境(不需要高版本功能的话)
- 对Tomcat本身脚本无侵入,不需要重启
实现
用到的路径
- 系统继承的logrotate(最终没有使用):
/usr/sbin/logrotate
- 自己安装的logrotate:
/home/hadoop/bin/logrotate
- Tomcat路径:
/home/hadoop/apache-tomcat-6.0.35
- logrotate配置文件路径:
/home/hadoop/apache-tomcat-6.0.35/tomcat-log-cut
logrotate配置文件:tomcat-log-cut
/home/hadoop/apache-tomcat-6.0.35/logs/catalina.out {
rotate 7
dateext
dateyesterday # 这个参数高版本的logrotate才支持
dateformat .%Y%m%d
notifempty
missingok
copytruncate
}
测试方法
logrotate的-d
参数用于调试,不会真正执行文件切分
/home/hadoop/bin/logrotate -s /tmp/logrotate.status -d -f /home/hadoop/apache-tomcat-6.0.35/tomcat-log-cut
logrotate的-v
参数用于真正执行文件切分同时打印详细日志
/home/hadoop/bin/logrotate -s /tmp/logrotate.status -v -f /home/hadoop/apache-tomcat-6.0.35/tomcat-log-cut
cron配置
# Tomcat catalina.out logrotate
0 0 * * * /home/hadoop/bin/logrotate -s /tmp/logrotate.status -f /home/hadoop/apache-tomcat-6.0.35/tomcat-log-cut
遇到的几个坑
root权限
logrotate默认使用/var/lib/logrotate.status
记录状态,需要root权限,可使用-s /xxx/logrotate.status
参数来指定其他有权限的文件记录状态
每日执行时间
之前在logrotate配置文件中配了daily
参数,并且把配置文件放到了/etc/logrotate.d/
下面(需要root权限),但由于logrotate的daily
/weekly
/monthly
使用anacron来执行的,每天执行时间是凌晨3点左右,不想改anacron的配置了,于是就没有再把配置文件托管到/etc/logrotate.d/
下,而是放到自定义的目录下手动配置cron来执行,可以精确指定到每天的00:00执行
时间后缀
由于Flume收集文件会根据文件创建时间做HDFS的分片,所以需要每天00:00分执行,而不是23:59,而这样带来的问题是,时间后缀为当天的日期,但其实归档的日志是前一天的,查了下高版本的logrotate是支持配置文件里写dateyesterday
参数的,使用前一天的日期做文件后缀,附logrotate github地址:https://github.com/logrotate/logrotate
归档文件重名
由于测试时手动执行生成过日期后缀的日志归档文件,再次执行时会因为文件重名而失败,需要注意将测试的归档文件删掉或移走,不然可能会影响cron定时调起的执行结果,错误信息类似:error: destination /home/hadoop/apache-tomcat-6.0.35/logs/catalina.out.20200217 already exists, skipping rotation
上一篇: PHP自定义函数实现格式化秒的方法
下一篇: Java实现CORS跨域请求的实现方法
推荐阅读
-
logrotate切割Tomcat日志catalina.out
-
cronolog切割tomcat的catalina.out日志
-
Linux下切分Tomcat的catalina.out日志文件
-
tomcat catalina.out日志按日切割
-
切分 Tomcat 的 catalina.out 文件,每天一个日志文件
-
Tomcat的catalina.out日志分割
-
tomcat catalina.out日志切割处理方案
-
Linux 下切分Tomcat 的catalina.out日志文件
-
Logrotate实现Catalina.out日志每俩小时切割
-
日志切割工具logrotate解决Tomcat catalina.out日志过大的问题