轉自:http://feikiss.iteye.com/blog/1402181
https://linux.cn/article-4126-1.html
Syslog-ng服務是Linux系統中重要的日志服務,搞過Linux下日志管理的大蝦門肯定都熟悉這項服務,在此就不再贅述。現在談一下對日志文件的管理問題。
Syslog-ng服務只提供對log進行接收以及再處理(繼續分發或者存儲),但並不對產生的log文件進行管理,這樣導致的后果就是可能這個文件越來越大,在我們這個項目中,由於忘了對日志文件進行管理,結果導致這個日志文件20多G,囧,很有可能導致系統崩潰。
日志文件管理這項工作其實是由logrotate模塊來負責。
填充文件
# head -c 10M < /dev/urandom > /var/log/log-file
對於logrotate可以參考官網, 上面有詳盡的介紹,最常用的三個方式為:
- logrotate /etc/logrotate.conf:重新讀取配置文件,並對符合條件的文件文件進行rotate。
- logrotate -d /etc/logrotate.conf:調試模式,輸出調試結果,但並不執行。
- logrotate -f /etc/logrotate.conf:強制模式,對所有相關文件進行rotate。
至於logrotate對文件進行管理時的所要執行的規則,可以在/etc/logrotate.d文件夾下創建文件,logrotate會在執行的時候自動讀取相應的規則,比如,我在/etc/logrotate.d/路徑下新建了一個名為syslog的文件,其中的內容為:
/log/test.log { size 10M create start 10 rotate 4 compress copytruncate }
上面代碼的意思為當文件/log/test.log的大小超過10M時就開始循環,允許logrotate創建文件,循環文件的開始為10,即文件為為test.log.10.gz,最多循環創建4個文件,即為test.log.13.gz,多於四個后開始在第一個上面循環,依次迭代。
這樣在配置logrotate的規則的時候就相對非常靈活,當我需求改動,需要添加其他新的規則的時候,我就不必修改syslog文件中的規則,可以新創建一個文件,添加相應的規則即可。這種靈活的配置方式對編程來說是一大便利,對於編程來說就是更容易實現對規則的自動控制了。
另外的一個問題,logrotate規則配置好后怎么定時去執行呢?這個就可以交給Linux中的crontab來控制了,具體的crontab的配置可以參考官網,我這里給出我使用的demo:
執行:vi /etc/crontab
配置如下:
*/5 * * * * root /sbin/logrotate /etc/logrotate.conf
表示每隔5分鍾執行檢查一次。
這樣整個配置就基本上完成了。
- 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 進程將立即再次讀取其配置並繼續運行。