logrotate 日志分割工具
2017-11-06 14:09
225 查看
由于tomcat 产生的日志量过大,有资料显示"当Tomcat的日志文件catalina.out的大小大于2GB时,Tomcat程序崩溃时将有可能会启动失败并且不会有任何错误信息提示" 目前,以tomcat的输出日志catalina.out 的量非常大,需要对其进行日志分割,日志分割工具用到了logrotate。 logrotate 是一个日志管理程序,用来把日志文件按要求切割,保留指定的份数,并且创建新日志。称作"转储"。(旋转; 使转动; 使轮流,轮换; 交替;) logrotate 的执行依赖crond 服务实现,具体实现细节可以查看
cat /etc/cron.daily/logrotate #!/bin/sh /usr/sbin/logrotate /etc/logrotate.conf EXITVALUE=$? if [ $EXITVALUE != 0 ]; then /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]" fi exit 0
crontab 的配置文件
[root@Tomcat ~]# cat /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ 01 * * * * root run-parts /etc/cron.hourly 02 4 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthly
规定不同类型的定时任务执行的时间
logrotate 的配置信息在/etc/logrotate.conf 中的是全局配置文件,针对不同服务的配置文件放在 /etc/logrotate.d/中,如果与全局配置冲突,以/etc/logrotate.d/ 为准。
logrotate 的运行分为三步,判断系统的日志文件,建立转储计划及参数,通过cron daemon 运行crontab 缺省运行的代码。 logrotate 的脚本放在/etc/cron.daily/logrotate 中
logrotate.conf 配置参数的含义:
# see "man logrotate" for details # rotate log files weekly weekly #每周轮转一次 # keep 4 weeks worth of backlogs rotate 4 #保留四个日志文件 # create new (empty) log files after rotating old ones create #rotate后,创建一个新的空文件 # uncomment this if you want your log files compressed #compress #默认是不压缩的 # RPM packages drop log rotation information into this directory include /etc/logrotate.d #这个目录下面配置文件生效 # no packages own wtmp — we’ll rotate them here /var/log/wtmp { #定义/var/log/wtmp这个日志文件; monthly #每月轮转一次,取代了上面的全局设定的每周轮转一次; minsize 1M #定义日志必须要大于1M大小才会去轮转; create 0664 root utmp #新的日志文件的权限,属主,属主; rotate 1 #保留一个,取代了上面的全局设定的保留四个; } /var/log/btmp { #定义/var/log/btmp这个日志文件; missingok #如果日志丢失, 不报错; monthly create 0600 root utmp rotate 1 }
如果特定的配置文件没有指定相应的项,那么全局配置就会起作用。
logrotate 常用的参数有:
daily #指定转储周期为每天 weekly #指定转储周期为每周; monthly #指定转储周期为每月; rotate count #指定日志文件删除之前转储的次数,0指没有备份,5指保留5个备份; compress #通过gzip压缩转储以后的日志; nocompress #不需要压缩时,用这个参数; delaycompress #延迟压缩,和compress一起使用时,转储的日志文件到下一次转储时才压缩; nodelaycompress #覆盖delaycompress选项,转储同时压缩; copytruncate #用于还在打开中的日志文件,把当前日志备份并截断; nocopytruncate #备份日志文件但是不截断; create mode owner group #转储文件,使用指定的文件模式创建新的日志文件; nocreate #不建立新的日志文件; errors address #专储时的错误信息发送到指定的Email地址; ifempty #即使是空文件也转储,这个是logrotate的缺省选项; notifempty #如果是空文件的话,不转储; mail address #把转储的日志文件发送到指定的E-mail地; nomail #转储时不发送日志文件; olddir directory #转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统; noolddir #转储后的日志文件和当前日志文件放在同一个目录下; prerotate/endscript #在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行; postrotate/endscript #在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行; tabootext [+] list #让logrotate不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig, .rpmsave,v,和~ ; size size #当日志文件到达指定的大小时才转储,Size可以指定bytes(缺省)以及KB(sizek)或者MB(sizem); postrotate <s> endscript #日志轮换过后指定指定的脚本,endscript参数表示结束脚本; sharedscripts #共享脚本,下面的postrotate <s> endscript中的脚本只执行一次即可;
logrotate 分割日志的方法主要有两种:
一种是不使用指定参数”copytruncate” 。这种方法会创建一个新的日志文件给程序输出日志,这个方法要重新启动进程。 有些程序提供了重新打开日志的接口, 如果一个程序输出了多个需要滚动的脚本,那么就需要使用sharedscripts 参数,当所有的日志都重命名了后,再进行通知。
第二种是使用指定参数”copytruncate” 。 这种方法不会更换当前程序输出日志的文件。
重命名程序当前正在输出日志的程序。因为重命名只会修改目录文件的内容,而进程操作文件靠的是inode编号,所以并不影响程序继续输出日志。 创建新的日志文件,文件名和原来日志文件一样。虽然新的日志文件和原来日志文件的名字一样,但是inode编号不一样,所以程序输出的日志还是往原日志文件输出。 通过某些方式通知程序,重新打开日志文件。程序重新打开日志文件,靠的是文件路径而不是inode编号,所以打开的是新的日志文件。 /var/log/nginx/*log { daily rotate 10 missingok notifempty compress sharedscripts su root postrotate /bin/kill -USR1 $(cat /var/run/nginx.pid 2>/dev/null) 2>/dev/null || : endscript }
第二种copytruncate 是将正在输出的日志copy出来,再清空(trucate)原来的日志。
这个方案再日志copy 到清空文件这段时间内,日志信息会丢失。 所以,大部分程序都提供了更新打开日志的功能。
运行刚刚创建的配置:
cat /etc/logrotate.d/tomcat /usr/local/tomcat-huarun/log/catalina.out { rotate 4 missingok notifempty size 500M copytruncate create 700 root root } logrotate -f /etc/logrotate.d/tomcat
相关文章推荐
- linux日志分割处理工具logrotate
- logrotate 日志分割工具的配置使用
- linux日志分割处理工具logrotate
- CentOS Linux使用logrotate分割管理日志
- logrotate工具日志管理
- 【运维工具】logrotate 日志管理神器
- 使用logrotate做nginx日志分割
- 【Linux笔记】如何利用logrotate工具自动切分滚动中的日志文件
- MySQL日志切割工具logrotate
- 【运维工具】logrotate 日志管理神器
- Linux使用logrotate分割管理日志rsync日志 推荐
- 利用apache自带的工具 分割访问日志
- logrotate日志转储工具
- [日志分割回滚] 使用linux自带的logrotate对nginx日志进行分割(脚本)
- logrotate日志管理工具
- 日志分割工具——cronolog
- 使用Logrotate分割Nginx日志
- 【运维工具】logrotate 日志管理神器
- 利用logrotate系统工具切割tomcat日志
- 使用linux自带的logrotate对nginx日志进行分割