Syslog-ng服務是Linux系統中重要的日志服務,搞過Linux下日志管理的大蝦門肯定都熟悉這項服務,在此就不再贅述。現在談一下對日志文件的管理問題。
Syslog-ng服務只提供對log進行接收以及再處理(繼續分發或者存儲),但並不對產生的log文件進行管理,這樣導致的後果就是可能這個文件越來越大,在我們這個項目中,由於忘了對日志文件進行管理,結果導致這個日志文件20多G,囧,很有可能導致系統崩潰。
日志文件管理這項工作其實是由logrotate模塊來負責。
對於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的文件,www.linuxidc.com其中的內容為:
上面代碼的意思為當文件/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分鐘執行檢查一次。
這樣整個配置就基本上完成了。