logrotate切割Tomcat日志catalina.out

背景

需要Flume采集Tomcat的日志catalina.out,就需要按天切分日志,过程中遇到一些坑,记录一下,供遇到相同问题的同学参考。

环境

CentOS 6.5(非root权限)、Tomcat 6.0.35、logrotate 3.15.1(由于后面提到的特殊需求,后来自己安装的logrotate版本,没有使用系统集成的版本)

方案

前期考虑过的几种方案:

  1. logrotate、cronolog 等日志切分工具
  2. 改造Tomcat的日志框架为可支持时间切分的log4j等
  3. 自己写脚本重启Tomcat、备份日志,cron定时执行

最终基于以下优势决定使用logrotate:

  1. CentOS集成的工具,不需要额外安装、配置环境(不需要高版本功能的话)
  2. 对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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值