因catalina.out在用磁盘大量空间,日志没有做收缩操作,需要zabbix报警的时候释放空间,比较繁重(cat /dev/null > catalina.out),因日志保存周期需要一个月。
网上找了有关tomcat日志分割的。使用jar包和使用logrotate。我觉得使用jar比较繁琐,这里我使用logrotate操作。
一、检查本机是否按照了logrotate
rpm -ql logrotate
二、配置文件位置在/etc/logrotate.conf
三、需要修改的文件目录在/etc/logrotate.d/下面,这里的文件需要我们手动创建的。
四、touch tomcat
cat tomcat
/tmp/tomcat/logs/catalina.out{
copytruncate
daily
rotate 7
compress
missingok
dateext
}
测试命令
logrotate -vf /etc/logrotate.d/tomcat
参数:
copytruncate:如果程序不支持重新打开日志的功能,又不能粗暴地重启程序,怎么滚动日志呢?copytruncate的方案出场了。
这个方案的思路是把正在输出的日志拷(copy)一份出来,再清空(trucate)原来的日志。
daily: 日志文件将按月轮循。其它可用值为‘mouth’,‘weekly’或者‘yearly’。
rotate 7: 一次将存储7个归档日志。对于第八个归档,时间最久的归档将被删除。
compress: 在轮循任务完成后,已轮循的归档将使用gzip进行压缩。
missingok: 在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误。
dateext:加入时间后缀
详细步骤如下:
拷贝程序当前正在输出的日志文件,保存文件名为滚动结果文件名。这期间程序照常输出日志到原来的文件中,原来的文件名也没有变。
清空程序正在输出的日志文件。清空后程序输出的日志还是输出到这个日志文件中,因为清空文件只是把文件的内容删除了,文件的inode编号并没有发生变化,变化的是元信息中文件内容的信息。
结果上看,旧的日志内容存在滚动的文件里,新的日志输出到空的文件里。实现了日志的滚动。
错误排查
empty log files are rotated, old logs are removed
considering log /tmp/txt.log
error: skipping "/tmp/txt.log" because parent directory has insecure permissions (It's world writable or writable by group which is not "root") Set "su" directive in config file to tell logrotate which user/group should be used for rotation.
set default create context
配置文件加入 su root root
网友评论