Mongo Docs sagen, dass ich:
- Verwenden Sie das -SIGUSR1-Signal, um das alte Protokoll umzubenennen und den Strom zu wechseln
- benutze logrotate von OS
Ich möchte, dass das Betriebssystem in der Lage ist, alte Dateien zu komprimieren und die ältesten zu entfernen, sehe aber keine Möglichkeit, dem mongod-Prozess anzuweisen, das aktuelle Protokoll zu wechseln, außer SIGUSR1 zu senden.
Also schrieb ich
/var/log/mongodb/*.log {
daily
rotate 5
compress
dateext
missingok
notifempty
sharedscripts
postrotate
/usr/bin/killall -SIGUSR1 mongod
/usr/bin/killall -SIGUSR1 mongos
endscript
}
nach /etc/logrotate.d/mongo.
Und jetzt holen Sie sich gut benannte Logfiles aus logrotierten und leeren Logfiles wie mongodb.log.2013-09-18T23-49-44
als Spuren des SIGUSR1-Switchings. Wie wird man letzteres los?
Der Server ist für mich abgestürzt, wenn Sie SIGUSR1 an mongod senden, nachdem Sie die Protokolldatei mit logrotate aus dem Weg geräumt haben.
Die folgende Konfiguration ist sicher für die Version, die ich getestet habe - 2.6.6 auf Ubuntu 12.04 - die vorherigen Beispiele haben den Server zum Absturz gebracht. Fügen Sie dies in /etc/logrotate.d/mongod ein:
Siehe: https://jira.mongodb.org/browse/SERVER-11087 für weitere Details und einen Vorschlag von Akshay Kumar, den ich oben verwendet habe (benutze create anstelle von nocreate und cp / dev / null in der Logdatei).
In späteren Releases soll es eine logRotate-Option geben, mit der Sie die Datei erneut öffnen können - nicht umbenennen - wodurch das Umbenennungsproblem umgangen wird -, die in meiner Version jedoch nicht funktioniert hat (sie wurde nicht unterstützt).
Siehe: https://github.com/mongodb/mongo/commit/616461d294bd9f5054ca38b302b6fc5d70fde20c
Ich habe das mit getestet
quelle
systemLog.logRotate: reopen
inmongod.conf
, dann wird der pkill wie vorgesehen funktionieren und keine Löschung der umbenannten Protokolldatei benötigt wird , da kein erstellt wird.Seit mongodb 3.0 können Sie das Verhalten von mongodb mit dem logRotate-Parameter in /etc/mongod.conf ändern
Siehe auch Mongo-Handbücher .
Dann können Sie diese Logrotate-Konfiguration verwenden:
quelle
processManagement.pidFilePath
in der Konfiguration oder in der PIDFile-Einstellung der SystemD-Einheitendatei (/var/run/mongodb/mongod.pid
für mich)Folgendes hat für mich funktioniert:
Anmerkungen:
kill
ist ein eingebauter Bash, aber Logrotate läuft unter/bin/sh
- wasSIGUSR1
RedHat 6.5 nicht erkenntcompress
aber es sollte eine einfache Ergänzung seinquelle
Beachten Sie, dass es in Version 3.0 und höher nicht erforderlich ist, Ihren Datenbank-Daemon zu beenden, um lediglich ein Protokoll zu drehen. Siehe Dokumentation hier:
https://docs.mongodb.com/manual/tutorial/rotate-log-files/
quelle