モンゴ docs 私ができると言う:
古いファイルをZipして最も古いものを削除するOSのlogrotate機能が欲しいのですが、mongodプロセスにSIGUSR1を送信する以外に現在のログを切り替えるように指示する方法がありません。
だから私は書いた
/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に。
そして、SIGUSR1切り替えのトレースとして、mongodb.log.2013-09-18T23-49-44
のようなlogrotateおよび空のログファイルから適切な名前のログファイルを取得します。後者を取り除く方法は?
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 Manuals も参照してください。
次に、この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
}
Logrotateを使用してログファイルを移動した後、mongodにSIGUSR1を送信すると、サーバーがクラッシュしました。
次の構成は、私がテストしたバージョン-ubuntu 12.04の2.6.6-で安全です。前の例ではサーバーがクラッシュしました。これを/etc/logrotate.d/mongodに入れてください:
/var/log/mongodb/mongodb.log {
weekly
missingok
rotate 4
compress
notifempty
create
postrotate
/usr/bin/pkill -USR1 mongod
rm /var/log/mongodb/mongodb.log.????-??-??T??-??-??
endscript
}
詳細:上記で使用したAkshay Kumarからの詳細と提案については、 https://jira.mongodb.org/browse/SERVER-11087 を参照してください(nocreateとcp/dev /の代わりにcreateを使用してください)ログファイルにはnull)。
それ以降のリリースでは、ファイルを再度開くために使用できるlogRotateオプションがあるはずです-名前を変更するのではなく-名前の変更の問題を回避しますが、私のバージョンでは機能しませんでした(サポートされていませんでした)。
参照: https://github.com/mongodb/mongo/commit/616461d294bd9f5054ca38b302b6fc5d70fde20c
私はこれをテストしました
logrotate -v -f /etc/logrotate.d/mongod
以下は私のために働きました:
/var/log/mongo/mongod.log {
missingok
rotate 3
size 100M
nodateext
postrotate
/usr/bin/kill -USR1 $(cat /var/run/mongod.pid)
rm -f /var/log/mongo/mongod.log.[0-9][0-9][0-9][0-9]-*
endscript
}
ノート:
kill
はBashビルトインですが、logrotateは/bin/sh
で実行されます-RedHat 6.5ではSIGUSR1
を認識しませんcompress
でテストしていませんが、簡単な追加である必要があります