Mongodb - надлежащий способ повернуть журналы

Если Вы купили vps, некоторые поставщики обеспечивают своего рода спасательную систему, удаленно доступную, который имеет удаленный терминал для доступа к Вашей виртуальной машине, не запуская операционную систему. Если это - Ваш случай, можно загрузить спасательную систему и сделать полный образ жесткого диска. Иначе Вы просто не можете с помощью ssh.

13
задан 20 September 2013 в 13:12
5 ответов

copytruncate очень хорошо работает для ротации журнала.

конфигурация, подобная этой, должна сделать эту работу за вас:

/var/log/mongodb/*.log {
  daily
  missingok
  rotate 5
  compress
  dateext
  delaycompress
  copytruncate
  notifempty
}
11
ответ дан 2 December 2019 в 21:17

У меня сработало следующее:

/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
}

Примечания:

  • Протестировано на RedHat 6.5
  • Единственный способ получить рабочее решение - это удалить пустые файлы журнала, которые создает Mongo.
  • Местоположение файла блокировки зависит от того, как был установлен MongoDB.
  • kill - встроенная функция Bash, но logrotate работает под / bin / sh , который не распознает SIGUSR1 в RedHat 6.5
  • Я не тестировал compress , но это должно быть простое добавление
0
ответ дан 2 December 2019 в 21:17

Сервер упал для меня, если вы отправите SIGUSR1 на mongod после того, как вы сдвинули лог-файл с места с помощью логротата.

Следующий конфиг безопасен для версии, которую я тестировал - 2.6.6 на ubuntu 12.04 - в предыдущих примерах сервер упал. Положите это в /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
}

Смотрите: https://jira.mongodb.org/browse/SERVER-11087 для более подробной информации и предложения от Акшай Кумар, которое я использовал в вышеуказанном (используйте create вместо nocreate и cp /dev/null в лог-файле).

В более поздних релизах должна быть опция logRotate, которую вы можете использовать для переоткрытия файла - а не для его переименования - что сработает вокруг проблемы переименования - но в моей версии это не сработало (это не поддерживалось).

Смотрите: https://github.com/mongodb/mongo/commit/616461d294bd9f5054ca38b302b6fc5d70fde20c

Я протестировал это с

logrotate -v -f /etc/logrotate.d/mongod
15
ответ дан 2 December 2019 в 21:17

Начиная с mongodb 3.0, вы можете изменить поведение mongodb с помощью параметра logRotate, изменив в /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
}
15
ответ дан 2 December 2019 в 21:17

Обратите внимание, что в версии 3.0 и выше не требуется убивать демон базы данных просто для ротации журнала. Обратитесь к документации здесь:

https://docs.mongodb.com/manual/tutorial/rotate-log-files/

-1
ответ дан 2 December 2019 в 21:17

Теги

Похожие вопросы