Назад | Перейти на главную страницу

Ротация журналов Mongodb создает дополнительный пустой файл журнала при каждом запуске

Недавно я настроил новый арбитр mongodb и использовал его для тестирования новой конфигурации mongo, используя синтаксис конфигурации mongo 3, в то же время я тестировал ротацию журналов на сервере. Это отлично сработало:

$ cat /etc/mongo.conf

storage:
  dbPath: "/srv/mongodb"
  directoryPerDB: true

#where to log
systemLog:
  destination: file
  path: "/var/log/mongodb/mongodb.log"
  logAppend: true
  logRotate: reopen

# in replica set configuration, specify the name of the replica set
replication:
  replSetName: "dev"

net:
  http:
    enabled: true
    RESTInterfaceEnabled: true

Конфигурация ротации журналов:

cat /etc/logrotate.d/mongodb

/var/log/mongodb/*.log {
    daily
    rotate 7
    compress
    dateext
    missingok
    notifempty
    sharedscripts
    copytruncate
    postrotate
        /bin/kill -SIGUSR1 `cat /var/run/mongodb.pid 2> /dev/null` 2> /dev/null || true
    endscript
}

Файлы журнала:

-rw-r--r--  1 mongodb mongodb 230277 Jan 18 09:28 mongodb.log
-rw-r--r--  1 mongodb mongodb 353041 Jan 13 06:38 mongodb.log-20160113.gz
-rw-r--r--  1 mongodb mongodb 249142 Jan 14 06:34 mongodb.log-20160114.gz
-rw-r--r--  1 mongodb mongodb 238532 Jan 15 06:50 mongodb.log-20160115.gz
-rw-r--r--  1 mongodb mongodb 201815 Jan 16 06:47 mongodb.log-20160116.gz
-rw-r--r--  1 mongodb mongodb 205026 Jan 17 06:26 mongodb.log-20160117.gz
-rw-r--r--  1 mongodb mongodb 211581 Jan 18 06:51 mongodb.log-20160118.gz

Поскольку это сработало, я попробовал ту же конфигурацию на одном из существующих db-узлов, используя следующую конфигурацию:

cat /etc/mongod.conf

storage:
  dbPath: "/srv/mongodb"
  directoryPerDB: true

#where to log
systemLog:
  destination: file
  path: "/var/log/mongodb/mongodb.log"
  logAppend: true
  logRotate: reopen

# in replica set configuration, specify the name of the replica set
replication:
  replSetName: "dev"

net:
  http:
    enabled: true
    RESTInterfaceEnabled: true

Ротация журнала:

cat /etc/logrotate.d/mongodb

/var/log/mongodb/*.log {
    daily
    rotate 7
    compress
    dateext
    missingok
    notifempty
    sharedscripts
    copytruncate
    postrotate
        /bin/kill -SIGUSR1 `cat /var/run/mongodb.pid 2> /dev/null` 2> /dev/null || true
    endscript
}

Предоставляет мне эти файлы журналов:

-rw-r--r--  1 mongodb mongodb   224461 Jan 18 09:19 mongodb.log
-rw-r--r--  1 mongodb mongodb 18081598 Jan 16 06:43 mongodb.log-20160116.gz
-rw-r--r--  1 mongodb mongodb        0 Jan 16 06:43 mongodb.log.2016-01-16T06-43-30
-rw-r--r--  1 mongodb mongodb   212828 Jan 17 06:37 mongodb.log-20160117.gz
-rw-r--r--  1 mongodb mongodb        0 Jan 17 06:37 mongodb.log.2016-01-17T06-37-37
-rw-r--r--  1 mongodb mongodb   212639 Jan 18 06:49 mongodb.log-20160118.gz
-rw-r--r--  1 mongodb mongodb        0 Jan 18 06:49 mongodb.log.2016-01-18T06-49-22

Может ли кто-нибудь объяснить, почему я получаю 2 файла журнала каждый день, один с отметкой времени как часть имени файла? Я подумал, может быть, у меня какая-то разница в конфигурации, но я этого не вижу.

Я знаю, что могу обойти это, поместив find / var / log / mongodb / * -empty -delete в мою конфигурацию ротации сообщений, но я бы предпочел не создавать их вообще, а не удалять их после их создания.

Обе машины используют одну и ту же версию mongodb (3.0.8), установленную из репозитория ubuntu с mongodb.org.

Просто конфиг, который предотвращает это, не применялся:

  logRotate: reopen

Поскольку служба mongo не была перезапущена с момента обновления конфигурации. После перезапуска службы при следующей ротации создается только один файл журнала.

В вашей конфигурации ваш журнал вращается дважды. В первый раз при отправке SIGUSR1 к экземпляру монго и второй раз через logrotate. Так logrotate вращает пустой журнал, только что созданный mongo. Не нужно logrotate повернуть журнал монго, потому что mongodb может сделать это самостоятельно. Я настроил ротацию таким образом

[mongod@lab7-mongo-4 ~]$ crontab -l
00 00 * * * /opt/gicapods/scripts/rotate_mongo.sh

[mongod@lab7-mongo-4 ~]$ less /opt/scripts/rotate_mongo.sh
#!/bin/bash
cat `find /opt/mongo/db/ -type f -name mongod.lock |egrep -v '(config|backup)'` |xargs kill -SIGUSR1
COUNT=1
for i in `/bin/ls -t /opt/mongo/log | egrep 'mongod_lab7-mongo-[0-9]+.log.*'`; do
    if [[ $COUNT -gt 5 ]]; then
            rm -f /opt/mongo/log/$i
    fi
    let "COUNT++"
done