如何解决日志文件过大问题

 

咱们在运行tomcat的时候,有一个日志文件不会被拆分,会一直累积,直到预警或磁盘占用完毕,致使了文件没法打开、影响性能、没法归档等问题,故咱们这里经过介绍logrotate工具来解决自动日志拆分问题node

1.验证机器是否有logrotate工具,若是没有则须要安装,如centos系统安装方式(因为该工具很早就存在Linux中,目前在不少发行版本都存在,故通常不须要安装,但简化版操做系统可能有作阉割,因此须要确认)linux

#yum install -y logrotatenginx

2.编写执行脚本vim

#vim /etc/logrotate.d/tomcat centos

#输入以下内容,其中/home/admin/tomcat/logs/catalina.out表明具体须要分割的日志文件(若是是多个文件,能够空格分开,文件名中有空格,要用””,如”/home/admin/access.log” /home/dubbo.log)tomcat

/home/admin/tomcat/logs/catalina.out {dom

dailyide

rotate 30工具

dateext性能

dateformat .%Y-%m-%d

notifempty

copytruncate

}

示例section代表按文件大小触发日志自动切分,大小单位除了上面所示的k外,还能够是M或G

#vim /etc/logrotate.d/nginx 

/usr/local/nginx/logs/access.log {

copytruncate

rotate 10

start 0

size 2048k

notifempty

missingok

olddir /usr/local/nginx/logs

}

这里介绍一下里面含有的关键参数

create 644 admin admin指定权限

daily #表示天天进行一次拆分,相应的参数还有weekly、monthly

rotate 30 #表示保留最近30个文件,多余的会自动进行删除,可根据本身的状况定制(必定要配置,坑,若是没有配置,默认是0,也就是虽然滚动生成了日志文件,可是很快就删除了,记住必定要配置

dateformat #日志文件拆分后缀格式

notifempty #若是被拆分的文件是空的,那么久不作拆分处理

copytruncate #把正在输出的日志拷一份出来,再清空原来的日志(另外一个参数为create,该参数表示把日志文件重命名了,建立了一个新文件,可是怎么防止数据不丢失的,是因为原来日志识别方式是经过inode标记的,因此依然仍是往原日志写数据,那么如何重定向到新建的日志文件,此时某些程序提供从新打开日志文件的接口,故能够重定向到新文件,而完成日志文件切换,可是该功能须要你写日志的程序支持,不然不能达到目的)

size=1G      # 若日志文件达到1G,则触发切分(不会自动触发,只是在>1G 时,执行拆分的时候才能成功拆分)

    olddir /home/work/history # 指定历史日志存放目录

    notifempty   # 若/home/work/running.log是空文件,则不作切分

    missingok    # 若/home/work/running.log不存在,不报错

extension .log #后缀扩展

rotate COUNT

    轮转COUNT次,也就是最多保留COUNT个轮转备份。

    超出的被删除或邮寄。

    设置为0,则不保存轮转的老日志。

start COUNT

    轮转文件名基于这个数字。

    例如,指定0时,原日志文件轮转的备份文件以.0为扩展名,若是指定9,就直接从.9开始跳过0-8

    而后再继续向后轮转rotate指定的次数。

配置完成后,能够先验证一下是否有做用,手动拆分命令

#logrotate --force /etc/logrotate.d/tomcat

执行上面的命令后,会执行上面的脚本内容,看看是否是对你的文件进行了拆分,会生成一个当天日期的catalina.out.2016.xx.xx,并会清空catalina.out文件

 

关于执行时间的问题(什么时间进行文件拆分的?)

咱们能够自定义文件拆分时间,具体配置文件在 /etc/anacrontab文件内,该文件安装软件后,就会有,故无需本身去新加

# cat /etc/anacrontab 

# /etc/anacrontab: configuration file for anacron

# See anacron(8) and anacrontab(5) for details.

SHELL=/bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

# the maximal random delay added to the base delay of the jobs

RANDOM_DELAY=45

# the jobs will be started during the following hours only

START_HOURS_RANGE=3-22 #这里就是具体的拆分时间,能够根据各自的状况自由设定

 

#period in days   delay in minutes   job-identifier   command

1       5       cron.daily              nice run-parts /etc/cron.daily

7       25      cron.weekly             nice run-parts /etc/cron.weekly

@monthly 45     cron.monthly            nice run-parts /etc/cron.monthly

 

提示:

必定记得把crond设为开机启动(通常系统默认启动的)

检查是否开机启动

#chkconfig --list

相关原理

1.如何处罚日志工具执行的

Linux有本身的定时任务,命令是crontab,而此时咱们能够在crontab的每日定时任务中找到logrotate的配置文件

[root@tomcat ~]# ll /etc/cron.daily
total 24
-rwxr-xr-x. 1 root root  196 Jul 18  2013 logrotate

这里能够看到在linux本身的每日定时任务中,已经包含了logrotate日志文件

内容为:

[root@tomcat ~]# cat /etc/cron.daily/logrotate 
#!/bin/sh

/usr/sbin/logrotate /etc/logrotate.conf >/dev/null 2>&1
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0

其中很重要的一句是:/usr/sbin/logrotate /etc/logrotate.conf,表示经过日志工具指定日志配置文件,若是咱们修改了配置文件,最好在执行时带上一个 -f,促使他生效

所以触发logrotate日志工具执行实际上是依赖于linux的定时任务

相关文章
相关标签/搜索