Logrotate實現Catalina.out日誌按小時切割
一.Logrotate工具介紹
Logrotate是一個日誌檔案管理工具,它是Linux預設自帶的一個日誌切割工具。用來把舊檔案輪轉、壓縮、刪除,並且建立新的日誌檔案。我們可以根據日誌檔案的大小、天數等來轉儲,便於對日誌檔案管理,一般都是通過cron計劃任務來完成的,讓日誌切割實現按小時分割,按天分割等。
二.Logrotate執行機制
系統會定時執行logrotate,一般是每天一次。系統是這麼實現按天執行的。crontab會每天定時執行/etc/cron.daily目錄下的指令碼,而這個目錄下有個檔案叫logrotate。
[root@test01 ~]# cat /etc/cron.daily/logrotate
#!/bin/sh
/usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
實際執行時,Logrotate會呼叫配置檔案/etc/logrotate.conf
三.Logrotate的組成
/usr/sbin/logrotate #程式所在位置;
/etc/cron.daily/logrotate #預設讓Cron每天執行logrotate一次;
/etc/logrotate.conf #全域性配置檔案;
/etc/logrotate.d/ #應用自個的配置檔案存放目錄,覆蓋全域性配置;
注意:logrotate.d 是一個目錄,該目錄裡的所有檔案都會被主動的讀入/etc/logrotate.conf中執行。另外,如果/etc/logrotate.d/裡面的檔案中沒有設定一些細節,則會以/etc/logrotate.conf這個檔案的設定來作為預設值。
四.Logrotate的命令格式
logrotate [OPTION...] <configfile>
-d, --debug :debug模式,測試配置檔案是否有錯誤。
-f, --force :強制轉儲檔案。
-m, --mail=command :壓縮日誌後,傳送日誌到指定郵箱。
-s, --state=statefile :使用指定的狀態檔案。
-v, --verbose :顯示轉儲過程。
例如:想強行切割日誌檔案,不等logrotate切割。
[root@test01 ~]# /usr/sbin/logrotate -vf /etc/logrotate.d/tomcat #我是用來測試用的嘿嘿
注意:CentOS7 命令是在/usr/sbin/裡。
五.常用配置引數說明
Logrotate功能的實現,最重要的就是它的配置引數
下面介紹下它常用的配置引數:
compress |
啟用壓縮,指的是輪替後的舊日誌,這裡預設用的是gzip壓縮的 |
daily |
每天輪替 |
dateext |
使用當期日期作為命名格式 |
dateformat .%s |
配合dateext使用,緊跟在下一行出現,定義檔案切割後的檔名,必須配合dateext使用,只支援 %Y %m %d %s 這四個引數 |
ifempty |
即使日誌檔案是空的也輪替 |
|
將輪替後的檔案傳送到指定E-mail地址 |
copytruncate |
用於還在開啟中的日誌檔案,把當前日誌備份並截斷,是先拷貝再清空的方式,拷貝和清空之間有一個時間差,可能會丟失部分日誌資料。 |
monthly |
一個月輪替一次 |
nocompress |
如果在logrotate.conf中啟用了壓縮,這裡是做不用壓縮的引數 |
nomail |
不傳送郵件到任何地址 |
notifempty |
如果日誌是空的就不輪替(也就是空日誌不切割) |
olddir + 目錄 |
輪替後日志文件放入指定的目錄,必須和當前日誌檔案在同一個檔案系統 |
rotate +次數 |
輪替最多保留之前的資料幾次,超出的將被刪除或郵件接收,設為0則不儲存 |
size size |
當日志增長到指定大小的時候開始輪替 |
weekly |
如果當前的星期幾比上次輪替的星期幾少,或者過了一個多星期,就會發生輪替通常是在每週的第一天輪替,如果logrotate不是每天執行的,會在第一次有機會時進行輪替 |
yearly |
如果當前年份不同於上次輪替的年份,則進行日誌輪替 |
Missingok |
如果日誌丟失,不報錯繼續滾動下一個日誌 |
六.安裝配置Logrotate
#yum安裝下
[root@test01 ~]# yum -y install logrotate
#機器已經裝好tomcat,下面配置切割tomcat日誌的配置檔案
[root@test01 ~]# vim /etc/logrotate.d/tomcat
注意:logrotate的配置檔案是/etc/logrotate.conf,通常不需要對它進行修改。
日誌檔案的切割輪循設定在獨立的配置檔案中,它們是放在/etc/logrotate.d/目錄下的。
[root@test01 ~]# mkdir -p /var/log/tomcat/oldlog
[root@test01 ~]# cat /etc/logrotate.d/tomcat
/usr/local/tomcat8/logs/catalina.out { #要切割的日誌路徑,如果是多個就用空格分隔
notifempty #如果日誌是空的就不輪替(也就是空日誌不切割)
rotate 5000 #輪替最多保留之前的資料5000次
missingok #如果日誌丟失,不報錯繼續滾動下一個日誌
compress #啟用壓縮,指的是輪替後的舊日誌,這裡預設用的是gzip壓縮的
dateext #使用當期日期作為命名格式
dateformat .%Y%m%d-%H點 #配合dateext使用,緊跟在下一行出現,定義檔案切割後的檔名,必須配合dateext使用,只支援 %Y %m %d %s
olddir /var/log/tomcat/oldlog #輪替後日志文件放入指定的目錄
}
注意:我這個配置裡沒有設定多久切割一次,但是它也是一天切割一次,因為當/etc/logrotate.d/tomcat這個檔案沒有配置時,預設是每天定時執行/etc/cron.daily/logrotate這個檔案,這個檔案是一天一次的。
#強制執行切割,檢視/var/log/tomcat/oldlog下是否有日誌
[root@test01 ~]# /usr/sbin/logrotate -vf /etc/logrotate.d/tomcat
reading config file /etc/logrotate.d/tomcat
olddir is now /var/log/tomcat/oldlog
Allocating hash table for state file, size 15360 B
Handling 1 logs
rotating pattern: /usr/local/tomcat8/logs/catalina.out forced from command line (5000 rotations)
olddir is /var/log/tomcat/oldlog, empty log files are not rotated, old logs are removed
considering log /usr/local/tomcat8/logs/catalina.out
log needs rotating
rotating log /usr/local/tomcat8/logs/catalina.out, log->rotateCount is 5000
Converted ' .%Y%m%d-%H點' -> '.%Y%m%d-%H點'
dateext suffix '.20181226-15點'
glob pattern '.[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]-[0-9][0-9]點'
glob finding old rotated logs failed
fscreate context set to unconfined_u:object_r:usr_t:s0
renaming /usr/local/tomcat8/logs/catalina.out to /var/log/tomcat/oldlog/catalina.out.20181226-15點
compressing log with: /bin/gzip
set default create context to unconfined_u:object_r:usr_t:s0
set default create context
#檢視切割結果
#把之前切割的刪除了,因為再定時切割檔案是相同的,還是catalina.out.20181226-15點.gz這個檔案,所以不會切割成功。
[root@test01 ~]# rm -rf /var/log/tomcat/oldlog/catalina.out.20181226-15點.gz
[root@test01 ~]# ls /var/log/tomcat/oldlog/
[root@test01 ~]#
#設定定時任務,每一分鐘切割一次(注意:日誌裡要有內容,因為前面定義空的日誌檔案是不切割的)
[root@test01 ~]# crontab –e
*/1 * * * * /usr/sbin/logrotate -vf /etc/logrotate.d/tomcat >>/var/log/tomcat/oldlog/cutting.log
#每倆小時切割一次
[root@test02 ~]# crontab -l
0 */2 * * * /usr/sbin/logrotate -vf /etc/logrotate.d/tomcat >> /root/chenjiaxin/cutting.log
#檢視定時切割的結果
當然,上面設定一分鐘切割一次,是為了實驗能儘快看到效果。實際是需要根據公司需要來設定多久來切割一次日誌的!
Linux公社的RSS地址 : https://www.linuxidc.com/rssFeed.aspx
本文永久更新連結地址: https://www.linuxidc.com/Linux/2019-02/156972.htm