Logging
Mongodb - 旋轉日誌的正確方法
Mongo文件說我可以:
- 使用 -SIGUSR1 信號並重命名舊日誌並切換目前日誌
- 從作業系統使用 logrotate
我希望作業系統的 logrotate 能夠壓縮舊文件並刪除最舊的文件,但是除了發送 SIGUSR1 之外,沒有辦法告訴 mongod 程序切換目前日誌。
所以我寫了
/var/log/mongodb/*.log { daily rotate 5 compress dateext missingok notifempty sharedscripts postrotate /usr/bin/killall -SIGUSR1 mongod /usr/bin/killall -SIGUSR1 mongos endscript }
到 /etc/logrotate.d/mongo。
現在從 logrotate 和空日誌文件中獲取命名良好的日誌文件,例如
mongodb.log.2013-09-18T23-49-44
SIGUSR1 切換的痕跡。如何擺脫後者?
copytruncate 非常適合對數旋轉。
與此類似的配置應該為您完成這項工作:
/var/log/mongodb/*.log { daily missingok rotate 5 compress dateext delaycompress copytruncate notifempty }
從 mongodb 3.0 開始,您可以使用 logRotate 參數更改 mongodb 的行為,更改 /etc/mongod.conf
systemLog: logAppend: true logRotate: reopen
另請參閱Mongo 手冊。
然後你可以使用這個 logrotate 配置:
/var/log/mongodb/*.log { daily rotate 30 size 50M compress dateext missingok notifempty sharedscripts postrotate /bin/kill -SIGUSR1 `cat /var/lib/mongodb/mongod.lock 2> /dev/null` 2> /dev/null || true endscript }