LoginSignup
2
2

More than 3 years have passed since last update.

MongoDBのログローテート設定

Last updated at Posted at 2020-10-27

MongoDBのログローテーションをしたくて調べて設定してみました。(バージョンは3.4)

やりたいこと

ログは1日1回ローテーションしたい。
ローテーション後のログファイルは mongod.log_yyyymmdd という名前をつけたい。
自動圧縮したい。
溜め続けるのではなく一定期間が経過したら自動削除したい。

やったこと

logrotateで以下のように設定

# vi /etc/logrotate.d/mongod

/usr/local/var/log/mongodb/mongod.log
{
    missingok
    daily
    dateext
    rotate 30
    create
    compress
    delaycompress
    postrotate
      /bin/kill -SIGUSR1 `cat /var/run/mongodb/mongod.pid 2> /dev/null` 2> /dev/null || true
      find /data/mongodb/logs -type f -size 0 -regextype posix-awk -regex "^\/usr\/local\/var\/log\/mongodb\/mongod\.log\.[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}-[0-9]{2}-[0-9]{2}$" -execdir rm {} \; >/dev/null 2>&1
    endscript
}

メモ

kill -SIGUSR1 でMongoDBのログローテートを行うと、MongoDBが mongod.log.yyyy-mm-ddTxx-xx-xx という名前の空ログファイルを作ってしまうので find を使用して消している。

create ではなくnocreate にすると、MongoDBがログファイルを見失って
ローテーションのタイミングでMongoDBが異常終了する。

参考先

Automating MongoDB Log Rotation

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2