1. 程式人生 > >使用logrotate管理日誌

使用logrotate管理日誌

acc 自動 無法找到 end 文件包含 -h 說明 包含 腳本

日誌文件包含了關於系統中發生的事件的有用信息,在排障過程中或者系統性能分析時經常被用到。對於忙碌的服務器,日誌文件大小會增長極快,服務器會很快消耗磁盤空間,這成了個問題。除此之外,處理一個單個的龐大日誌文件也常常是件十分棘手的事。很多運維同學的服務器上都運行著一些諸如每天切分Nginx日誌之類的CRON腳本,大家似乎遺忘了Logrotate。

logrotate是個十分有用的工具,它可以自動對日誌進行截斷(或輪循)、壓縮以及刪除舊的日誌文件。例如,你可以設置logrotate,讓/var/log/foo日誌文件每30天輪循,並刪除超過6個月的日誌。配置完後,logrotate的運作完全自動化,不必進行任何進一步的人為幹預。

配置文件介紹
Linux系統默認安裝logrotate工具,它默認的配置文件在:
/etc/logrotate.conf
/etc/logrotate.d/

logrotate.conf 才主要的配置文件,logrotate.d 是一個目錄,該目錄裏的所有文件都會被主動的讀入/etc/logrotate.conf中執行。
另外,如果 /etc/logrotate.d/ 裏面的文件中沒有設定一些細節,則會以/etc/logrotate.conf這個文件的設定來作為默認值。

Logrotate是基於CRON來運行的,其腳本是/etc/cron.daily/logrotate,日誌輪轉是系統自動完成的。

案例1:

需求:把放在/var/log/nginx下的nginx日誌進行管理

1、access.log只記錄當天的日誌
2、之前的日誌以access.log-時間命名,並且昨天以往的日誌進行壓縮,一共保留10天的日誌

在/etc/logrotate.d/新建nginx文件,加入以下內容:

    /var/log/nginx/*.log {
        daily
        rotate 10
        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 進程將立即再次讀取其配置並繼續運行。

使用logrotate管理日誌