如何解決日誌文件過大問題

 

咱們在運行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的定時任務

相關文章
相關標籤/搜索