使用logrotate來管理日誌

日誌文件包含了關於系統中發生的事件的有用信息,在排障過程中或者系統性能分析時經常被用到。對於忙碌的服務器,日誌文件大小會增長極快,服務器會很快消耗磁盤空間,這成了個問題。除此之外,處理一個單個的龐大日誌文件也常常是件十分棘手的事。
logrotate是個十分有用的工具,它可以自動對日誌進行截斷(或輪循)、壓縮以及刪除舊的日誌文件。例如,你可以設置logrotate,讓/var/log/foo日誌文件每30天輪循,並刪除超過6個月的日誌。配置完後,logrotate的運作完全自動化,不必進行任何進一步的人爲干預。
logrotate基於Linux的contab,其配置爲/etc/cron.daily/logrotate
默認centos系統安裝自帶logrotate,如果沒安裝可以使用yum -y install logrotate crontabs安裝。
rpm -ql logrotate查看,logrotate的配置文件是/etc/logrotate.conf,通常不需要對它進行修改。
日誌文件的輪循設置在獨立的配置文件中,它(們)放在/etc/logrotate.d/目錄下。:

/etc/cron.daily/logrotate #定時任務配置
/etc/logrotate.conf  # 主配置文件
/etc/logrotate.d   # 配置目錄

我們從創建一個日誌文件,然後在其中填入一個10MB的隨機比特流數據文件。

touch /var/log/log-file
head -c 10M < /dev/urandom > /var/log/log-file 
vim /etc/logrotate.d/log-file
/var/log/log-file {
		monthly
		rotate 5
		compress
		delaycompress
		missingok
		notifempty
		create 644 root root
		postrotate
			/usr/bin/killall -HUP rsyslogd
		endscript
	}

logrotate可以在任何時候從命令行手動調用。
要調用爲/etc/lograte.d/下配置的所有日誌調用logrotate:logrotate /etc/logrotate.conf
要爲某個特定的配置調用logrotate,執行一次切割任務測試:logrotate -vf /etc/logrotate.d/log-file
即使輪循條件沒有滿足,我們也可以通過使用‘-f’選項來強制logrotate輪循日誌文件,‘-v’參數提供了詳細的輸出。
logrotate自身的日誌通常存放於/var/lib/logrotate/status目錄。如果處於排障目的,我們想要logrotate記錄到任何指定的文件,我們可以指定像下面這樣從命令行指定。
logrotate -vf -s /var/log/logrotate-status /etc/logrotate.d/log-file
-d 可以不實際切割日誌,而是預演。

生產案例:
爲nginx設置日誌切割

cat /etc/logrotate.d/nginx
/var/log/nginx/*.log {
    daily
    rotate 5
    missingok
    notifempty
    create 644 www www
    postrotate
      if [ -f /usr/local/nginx/logs/nginx.pid ]; then
          kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
      fi
	endscript
}

compress 通過gzip 壓縮轉儲以後的日誌
nocompress 不做gzip壓縮處理
copytruncate 用於還在打開中的日誌文件,把當前日誌備份並截斷;是先拷貝再清空的方式,拷貝和清空之間有一個時間差,可能會丟失部分日誌數據。
nocopytruncate 備份日誌文件不過不截斷
create mode owner group 輪轉時指定創建新文件的屬性,如create 0777 nobody nobody
nocreate 不建立新的日誌文件
delaycompress 和compress 一起使用時,轉儲的日誌文件到下一次轉儲時才壓縮
nodelaycompress 覆蓋 delaycompress 選項,轉儲同時壓縮。
missingok 如果日誌丟失,不報錯繼續滾動下一個日誌
errors address 專儲時的錯誤信息發送到指定的Email 地址
ifempty 即使日誌文件爲空文件也做輪轉,這個是logrotate的缺省選項。
notifempty 當日志文件爲空時,不進行輪轉
mail address 把轉儲的日誌文件發送到指定的E-mail 地址
nomail 轉儲時不發送日誌文件
olddir directory 轉儲後的日誌文件放入指定的目錄,必須和當前日誌文件在同一個文件系統
noolddir 轉儲後的日誌文件和當前日誌文件放在同一個目錄下
sharedscripts 運行postrotate腳本,作用是在所有日誌都輪轉後統一執行一次腳本。如果沒有配置這個,那麼每個日誌輪轉後都會執行一次腳本
prerotate 在logrotate轉儲之前需要執行的指令,例如修改文件的屬性等動作;必須獨立成行
postrotate 在logrotate轉儲之後需要執行的指令,例如重新啓動 (kill -HUP) 某個服務!必須獨立成行
daily 指定轉儲週期爲每天
weekly 指定轉儲週期爲每週
monthly 指定轉儲週期爲每月
rotate count 指定日誌文件刪除之前轉儲的次數,0 指沒有備份,5 指保留5 個備份
dateext 使用當期日期作爲命名格式
dateformat .%s 配合dateext使用,緊跟在下一行出現,定義文件切割後的文件名,必須配合dateext使用,只支持 %Y %m %d %s 這四個參數
size(或minsize) log-size 當日志文件到達指定的大小時才轉儲,log-size能指定bytes(缺省)及KB (sizek)或MB(sizem).
當日志文件 >= log-size 的時候就轉儲。 以下爲合法格式:(其他格式的單位大小寫沒有試過)
size = 5 或 size 5 (>= 5 個字節就轉儲)
size = 100k 或 size 100k
size = 100M 或 size 100M

參考:
https://www.cnblogs.com/clsn/p/8428257.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章