¿Cuándo usar la opción delaycompress en logrotate?

33

La página de manual de logrotatedice que:

It can be used when some program cannot be told to close its logfile
and  thus  might  continue writing to the previous log file for some
time.

Estoy confundido por esto. Si no se le puede decir a un programa que cierre su archivo de registro, continuará escribiendo para siempre , no por algún tiempo . Si la compresión se pospone al siguiente ciclo de rotación, el programa continúa escribiendo en ese archivo incluso después del siguiente ciclo de rotación. ¿Cómo se pospone resolver el problema?

Entiendo que copytruncatedebería usarse cuando no se le puede decir a un programa que cierre el archivo de registro. Soy consciente de que algunos datos escritos en el archivo de registro se pierden cuando la copia está en progreso.

Estaba buscando en el archivo logrotate para couchdb, y tenía tanto copytruncatey delaycompressopciones.

/usr/local/couchdb-1.0.1/var/log/couchdb/*.log {
   weekly
   rotate 10
   copytruncate
   delaycompress
   compress
   notifempty
   missingok
}

Parece que no tiene sentido usar delaycompresscuando copytruncateya está allí. ¿Qué me estoy perdiendo?

Anand Chitipothu
fuente

Respuestas:

27

Su comprensión de copytruncatees correcta, pero la redacción en la página de manual delaycompresses un poco engañosa. Más correctamente, debería decir "cuando no se le puede decir a un programa que cierre inmediatamente su archivo de registro", por ejemplo, si está usando scripts compartidos y el script envía una señal al proceso usando el registro cuando todos los archivos de registro han sido rotados .

womble
fuente
1
Cuando estoy usando copytruncate, no hay necesidad de decirle al programa que cierre su archivo de registro. Entonces, ¿no tiene sentido especificar delaycompressjunto con copytruncate?
Anand Chitipothu
66
Nunca lo use a copytruncatemenos que sea absolutamente necesario , porque pierde entradas de registro. Puede usar ambas opciones si desea la otra característica que delaycompressproporciona: la capacidad de leer el archivo de registro anterior sin necesidad de descomprimirlo primero.
womble
¿Hay alguna otra opción que no sea copytruncatesi no puedo decirle a mi programa que vuelva a cargar?
Anand Chitipothu
55
No. Es por eso que debes usar un software que no apesta, y que aceptará una señal para decir "recarga tus registros".
womble
3

No estoy seguro si entiendo completamente tu pregunta, pero si preguntas lo que pienso ... uso esto:

postrotate
          killall -HUP syslog-ng
  endscript

Esa es una buena (o al menos una) forma de matar el registro y pasar al siguiente. Para los "programas" que apestan, como la plataforma ASA de Cisco que registra toneladas de datos por segundo, funciona.

Madriguera
fuente
3

Usamos:

  • diario
  • delaycompress
  • nodateext

Esto crea una copia fija del apache access_log access_log.1para que luego podamos ejecutar nuestro paquete de estadísticas como un script al final del día.

Al día siguiente, logrotate comprime el archivo creando access_log.2.zip

Edwardg
fuente