日志切割工具logrotate解決Tomcat catalina.out日志過大的問題


一、介紹日志切割logrotate

  對於Linux系統安全來說,日志文件是極其重要的工具。不知為何,我發現很多運維同學的服務器上都運行着一些諸如每天切分Nginx日志之類的CRON腳本,大家似乎遺忘了Logrotate,爭相發明自己的輪子,這真是讓人沮喪啊!就好比明明身邊躺着現成的性感美女,大家卻忙着自娛自樂,罪過!

  logrotate程序是一個日志文件管理工具。用於分割日志文件,刪除舊的日志文件,並創建新的日志文件,起到"轉儲"作用。可以節省磁盤空間例如,你可以設置logrotate,讓/var/log/logfile日志文件每30天輪循,並刪除超過6個月的日志。配置完后,logrotate的運作完全自動化,不必進行任何進一步的人為干預。

 

二、logrotate配置使用

1、安裝logrotate

(1)系統版本,我使用的如下

[root@along ~]# cat /etc/redhat-release 
CentOS Linux release 7.3.1611 (Core) 
[root@along ~]# uname -r
3.10.0-514.26.2.el7.x86_6  

(2)默認centos系統安裝自帶logrotate,直接使用yum 安裝

[root@along ~]# yum -y install logrotate  

 

(3)軟件包說明

[root@along ~]# rpm -ql logrotate
/etc/cron.daily/logrotate /etc/logrotate.conf #logrotate 自身的配置文件 /etc/logrotate.d #配置切割設置的目錄

 注:logrotate的配置文件是/etc/logrotate.conf,通常不需要對它進行修改。

日志文件的輪循設置在獨立的配置文件中,它(們)放在/etc/logrotate.d/目錄下。

 

2、配置使用logrotate

(1)准備測試日志

創建測試日志/log-file,然后在其中填入一個10MB的隨機比特流數據文件

[root@along ~]# touch /var/log/log-file

[root@along ~]# head -c 10M < /dev/urandom > /var/log/log-file

 

(2)配置切割設置

[root@along ~]# vim /etc/logrotate.d/log-file

[root@along ~]# vim /etc/logrotate.d/log-file
/var/log/test/log-file {
        daily
        rotate 15
        compress
        delaycompress
        missingok
        notifempty
        dateext
        sharedscripts
        create 644 root root
        postrotate
                /usr/bin/killall -HUP rsyslogd
        endscript
}  

 

(3)配置文件參數說明

配置參數

說明

monthly

日志文件將按月輪循。其它可用值為'daily','weekly'或者'yearly'。

rotate 5

一次將存儲5個歸檔日志。對於第六個歸檔,時間最久的歸檔將被刪除。

compress

在輪循任務完成后,已輪循的歸檔將使用gzip進行壓縮。

delaycompress

總是與compress選項一起用,delaycompress選項指示logrotate不要將最近的歸檔壓縮,壓縮將在下一次輪循周期進行。這在你或任何軟件仍然需要讀取最新歸檔時很有用。

missingok

在日志輪循期間,任何錯誤將被忽略,例如“文件無法找到”之類的錯誤。

notifempty

如果日志文件為空,輪循不會進行。

dateext

切換后的日志文件會附加上一個短橫線和YYYYMMDD格式的日期,沒有這個配置項會附加一個小數點加一個數字序號

sharedscripts

在所有其它指令完成后,postrotate和endscript里面指定的命令將被執行。在這種情況下,rsyslogd 進程將立即再次讀取其配置並繼續運行。

create 644 root root

以指定的權限創建全新的日志文件,同時logrotate也會重命名原始日志文件。

postrotate/endscript

在所有其它指令完成后,postrotate和endscript里面指定的命令將被執行。在這種情況下,rsyslogd 進程將立即再次讀取其配置並繼續運行。

以上信息來源 "man logrotate"

 

(4)運行logrotate

logrotate可以在任何時候從命令行手動調用

① 要調用為/etc/lograte.d/下配置的所有日志切割配置

[root@along ~]# logrotate /etc/logrotate.conf  

② 要為某個特定的配置調用logrotate,執行一次切割任務測試

[root@along ~]# ll /var/log/log-file*
-rw-r--r-- 1 root root 10485760 Jun 19 11:33 /var/log/test/log-file
[root@along ~]# logrotate -vf /etc/logrotate.d/log-file 
[root@along ~]# ll /var/log/log-file* 
-rw-r--r-- 1 root root        0 Jun 19 11:33 /var/log/test/log-file
-rw-r--r-- 1 root root 10485760 Jun 19 11:22 /var/log/test/log-file-20180619

 ③ 選項注釋

  -f:選項來強制logrotate輪循日志文件

  -v:參數提供了詳細的輸出

 

(5)設置logrotate定時任務

[root@along ~]# crontab -e
#auth root
#date 2018-06-19
00 00 * * * /usr/sbin/logrotate -vf /etc/logrotate.d/log-file &>/dev/null

   

三、使用logrotate處理tomcat catalina.out日志過大問題

問題描述:一般在部署Tomcat后,運行久了,catalina.out文件會越來越大,對系統的穩定造成了一定的影響。

1、定義tomcat的pid 文件

(1)修改catalina.sh 文件,定義Tomcat的pid文件的路徑

[root@along ~]# vim /data/tomca/bin/catalina.sh
# Get standard environment variables
PRGDIR=`dirname "$PRG"`
CATALINA_PID=/var/run/tomcat.pid

   

(2)重啟Tomcat,且查詢pid

[root@along ~]# systemctl restart tomcat.service

[root@along ~]# cat /var/run/tomcat.pid

21924

 

2、配置切割設置

(1)配置切割

[root@along ~]# vim /etc/logrotate.d/tomcat_catalina
/data/tomcat/logs/catalina.out {
        daily
        rotate 15
        missingok
        notifempty
        dateext
        compress
        delaycompress
        sharedscripts
        create 644 root root
        postrotate
                if [ -f /var/run/tomcat.pid ]; then
                        kill -USR1 `cat /var/run/tomcat.pid`
                fi
        endscript
}

 

(2)USR1信號解釋

  USR1亦通常被用來告知應用程序重載配置文件;例如,向Apache HTTP服務器發送一個USR1信號將導致以下步驟的發生:停止接受新的連接,等待當前連接停止,重新載入配置文件,重新打開日志文件,重啟服務器,從而實現相對平滑的不關機的更改。

  在沒有執行kill -USR1 `cat ${pid_path}`之前,即便已經對文件執行了mv命令而改變了文件名稱,tomcat還是會向新命名的文件" xxx.out_ 20180619"照常寫入日志數據的。原因在於:linux系統中,內核是根據文件描述符來找文件的。

 

3、測試執行

[root@along ~]# logrotate -vf /etc/logrotate.d/tomcat_catalina

 

4、設置logrotate定時任務

[root@along ~]# crontab -e
#auth root
#date 2018-06-19
00 00 * * * /usr/sbin/logrotate -vf /etc/logrotate.d/tomcat_catalina &>/dev/null

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM