Cronolog vs logrotate

Respuestas:

14

En mi experiencia, logrotate es genial. Es muy flexible y funciona bien con la mayoría de los programas.

Sin embargo, hay algunos problemas con él, y dado que cronolog es principalmente una función de rotación de registros web, escribiré mi experiencia con logrotate + apache que fue problemático:

Al rotar registros, debemos notificar a Apache que se está rotando un registro, ya que incluso si logrotate cambia el nombre de access.log a access.log.1, apache continuará escribiendo en access.log.1, ya que está escribiendo en el inodo, y cambiar el nombre del archivo no afecta el número de inodo.

En debian etch (y probablemente muchas otras distribuciones), logrotate se está utilizando para rotar los registros de apache. Ahora, apache tiene un reinicio elegante que aconseja que los procesos secundarios apache salgan una vez que terminen de servir las conexiones existentes, apache luego vuelve a leer su configuración, genera nuevos procesos secundarios, que comienzan a escribir en un nuevo archivo de registro (en caso de que el anterior fuera rotado).

Esto suena como una gran solución, sin embargo, el reinicio elegante no siempre funciona en ciertas condiciones (como una carga pesada), por lo que los desarrolladores de Debian decidieron usar un reinicio apache en lugar de un reinicio elegante, en la configuración apache logrotate. Desafortunadamente, esto hace que todas las conexiones se caigan de una vez, lo cual es muy malo para sitios con mucha carga. Además, el reinicio de Apache también puede causar problemas como la detención y el no inicio de Apache (también en ciertas situaciones de carga), consulte los enlaces de errores a continuación para obtener más detalles.

La conclusión es que logrotate es excelente, pero puede generar ciertos problemas para ciertos programas. No tengo mucha experiencia con cronolog, pero como escribe registros a través de una tubería, no requiere ninguna recarga de Apache cuando está rotando archivos de registro, lo que básicamente resuelve todo lo que se describe anteriormente.

Errores relacionados con logrotate / apache debian:

  1. Error de Debian # 301702
  2. Error de Debian # 400455
Tom Feiner
fuente
1
¡la solución para lo anterior es usar truncar! lo que hace es copiar el contenido de access.log a access.log.1 y luego vaciar access.log (como verá, el inodo permanece de access_log sigue siendo el mismo). Por lo general, no tiene registros de más de unos pocos GB (en el peor de los casos), por lo que todo el proceso no llevará mucho tiempo.
Nikolaidis Fotis
3

Prefiero cronolog, pero no es una preferencia realmente fuerte.

logrotate donde se inicia cron, y si un sistema está inactivo por algún motivo cuando la rotación debería haber ocurrido, entonces sus archivos de registro no se rotarán.

También me gusta que los archivos de registro tengan la fecha (% Y% m.combined.access.log) en el nombre porque guardo esos registros durante mucho tiempo. En la mayoría de los sistemas, por defecto, apache logrotate nombrará los archivos access.log, access.log.1, etc. Es posible utilizar una fecha en los archivos de registro con logrotate, pero no pude averiguar cómo hacerlo la última vez que busqué.

Zoredache
fuente
2
El problema donde logrotate no funciona si se pasa el tiempo cron se puede solucionar instalando el paquete "anacron".
andrewd18 05 de
o incluso mejor, puede guardar sus registros en el formato deseado; esto se puede hacer con plantillas en rsyslog - (% year% -% month% -% day% _lala.log). en este caso, ni siquiera tiene que rotar los registros, porque todos los días se cambia el nombre.
Nikolaidis Fotis
2

Solo se utiliza logrotate. Es lo que Debian usa por defecto y nunca he tenido ninguna queja con él.

David Pashley
fuente
2

Casi exclusivamente utilizo cronologmás logrotate. logrotateviene con Debian, y le permito seguir trabajando para los servicios del sistema, como los registros del servidor de correo. Pero para Apache y los lighttpdarchivos de registro, es todo cronolog.

Una de las razones por las que uso cronologes que toda la configuración ocurre en la línea del archivo de registro de la configuración del servidor web

por ejemplo, en un lighttpdarchivo de configuración, podría poner:

accesslog.filename = "|/usr/bin/cronolog --symlink=/var/log/webs/access.log /var/log/webs/%Y/%W-access.log"

Y todos obtienen un nuevo archivo de registro cada semana sin ninguna otra configuración. O podrías ser creativo y hacer algo como:

accesslog.filename = "|/usr/bin/cronolog --symlink=/var/log/webs/access.log /var/log/webs/%Y/%m/%a-access.log"

Y obtenga un archivo de registro que muestre el tráfico por día de la semana. Por ejemplo, todos los domingos, todos los martes.

Lo mejor es que, incluso si el servidor está inactivo durante un período de tiempo prolongado, el archivo de registro correcto se usará al reiniciar.

Marc DM
fuente
1
Eso se parece mucho a svlogd (del linaje runit y daemontools).
Tobu