Los documentos de Mongo dicen que puedo:
- use la señal -SIGUSR1 y cambie el nombre del registro antiguo y cambie la corriente
- usar logrotate del sistema operativo
Quiero la capacidad de rotación del sistema operativo para comprimir archivos antiguos y eliminar los más antiguos, pero no veo la manera de decirle al proceso mongod que cambie el registro actual que no sea enviar SIGUSR1.
Entonces escribí
/var/log/mongodb/*.log {
daily
rotate 5
compress
dateext
missingok
notifempty
sharedscripts
postrotate
/usr/bin/killall -SIGUSR1 mongod
/usr/bin/killall -SIGUSR1 mongos
endscript
}
a /etc/logrotate.d/mongo.
Y ahora obtenga archivos de registro bien nombrados de logrotate y archivos de registro vacíos mongodb.log.2013-09-18T23-49-44
como trazas de conmutación SIGUSR1. ¿Cómo deshacerse de este último?
El servidor se bloqueó para mí si envía SIGUSR1 a mongod después de haber quitado el archivo de registro con logrotate.
La siguiente configuración es segura para la versión que he probado: 2.6.6 en ubuntu 12.04; los ejemplos anteriores bloquearon el servidor. Ponga esto en /etc/logrotate.d/mongod:
Consulte: https://jira.mongodb.org/browse/SERVER-11087 para obtener más detalles y una sugerencia de Akshay Kumar que utilicé en lo anterior (use create en lugar de nocreate y cp / dev / null para el archivo de registro).
En versiones posteriores se supone que debe haber una opción logRotate que puede usar para volver a abrir el archivo, no cambiarle el nombre, lo que solucionará el problema de cambio de nombre, pero no funcionó en mi versión (no era compatible).
Ver: https://github.com/mongodb/mongo/commit/616461d294bd9f5054ca38b302b6fc5d70fde20c
He probado esto con
fuente
systemLog.logRotate: reopen
dentromongod.conf
, entonces el pkill funcionará según lo previsto y no se requiere la eliminación del archivo de registro renombrado ya que no se crea ninguno.Desde mongodb 3.0 puede cambiar el comportamiento de mongodb con el parámetro logRotate, cambie en /etc/mongod.conf
Ver también Manuales de Mongo .
Entonces puede usar esta configuración de logrotate:
fuente
processManagement.pidFilePath
en la configuración o la configuración PIDFile del archivo de la unidad SystemD (/var/run/mongodb/mongod.pid
para mí)Lo siguiente funcionó para mí:
Notas:
kill
es un Bash incorporado pero se ejecuta logrotate/bin/sh
, que no reconoceSIGUSR1
en RedHat 6.5compress
pero debería ser una adición sencillafuente
Tenga en cuenta que en la versión 3.0 y superior no es necesario eliminar el daemon de su base de datos simplemente para rotar un registro. Consulte la documentación aquí:
https://docs.mongodb.com/manual/tutorial/rotate-log-files/
fuente