Logging

Mongodb - 旋轉日誌的正確方法

  • December 12, 2018

Mongo文件說我可以:

  1. 使用 -SIGUSR1 信號並重命名舊日誌並切換目前日誌
  2. 從作業系統使用 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-44SIGUSR1 切換的痕跡。如何擺脫後者?

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
}

引用自:https://serverfault.com/questions/540423