Logrotate日志輪巡missingok: 在日志輪循期間,任何錯誤將被忽略


Linux日志文件總管——logrotate

關鍵博客兩篇:

https://linux.cn/article-4126-1.html

http://blog.csdn.net/cjwid/article/details/1690101

 

######################################

簡單理解就是,在[root@web01 logrotate.d]# pwd
/etc/logrotate.d
下面定義了很多文件,文件里面指定了什么路徑下的日志,怎么做日志輪巡.
[root@web01 logrotate.d]# cat httpd 
/var/log/httpd/*log {
    missingok
    notifempty
    sharedscripts
    delaycompress
    postrotate
        /sbin/service httpd reload > /dev/null 2>/dev/null || true
    endscript
}

同時在cat /etc/logrotate.conf 下面定義了默認的配置參數




 

 

 prerotate/endscript 在轉儲以前需要執行的命令可以放入這個對,這兩個關鍵字必須單獨成行
postrotate/endscript 在轉儲以后需要執行的命令可以放入這個對,這兩個關鍵字必須單獨成行
notifempty: 如果日志文件為空,輪循不會進行。

create 644 root root: 以指定的權限創建全新的日志文件,同時logrotate也會重命名原始日志文件。

postrotate/endscript: 在所有其它指令完成后,postrotate和endscript里面指定的命令將被執行。在這種情況下,rsyslogd 進程將立即再次讀取其配置並繼續運行。

 

日志文件包含了關於系統中發生的事件的有用信息,在排障過程中或者系統性能分析時經常被用到。對於忙碌的服務器,日志文件大小會增長極快,服務器會很快消耗磁盤空間,這成了個問題。除此之外,處理一個單個的龐大日志文件也常常是件十分棘手的事。

 

logrotate是個十分有用的工具,它可以自動對日志進行截斷(或輪循)、壓縮以及刪除舊的日志文件。例如,你可以設置logrotate,讓/var/log/foo日志文件每30天輪循,並刪除超過6個月的日志。配置完后,logrotate的運作完全自動化,不必進行任何進一步的人為干預。另外,舊日志也可以通過電子郵件發送,不過該選項超出了本教程的討論范圍。

 

主流Linux發行版上都默認安裝有logrotate包,如果出於某種原因,logrotate沒有出現在里頭,你可以使用apt-get或yum命令來安裝。

在Debian或Ubuntu上:

  1. # apt-get install logrotate cron

在Fedora,CentOS或RHEL上:

  1. # yum install logrotate crontabs

logrotate的配置文件是/etc/logrotate.conf,通常不需要對它進行修改。日志文件的輪循設置在獨立的配置文件中,它(們)放在/etc/logrotate.d/目錄下。

樣例一

在第一個樣例中,我們將創建一個10MB的日志文件/var/log/log-file。我們將展示怎樣使用logrotate來管理該日志文件。

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

  1. # touch /var/log/log-file
  2. # head -c 10M < /dev/urandom > /var/log/log-file

由於現在日志文件已經准備好,我們將配置logrotate來輪循該日志文件。讓我們為該文件創建一個配置文件。

  1. # vim /etc/logrotate.d/log-file

  1. /var/log/log-file {
  2. monthly
  3. rotate 5
  4. compress
  5. delaycompress
  6. missingok
  7. notifempty
  8. create 644 root root
  9. postrotate
  10. /usr/bin/killall -HUP rsyslogd
  11. endscript
  12. }

這里:

  • monthly: 日志文件將按月輪循。其它可用值為‘daily’,‘weekly’或者‘yearly’。
  • rotate 5: 一次將存儲5個歸檔日志。對於第六個歸檔,時間最久的歸檔將被刪除。
  • compress: 在輪循任務完成后,已輪循的歸檔將使用gzip進行壓縮。
  • delaycompress: 總是與compress選項一起用,delaycompress選項指示logrotate不要將最近的歸檔壓縮,壓縮將在下一次輪循周期進行。這在你或任何軟件仍然需要讀取最新歸檔時很有用。
  • missingok: 在日志輪循期間,任何錯誤將被忽略,例如“文件無法找到”之類的錯誤。
  • notifempty: 如果日志文件為空,輪循不會進行。
  • create 644 root root: 以指定的權限創建全新的日志文件,同時logrotate也會重命名原始日志文件。
  • postrotate/endscript: 在所有其它指令完成后,postrotate和endscript里面指定的命令將被執行。在這種情況下,rsyslogd 進程將立即再次讀取其配置並繼續運行。

上面的模板是通用的,而配置參數則根據你的需求進行調整,不是所有的參數都是必要的。

樣例二

在本例中,我們只想要輪循一個日志文件,然而日志文件大小可以增長到50MB。

  1. # vim /etc/logrotate.d/log-file

  1. /var/log/log-file {
  2. size=50M
  3. rotate 5
  4. create 644 root root
  5. postrotate
  6. /usr/bin/killall -HUP rsyslogd
  7. endscript
  8. }

樣例三

我們想要讓舊日志文件以創建日期命名,這可以通過添加dateext常熟實現。

  1. # vim /etc/logrotate.d/log-file

  1. /var/log/log-file {
  2. monthly
  3. rotate 5
  4. dateext
  5. create 644 root root
  6. postrotate
  7. /usr/bin/killall -HUP rsyslogd
  8. endscript
  9. }

這將讓歸檔文件在它們的文件名中包含日期信息。

排障

這里提供了一些logrotate設置的排障提示。

1. 手動運行logrotate

logrotate可以在任何時候從命令行手動調用。

要調用為/etc/lograte.d/下配置的所有日志調用logrotate

  1. # logrotate /etc/logrotate.conf

要為某個特定的配置調用logrotate:

  1. # logrotate /etc/logrotate.d/log-file

2. 演練

排障過程中的最佳選擇是使用‘-d’選項以預演方式運行logrotate。要進行驗證,不用實際輪循任何日志文件,可以模擬演練日志輪循並顯示其輸出。

  1. # logrotate -d /etc/logrotate.d/log-file

 

正如我們從上面的輸出結果可以看到的,logrotate判斷該輪循是不必要的。如果文件的時間小於一天,這就會發生了。

3. 強制輪循

即使輪循條件沒有滿足,我們也可以通過使用‘-f’選項來強制logrotate輪循日志文件,‘-v’參數提供了詳細的輸出。

  1. # logrotate -vf /etc/logrotate.d/log-file

  1. reading config file /etc/logrotate.d/log-file
  2. reading config info for /var/log/log-file
  3.  
  4. Handling 1 logs
  5.  
  6. rotating pattern: /var/log/log-file forced from command line (5 rotations)
  7. empty log files are rotated, old logs are removed
  8. considering log /var/log/log-file
  9. log needs rotating
  10. rotating log /var/log/log-file, log->rotateCount is 5
  11. dateext suffix '-20140916'
  12. glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
  13. renaming /var/log/log-file.5.gz to /var/log/log-file.6.gz (rotatecount 5, logstart 1, i 5),
  14. old log /var/log/log-file.5.gz does not exist
  15. renaming /var/log/log-file.4.gz to /var/log/log-file.5.gz (rotatecount 5, logstart 1, i 4),
  16. old log /var/log/log-file.4.gz does not exist
  17. . . .
  18. renaming /var/log/log-file.0.gz to /var/log/log-file.1.gz (rotatecount 5, logstart 1, i 0),
  19. old log /var/log/log-file.0.gz does not exist
  20. log /var/log/log-file.6.gz doesn't exist -- won't try to dispose of it
  21. renaming /var/log/log-file to /var/log/log-file.1
  22. creating new /var/log/log-file mode = 0644 uid = 0 gid = 0
  23. running postrotate script
  24. compressing log with: /bin/gzip

4. Logrotate的記錄日志

logrotate自身的日志通常存放於/var/lib/logrotate/status目錄。如果處於排障目的,我們想要logrotate記錄到任何指定的文件,我們可以指定像下面這樣從命令行指定。

  1. # logrotate -vf s /var/log/logrotate-status /etc/logrotate.d/log-file

5. Logrotate定時任務

logrotate需要的cron任務應該在安裝時就自動創建了,我把cron文件的內容貼出來,以供大家參考。

  1. # cat /etc/cron.daily/logrotate

  1. #!/bin/sh
  2.  
  3. # Clean non existent log file entries from status file
  4. cd /var/lib/logrotate
  5. test -e status || touch status
  6. head -1 status > status.clean
  7. sed 's/"//g' status | while read logfile date
  8. do
  9. [ -e "$logfile" ] && echo "\"$logfile\" $date"
  10. done >> status.clean
  11. mv status.clean status
  12.  
  13. test -x /usr/sbin/logrotate || exit 0
  14. /usr/sbin/logrotate /etc/logrotate.conf

小結一下,logrotate工具對於防止因龐大的日志文件而耗盡存儲空間是十分有用的。配置完畢后,進程是全自動的,可以長時間在不需要人為干預下運行。本教程重點關注幾個使用logrotate的幾個基本樣例,你也可以定制它以滿足你的需求。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM