Mongo docs powiedzieć, że mogę:
- użyj sygnału -SIGUSR1 i zmień nazwę starego dziennika i włącz prąd
- użyj logrotate z systemu operacyjnego
Chcę logrotate systemu operacyjnego do spakowania starych plików i usuwania najstarszych, ale nie widzę sposobu, aby powiedzieć mongod procesowi zmiany bieżącego dziennika poza wysłaniem SIGUSR1.
Więc napisałem
/var/log/mongodb/*.log {
daily
rotate 5
compress
dateext
missingok
notifempty
sharedscripts
postrotate
/usr/bin/killall -SIGUSR1 mongod
/usr/bin/killall -SIGUSR1 mongos
endscript
}
do /etc/logrotate.d/mongo.
A teraz uzyskaj dobrze nazwane logi z logrotate i puste logi jak mongodb.log.2013-09-18T23-49-44
ślady przełączania SIGUSR1. Jak się tego pozbyć?
Od wersji mongodb 3.0 możesz zmienić zachowanie mongodb za pomocą parametru logRotate, zmień w /etc/mongod.conf
Zobacz także Podręczniki Mongo .
Następnie możesz użyć tej konfiguracji logrotate:
źródło
processManagement.pidFilePath
ustawienie PIDFile pliku konfiguracyjnego lub pliku jednostki SystemD (/var/run/mongodb/mongod.pid
dla mnie)Serwer zawiesił się dla mnie, jeśli wysyłasz SIGUSR1 do mongod po tym, jak usunąłeś plik dziennika z drogi za pomocą logrotate.
Poniższa konfiguracja jest bezpieczna dla wersji, którą przetestowałem - 2.6.6 na Ubuntu 12.04 - poprzednie przykłady spowodowały awarię serwera. Umieść to w /etc/logrotate.d/mongod:
Zobacz: https://jira.mongodb.org/browse/SERVER-11087, aby uzyskać więcej szczegółów i sugestię od Akshay Kumar, której użyłem powyżej (użyj create zamiast nocreate i cp / dev / null do pliku dziennika).
W późniejszych wersjach powinna istnieć opcja logRotate, której możesz użyć do ponownego otwarcia pliku - nie zmieniaj jego nazwy - co obejdzie problem zmiany nazwy - ale nie działało to w mojej wersji (nie było obsługiwane).
Zobacz: https://github.com/mongodb/mongo/commit/616461d294bd9f5054ca38b302b6fc5d70fde20c
Przetestowałem to z
źródło
systemLog.logRotate: reopen
wmongod.conf
, pkill będzie działał zgodnie z przeznaczeniem i nie jest wymagane usuwanie pliku dziennika o zmienionej nazwie, ponieważ żaden nie jest tworzony.Dla mnie działało:
Uwagi:
kill
jest wbudowany w Bash, ale logrotate działa poniżej/bin/sh
- co nie rozpoznajeSIGUSR1
w RedHat 6.5compress
ale powinien być prostym dodatkiemźródło
Zauważ, że w wersji 3.0 i wyższej nie jest wymagane zabicie demona bazy danych po prostu obrócenie dziennika. Zobacz dokumentację tutaj:
https://docs.mongodb.com/manual/tutorial/rotate-log-files/
źródło