Документы Монго говорят, что я могу:
- используйте сигнал -SIGUSR1 и переименуйте старый журнал и переключите текущий
- использовать logrotate из ОС
Мне нужна возможность 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.
А теперь получите файлы имен с логическими именами из logrotate и пустые файлы журналов, такие mongodb.log.2013-09-18T23-49-44
как следы переключения SIGUSR1. Как избавиться от последнего?
Сервер рухнул для меня, если вы отправите SIGUSR1 на mongod после того, как вы удалили файл журнала с помощью logrotate.
Следующая конфигурация безопасна для версии, которую я тестировал - 2.6.6 на Ubuntu 12.04 - предыдущие примеры приводили к сбою сервера. Поместите это в /etc/logrotate.d/mongod:
См. Https://jira.mongodb.org/browse/SERVER-11087 для получения более подробной информации и предложения от Акшая Кумара, которое я использовал выше (используйте create вместо nocreate и cp / dev / null для файла журнала).
В более поздних выпусках должна быть опция logRotate, которую вы можете использовать для повторного открытия файла, а не для его переименования, что обойдет проблему переименования, но в моей версии это не сработало (это не поддерживалось).
См .: https://github.com/mongodb/mongo/commit/616461d294bd9f5054ca38b302b6fc5d70fde20c.
Я проверил это с
источник
systemLog.logRotate: reopen
вmongod.conf
, то pkill будет работать, как предполагалось, и не требуется удаление переименованного файла журнала, так как ни один не создан.Начиная с mongodb 3.0, вы можете изменить поведение mongodb с помощью параметра logRotate, изменив его в /etc/mongod.conf
Смотрите также Mongo Manuals .
Затем вы можете использовать эту конфигурацию logrotate:
источник
processManagement.pidFilePath
В конфигурации или настройке PIDFile файла модуля SystemD (/var/run/mongodb/mongod.pid
для меня)Следующее работало для меня:
Примечания:
kill
является встроенным в Bash, но Logrotate работает под/bin/sh
- который не распознаетSIGUSR1
в RedHat 6.5compress
но это должно быть простым дополнениемисточник
Обратите внимание, что в версии 3.0 и выше нет необходимости уничтожать демон базы данных, просто вращая журнал. Обратитесь к документации здесь:
https://docs.mongodb.com/manual/tutorial/rotate-log-files/
источник