Nginx日誌切割之Logrotate篇

  不論是什麼日誌文件,都是會愈來愈大的,大到必定程度就是個可怕的事情了,因此要及早的作處理,方法之一就是按時間段來存儲,不過linux系統提供了Logrotate的日誌管理工具,很好用,不用寫計劃任務腳本了,不過弊端是轉儲後的日誌文件放入指定的目錄,必須和當前日誌文件再同一個系統,下面是摘錄別人的。記錄下以備不時之需。node

 

      Logrotate是Linux下一款日誌管理工具,可用於日誌文件的轉儲(即刪除舊日誌文件,建立新日誌文件)。能夠根據日誌大小或者按照某時段間隔來轉儲,內部使用cron程序來執行。Logrotate還能夠在壓縮日誌,併發送到指定E-mail。linux

      Logrotate默認配置文件是/etc/logrotate.conf,其中第一行是:nginx

include /etc/logrotate.d

 

說明包含了該目錄下的配置,普通用戶的配置也在這裏,好比nginx日誌切割 /etc/logrotate.d/nginx。Logrotate有許多可配置參數,也可以使用man命令來查詢:apache

compress 經過gzip壓縮轉儲之後的日誌 nocompress 不壓縮 copytruncate 用於還在打開中的日誌文件,把當前日誌備份並截斷 nocopytruncate 備份日誌文件可是不截斷 create mode owner group 轉儲文件,使用指定的文件模式建立新的日誌文件 nocreate 不創建新的日誌文件 delaycompress 和 compress 一塊兒使用時,轉儲的日誌文件到下一次轉儲時才壓縮 nodelaycompress 覆蓋 delaycompress 選項,轉儲同時壓縮。 errors address 專儲時的錯誤信息發送到指定的Email 地址 ifempty 即便是空文件也轉儲,這個是 logrotate 的缺省選項。 notifempty 若是是空文件的話,不轉儲 mail address 把轉儲的日誌文件發送到指定的E-mail 地址 nomail 轉儲時不發送日誌文件 olddir directory 轉儲後的日誌文件放入指定的目錄,必須和當前日誌文件在同一個文件系統 noolddir 轉儲後的日誌文件和當前日誌文件放在同一個目錄下 prerotate/endscript 在轉儲之前須要執行的命令能夠放入這個對,這兩個關鍵字必須單獨成行 postrotate/endscript 在轉儲之後須要執行的命令能夠放入這個對,這兩個關鍵字必須單獨成行 daily 指定轉儲週期爲天天 weekly 指定轉儲週期爲每週 monthly 指定轉儲週期爲每個月 rotate count 指定日誌文件刪除以前轉儲的次數,0 指沒有備份,5 指保留5 個備份 tabootext [+] list 讓logrotate   不轉儲指定擴展名的文件,缺省的擴展名是:.rpm-orig, .rpmsave, v, 和 ~ size size 當日志文件到達指定的大小時才轉儲,bytes(缺省)及KB(sizek)或MB(sizem)
 

先看看centOS安裝後的logrotate.conf部份內容:併發

/var/log/wtmp {             //用戶登陸和持續時間日誌
    monthly                 //按周切割
    minsize 1M              //最小達到1M
    create 0664 root utmp   //切割後日志文件屬性
    rotate 1                //保留副本
}

 

簡單明瞭。如您所料,include能夠批量指定配置文件,典型應用都包含在/etc/logrotate.d/目錄下,有:apache、linuxconf、syslog等。注意:include引入配置會覆蓋同名默認配置工具

若干要點:
  1. 每一個部分首括號可與其餘語句同行,尾行括號必須單獨成行
  2. prerotate和postrotate可指定轉儲先後(即切割先後)執行的linux腳本(endscript結束),如post

    /var/log/messages { prerotate //轉儲以前腳本
        /usr/bin/chattr -a /var/log/messages    //去掉該文件-a屬性
        endscript                               //腳本結束
        postrotate                              //轉儲後腳本
        /usr/bin/kill -HUP syslogd              //從新初始化系統日誌守護程序 syslogd
        /usr/bin/chattr +a /var/log/messages    //添加-a屬性,防止文件被覆蓋
     endscript }

     

  3. Logrotate的備份策略(以兩個備份來講明,即rotate 2,文件error.log):原始文件error.log,通過一次轉儲,會生成error.log.1;第二次轉儲,生成error.log.2;第三次轉儲,error.log.n命名爲error.log.n+1,同時生成新的error.log.1,刪除error.log.n+1文件。測試

  4. 轉儲能夠經過強制執行來觀察工做過程spa

    logrotate -vf /etc/logrotate.d/nginx
     
  5. 日誌切割的執行時間是由cron程配置決定的,可查看/etc/crontab文件(cron時間戳格式:分時日月周), 個人測試:針對10.47.*.*上的nginx日誌進行按日切割,配置以下(/etc/logrotate.d/nginx文件):
  6. /var/log/nginx/*.log { //注意:具體請以本身的nginx日誌爲準 daily //天天切割 dateext //%Y%m%d做爲後綴 missingok //日誌不存在,分析下一個 rotate 2 //保留兩個備份 compress //轉儲以後壓縮.tar.gz notifempty //空文件不轉儲 create 640 nginx adm //新日誌文件模式 sharedscripts //整個日誌組運行一次的腳本 postrotate [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid` //重啓nginx,從新加載日誌文件,防止不寫 `cp -f /var/log/nginx/*.* /var/log/nginx/backup` //自定義腳本,將舊日誌copy到backup文件夾(backup要存在) endscript }

     

  7.  默認logrotate是經過crontab按期執行的,咱們也能夠手動執行查看結果:日誌

    # logrotate -vf /data/log/nginx/access.log

    驗證是否執行,查看cron的日誌便可

    # grep logrotate /var/log/cron
  8. 使用logrotate管理nginx的日誌,優勢在於:

    1、不須要擔憂日誌文件會將目錄塞滿,logrotate會保留特定個數文件; 2、天天的日誌放在一個文件中,不須要一直往前翻,方便查閱;
相關文章
相關標籤/搜索