1. 程式人生 > 其它 >Logrotate日誌儲存

Logrotate日誌儲存

1、Logrotate日誌

logrotate 程式是一個日誌檔案管理工具。用來把舊的日誌檔案刪除,並建立新的日誌檔案,稱為日誌轉儲或滾動。可以根據日誌檔案的大小,也可以根據其天數來轉儲,這個過程一般通過 cron 程式來執行。

2、配置檔案介紹

1、Linux系統預設安裝logrotate工具,它預設的配置檔案在/etc/logrotate.conf

cat /etc/logrotate.conf
# 底下的設定是 "logrotate 的預設值" ,如果別的檔案設定了其他的值,
# 就會以其它檔案的設定為主
weekly          //預設每一週執行一次rotate輪轉工作
rotate 4       //保留多少個日誌檔案(輪轉幾次).預設保留四個.就是指定日誌檔案刪除之前輪轉的次數,0 指沒有備份
create         //自動建立新的日誌檔案,新的日誌檔案具有和原來的檔案相同的許可權;因為日誌被改名,因此要建立一個新的來繼續儲存之前的日誌
dateext       //這個引數很重要!就是切割後的日誌檔案以當前日期為格式結尾,如xxx.log-20131216這樣,如果註釋掉,切割出來是按數字遞增,即前面說的 xxx.log-1這種格式
compress      //是否通過gzip壓縮轉儲以後的日誌檔案,如xxx.log-20131216.gz ;如果不需要壓縮,註釋掉就行
 
include /etc/logrotate.d
# 將 /etc/logrotate.d/ 目錄中的所有檔案都載入進來
 
/var/log/wtmp {                 //僅針對 /var/log/wtmp 所設定的引數
monthly                    //每月一次切割,取代預設的一週
minsize 1M              //檔案大小超過 1M 後才會切割
create 0664 root utmp            //指定新建的日誌檔案許可權以及所屬使用者和組
rotate 1                    //只保留一個日誌.
}
# 這個 wtmp 可記錄使用者登入系統及系統重啟的時間
# 因為有 minsize 的引數,因此不見得每個月一定會執行一次喔.要看檔案大小。

#/etc/logrotate.d/
#logrotate.conf 才主要的配置檔案,logrotate.d 是一個目錄,該目錄裡的所有檔案都會被主動的讀入/etc/logrotate.conf中執行

2、Logrotate是基於CRON來執行的,其指令碼是/etc/cron.daily/logrotate,日誌輪轉是系統自動完成的。實際執行時,Logrotate會呼叫配置檔案/etc/logrotate.conf。可以在/etc/logrotate.d目錄裡放置自定義好的配置檔案,用來覆蓋Logrotate的預設值。

3、另外,如果 /etc/logrotate.d/ 裡面的檔案中沒有設定一些細節,則會以/etc/logrotate.conf這個檔案的設定來作為預設值。

3、主要引數

compress 通過gzip 壓縮轉儲以後的日誌
nocompress 不需要壓縮時,用這個引數
copytruncate 用於還在開啟中的日誌檔案,把當前日誌備份並截斷
nocopytruncate 備份日誌檔案但是不截斷
create mode owner group 轉儲檔案,使用指定的檔案模式建立新的日誌檔案
nocreate 不建立新的日誌檔案
delaycompress 和 compress 一起使用時,轉儲的日誌檔案到下一次轉儲時才壓縮
nodelaycompress 覆蓋 delaycompress 選項,轉儲並壓縮
errors address 專儲時的錯誤資訊傳送到指定的Email 地址
ifempty 即使是空檔案也轉儲,是預設選項。
notifempty 如果是空檔案的話,不轉儲
mail address 把轉儲的日誌檔案傳送到指定的E-mail 地址
nomail 轉儲時不傳送日誌檔案
olddir directory 轉儲後的日誌檔案放入指定的目錄,必須和當前日誌檔案在同一個檔案系統
noolddir 轉儲後的日誌檔案和當前日誌檔案放在同一個目錄下
prerotate/endscript 在轉儲以前需要執行的命令可以放入這個對,這兩個關鍵字必須單獨成行
postrotate/endscript 在轉儲以後需要執行的命令可以放入這個對,這兩個關鍵字必須單獨成行
daily 指定轉儲週期為每天
weekly 指定轉儲週期為每週
monthly 指定轉儲週期為每月
size 大小 指定日誌超過多大時,就執行日誌轉儲
rotate count 指定日誌檔案刪除之前轉儲的次數,0 指沒有備份,5 指保留5個備份
Missingok 如果日誌不存在,提示錯誤
Nomissingok如果日誌不存在,繼續下一次日誌,不提示錯誤

4、命令

logrotate [OPTION...] <configfile>
-d, --debug :debug模式,測試配置檔案是否有錯誤。
-f, --force :強制轉儲檔案。
-m, --mail=command :壓縮日誌後,傳送日誌到指定郵箱。
-s, --state=statefile :使用指定的狀態檔案。
-v, --verbose :顯示轉儲過程。

5、日誌切割的例項

1、定義tomcat的分割配置
[root@centos_10 logrotate.d]# cat tomcat 
/usr/local/tomcat/logs/* {
	delaycompress
	compress                                  
	daily                                 
	copytruncate                                 
	create                             
	ifempty                                  
	olddir /data/tomcat_log/days          
	rotate 0664 root root                
}
2、日誌分割指令碼
[root@centos_10 ]# vim /usr/local/sbin/logrotate-tomcat.sh
#!/bin/bash
#建立轉儲日誌壓縮存放目錄
mkdir -p /data/tomcat_logs/days
#手工對tomcat日誌進行切割轉換
/usr/sbin/logrotate -vf /etc/logrotate.d/tomcat
#當前時間
time=$(date -d "yesterday" +"%Y-%m-%d")
#進入轉儲日誌存放目錄
cd /data/tomcat_logs/days
#對目錄中的轉儲日誌檔案的檔名進行統一轉換
for i in $(ls ./ | grep "^\(.*\)\.[[:digit:]]$")do
mv ${i} ./$(echo ${i}|sed -n 's/^\(.*\)\.\([[:digit:]]\)$/\1/p')-$(echo $time)
done
#對轉儲的日誌檔案進行壓縮存放,並刪除原有轉儲的日誌檔案,只儲存壓縮後的日誌檔案。以節約儲存空間
for i in $(ls ./ | grep "^\(.*\)\-\([[:digit:]-]\+\)$")
do
tar jcvf ${i}.bz2 ./${i}
rm -rf ./${i}
done
#只保留最近7天的壓縮轉儲日誌檔案
find /data/tomcat_logs/days/* -name "*.bz2" -mtime 7 -type f -exec rm -rf {} \;
find /data/tomcat_logs/days/* -name "*.bz2" -mtime 7 -type f | xargs rm -rf 


3、crontab定時執行
crontab -e
#logrotate
0 0 * * * /bin/bash -x /usr/local/sbin/logrotate-tomcat.sh > /dev/null 2>


4、測試
[root@centos_10 ]# /bin/bash -x /usr/local/sbin/logrotate-tomcat.sh
[root@centos_10 ]# cd /data/tomcat_logs/days
[root@centos_10 days]# ls
huantest.access_log-2017-01-18.bz2

6、關於強制論詢

在/etc/cron.daily/logrotate指令碼中將 -t 引數替換成 -f 引數

#!/bin/sh

/usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -f logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0




重啟crond服務