站長資訊網
最全最豐富的資訊網站

Linux日志切割工具Logrotate配置詳解

Logrotate 程序是一個日志文件管理工具。用于分割日志文件,壓縮轉存、刪除舊的日志文件,并創建新的日志文件,下面就對logrotate日志輪轉的記錄:

1.1 Logrotate配置文件介紹

Linux系統默認安裝logrotate,默認的配置文件:

/etc/logrotate.conf  /etc/logrotate.d/

logrotate.conf:為主配置文件
logrotate.d:為配置相關子系統,用于隔離每個應用配置(Nginx、PHP、Tomcat…)
 
Logrotate是基于CRON來運行的,其腳本是/etc/cron.daily/logrotate,日志輪轉是系統自動完成的。
實際運行時,Logrotate會調用配置文件/etc/logrotate.conf。
 
Logrotate可以由自動或者手動觸發日志輪轉:

logrotate -f /etc/logrotate.d/nginx  logrotate -f /etc/logrotate.d/php  不過正式執行前最好通過Debug選項來驗證一下(-d參數)

具體logrotate命令格式如下:

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

1.2 Logrotater日志文件切割策略

查看logrotate.conf配置:

cat /etc/logrotate.conf

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 的參數,因此不見得每個月一定會執行一次喔.要看文件大小。

 
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

1.3 NGINX日志的配置實例參考:

vim /etc/logrotate.d/nginx
/var/log/weblog/*.log {      daily  //指定轉儲周期為每天      compress  //通過gzip 壓縮轉儲以后的日志      rotate 7  //保存7天的日志      missingok  //如果日志文件丟失,不要顯示錯誤      notifempty  //當日志文件為空時,不進行輪轉      dateext  //使用當期日期作為命名格式,exp: nginx_access.log-20190120      sharedscripts  //運行postrotate腳本      postrotate  //執行的指令              if [ -f /run/nginx.pid ]; then                      kill -USR1 `cat /run/nginx.pid`              fi      endscript  //結束指令  }

 

1.4 PHP-FPM日志的配置實例參考:

vim /etc/logrotate.d/nginx
/usr/local/php/var/log/*.log {  daily  compress  rotate 7  missingok  notifempty  dateext  sharedscripts  postrotate      if [ -f /usr/local/php/var/run/php-fpm.pid ]; then          kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`      fi  endscript  }

 

1.5 Logrotater日志切割輪詢

由于Logrotate是基于CRON運行的,所以這個日志輪轉的時間是由CRON控制的,具體可以查詢CRON的配置文件/etc/anacrontab,過往的老版本的文件為(/etc/crontab)

查看輪轉文件:/etc/anacrontab

cat /etc/anacrontab      SHELL=/bin/sh      PATH=/sbin:/bin:/usr/sbin:/usr/bin      MAILTO=root      RANDOM_DELAY=45      START_HOURS_RANGE=3-22      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

使用anacrontab輪轉的配置文件,日志切割的生效時間是在凌晨3點到22點之間,而且隨機延遲時間是45分鐘,但是這樣配置無法滿足我們在現實中的應用
 
現在的需求是將切割時間調整到每天的晚上12點,即每天切割的日志是前一天的0-24點之間的內容,操作如下:

mv /etc/anacrontab /etc/anacrontab.bak          //取消日志自動輪轉的設置

使用crontab來作為日志輪轉的觸發容器來修改Logrotate默認執行時間

vi /etc/crontab   SHELL=/bin/bash  PATH=/sbin:/bin:/usr/sbin:/usr/bin  MAILTO=root  HOME=/    # run-parts  01 * * * * root run-parts /etc/cron.hourly  59 23 * * * root run-parts /etc/cron.daily  22 4 * * 0 root run-parts /etc/cron.weekly  42 4 1 * * root run-parts /etc/cron.monthly

1.6 解決logrotate無法自動輪詢日志的辦法

現象說明:
使用logrotate輪詢nginx日志,配置好之后,發現nginx日志連續兩天沒被切割,檢查后確定配置文件一切正常,這是為什么呢??

強行啟動記錄文件維護操作,縱使logrotate指令認為沒有需要,應該有可能是logroate認為nginx日志太小,不進行輪詢。
故需要強制輪詢,即在/etc/cron.daily/logrotate腳本中將 -t 參數替換成 -f 參數

vim /etc/cron.daily/logrotate 
#!/bin/sh  /usr/sbin/logrotate /etc/logrotate.conf  EXITVALUE=$?  if [ $EXITVALUE != 0 ]; then      /usr/bin/logger -f logrotate "ALERT exited abnormally with [$EXITVALUE]"  fi  exit 0

最后最后重啟下cron服務:

/etc/init.d/crond restart
Stopping crond: [ OK ]  Starting crond: [ OK ]
贊(0)
分享到: 更多 (0)
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
亚洲精品第一国产综合精品99| 国产精品美女自在线观看免费| 国产精品无套内射迪丽热巴| 亚洲精品国产va在线观看蜜芽| 日韩毛片一级好特黄| 国产精品第44页| 国产精品久久久久久久| 2021国产精品久久精品| 久久精品国产乱子伦| 99aiav国产精品视频| 日产精品久久久久久久| 久久精品成人无码观看56| 久久99精品国产| 亚洲一区二区三区在线观看精品中文| 国产乱子伦精品免费视频| 国产精品H片在线播放| 四虎影视永久在线精品免费| 日韩人妻无码一区二区三区99| 国产69久久精品成人看小说| 国产精品三级在线观看| 国产精品熟女视频一区二区 | 亚洲国产精品久久网午夜| 久久综合精品国产二区无码| 四虎影视永久在线观看精品| 久久九九精品国产综合喷水| 久久99精品久久久久久园产越南| 久久国产精品2020免费m3u8| 国产精品国产三级国产av品爱网| 精品在线免费观看| 国产精品人成在线播放新网站| 国产精品国产三级国产AV主播| 国产99视频精品免视看7| 久久无码专区国产精品s| 久久九九精品国产综合喷水| 久久久久亚洲精品天堂| 久久发布国产伦子伦精品| 中文字幕亚洲精品| 日产精品一二三四区国产| 一区国产传媒国产精品| 色综合99久久久无码国产精品| 国产精品99久久久久久人四虎|