Os documentos do Mongo dizem que eu posso:
- use o sinal -SIGUSR1 e renomeie o registro antigo e troque a corrente
- use logrotate do SO
Eu quero a capacidade de rotação do sistema operacional para compactar arquivos antigos e remover os mais antigos, mas não vejo como o mongod mudar o registro atual, a não ser o envio do SIGUSR1.
Então eu escrevi
/var/log/mongodb/*.log {
daily
rotate 5
compress
dateext
missingok
notifempty
sharedscripts
postrotate
/usr/bin/killall -SIGUSR1 mongod
/usr/bin/killall -SIGUSR1 mongos
endscript
}
para /etc/logrotate.d/mongo.
E agora obtenha arquivos de log bem nomeados de logrotate e arquivos de log vazios, mongodb.log.2013-09-18T23-49-44
como vestígios da comutação SIGUSR1. Como se livrar do último?
O servidor travou para mim se você enviar SIGUSR1 para o mongod depois de mover o arquivo de log para fora do caminho com logrotate.
A seguinte configuração é segura para a versão que eu testei - 2.6.6 no ubuntu 12.04 - os exemplos anteriores travaram o servidor. Coloque isso em /etc/logrotate.d/mongod:
Veja: https://jira.mongodb.org/browse/SERVER-11087 para obter mais detalhes e uma sugestão de Akshay Kumar, que usei acima (use create em vez de nocreate e cp / dev / null no arquivo de log).
Nas versões posteriores, é suposto haver uma opção logRotate que você pode usar para reabrir o arquivo - não renomeá-lo -, que contornará o problema de renomeação - mas não funcionou na minha versão (não era suportada).
Consulte: https://github.com/mongodb/mongo/commit/616461d294bd9f5054ca38b302b6fc5d70fde20c
Eu testei isso com
fonte
systemLog.logRotate: reopen
emmongod.conf
, em seguida, o pkill irá funcionar como pretendido e não a exclusão do arquivo de log renomeado é necessária já que nenhum é criado.Desde o mongodb 3.0, você pode alterar o comportamento do mongodb com o parâmetro logRotate, altere no /etc/mongod.conf
Veja também os manuais do Mongo .
Então você pode usar esta configuração de logrotate:
fonte
processManagement.pidFilePath
na configuração ou configuração pidfile do arquivo unidade Systemd (/var/run/mongodb/mongod.pid
para mim)O seguinte funcionou para mim:
Notas:
kill
é um Bash embutido, mas o logrotate é executado sob/bin/sh
- o que não é reconhecidoSIGUSR1
no RedHat 6.5compress
mas deve ser uma adição diretafonte
Observe que na versão 3.0 e superior, não é necessário matar o daemon do banco de dados simplesmente para girar um log. Consulte a documentação aqui:
https://docs.mongodb.com/manual/tutorial/rotate-log-files/
fonte