歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux技術 >> Linux日志文件總管――logrotate

Linux日志文件總管――logrotate

日期:2017/3/3 11:56:47   编辑:Linux技術
日志文件包含了關於系統中發生的事件的有用信息,在排障過程中或者系統性能分析時經常被用到。對於忙碌的服務器,日志文件大小會增長極快,服務器會很快消耗磁盤空間,這成了個問題。除此之外,處理一個單個的龐大日志文件也常常是件十分棘手的事。
logrotate是個十分有用的工具,它可以自動對日志進行截斷(或輪循)、壓縮以及刪除舊的日志文件。例如,你可以設置logrotate,讓/var/log/foo日志文件每30天輪循,並刪除超過6個月的日志。配置完後,logrotate的運作完全自動化,不必進行任何進一步的人為干預。另外,舊日志也可以通過電子郵件發送。
主流Linux發行版上都默認安裝有logrotate包,如果出於某種原因,logrotate沒有出現在裡頭,你可以使用apt-get或yum命令來安裝。在Debian或Ubuntu上:
# apt-get install logrotate cron
在Fedora,CentOS或RHEL上:
# yum install logrotate crontabs
logrotate的配置文件是/etc/logrotate.conf,通常不需要對它進行修改。日志文件的輪循設置在獨立的配置文件中,它(們)放在/etc/logrotate.d/目錄下。

樣例一

在第一個樣例中,我們將創建一個10MB的日志文件/var/log/log-file。我們將展示怎樣使用logrotate來管理該日志文件。我們從創建一個日志文件開始吧,然後在其中填入一個10MB的隨機比特流數據。
# touch /var/log/log-file# head -c 10M < /dev/urandom > /var/log/log-file
由於現在日志文件已經准備好,我們將配置logrotate來輪循該日志文件。讓我們為該文件創建一個配置文件。
# 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
 }
這裡: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。
# vim /etc/logrotate.d/log-file
/var/log/log-file {    
    size=50M    
    rotate 5   
    create 644 root root    
    postrotate        
       /usr/bin/killall -HUP rsyslogd    
    endscript
 }

樣例三

我們想要讓舊日志文件以創建日期命名,這可以通過添加dateext參數實現。
# vim /etc/logrotate.d/log-file
/var/log/log-file {   
    monthly    
    rotate 5    
    dateext    
    create 644 root root    
    postrotate        
       /usr/bin/killall -HUP rsyslogd    
    endscript
 }
這將讓歸檔文件在它們的文件名中包含日期信息。

1. 手動運行logrotate

logrotate可以在任何時候從命令行手動調用。為/etc/lograte.d/下配置的所有日志調用logrotate
# logrotate /etc/logrotate.conf
要為某個特定的配置調用logrotate:
# logrotate /etc/logrotate.d/log-file

2. 演練

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

3. 強制輪循

即使輪循條件沒有滿足,我們也可以通過使用‘-f’選項來強制logrotate輪循日志文件,‘-v’參數提供了詳細的輸出。
# logrotate -vf /etc/logrotate.d/log-file
小結,logrotate工具對於防止因龐大的日志文件而耗盡存儲空間是十分有用的。配置完畢後,進程是全自動的,可以長時間在不需要人為干預下運行。
轉載自:https://linux.cn/article-4126-1.html
Copyright © Linux教程網 All Rights Reserved