1. 程式人生 > >linux日誌切割工具 logrotate

linux日誌切割工具 logrotate

centos-7.6系統預設安裝logrotate,預設的配置檔案:

/etc/logrotate.conf
/etc/logrotate.d/
logrotate.conf:為主配置檔案
logrotate.d:為配置相關子系統,用於隔離每個應用配置(Nginx、PHP、Tomcat...)
用於解決個別日誌檔案過大,不易清理及檢視
以haproxy 為例

cat /etc/logrotate.d/haproxy 
/var/log/haproxy/haproxy.log {  
#檔案絕對路徑,nginx日誌亦同上
   daily
#指定轉儲週期為每天
   rotate 20
#保留20天的日誌
   missingok
#如果日誌檔案丟失,不進行顯示錯誤
   notifempty
#當日志文件為空時,不進行轉儲
   dateext
#加上日誌格式
   compress
#通過gzip壓縮轉儲後的日誌
   sharedscripts
#轉儲完成後執行指令碼,postrotate-endscript間為指令碼內容,指令碼效果為重啟rsyslogd服務。
   postrotate
       systemctl restart  rsyslog.service
   endscript
}

測試配置檔案
logrotate -d /etc/logrotate.d/haproxy
該服務由anacron呼叫
anacron預設配置如下
修改該服務的呼叫時間

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
#預設為3點到22點隨機延遲45分鐘執行,修改為3點到5點
START_HOURS_RANGE=3-5

#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

效果如下

-rw-------  1 root   root     3030916 Jul  1 03:48 haproxy.log-20190701.gz
-rw-------  1 root   root     3870655 Jul  2 03:24 haproxy.log-20190702.gz
-rw-------  1 root   root     4569410 Jul  3 03:39 haproxy.log-20190703.gz
-rw-------  1 root   root     3715970 Jul  4 03:33 haproxy.log-20190704.gz

Logrotate中其他可配置引數,具體如下:

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.linuxidc.com/Linux/2