¿Cómo rotar el registro en función de un intervalo a menos que el registro exceda un cierto tamaño?

20

Desde la página de manual de logrotate:

tamaño minimo
Los archivos de registro se rotan cuando crecen más que los bytes de tamaño, pero no antes del intervalo de tiempo especificado adicionalmente (diario, semanal, mensual o anual). La opción de tamaño relacionada es similar, excepto que es mutuamente exclusiva con las opciones de intervalo de tiempo y hace que los archivos de registro se roten sin tener en cuenta el último tiempo de rotación. Cuando se usa minsize, se consideran tanto el tamaño como la marca de tiempo de un archivo de registro.

tamaño tamaño
Los archivos de registro se rotan cuando crecen más que los bytes de tamaño. Si el tamaño es seguido por k, se supone que el tamaño está en kilobytes. Si se usa M, el tamaño está en megabytes, y si se usa G, el tamaño está en gigabytes. Entonces, el tamaño 100, el tamaño 100k, el tamaño 100M y el tamaño 100 son válidos.

Establecí el tamaño como 5M y el intervalo como semanal, pensando que los registros se rotarían semanalmente y se produciría una rotación adicional si el tamaño del registro supera los 5M. Pero lo que sucede es que el registro no se rota a menos que exceda los 5M, que parece ser lo que se supone que debe hacer el tamaño mínimo .

¿Estoy interpretando mal el manual? ¿Cómo hago que el registro gire semanalmente Y si excede los 5M?

EDITAR:

No estoy seguro de si la siguiente información es relevante, pero solo para complementar:

Estoy usando rsyslog para hacer el registro principal de mensajes, seguro, cron, maillog, boot. Los siguientes son la fecha de rotación y el tamaño del archivo de los penúltimos registros donde el tamaño y el intervalo se establecen como se describe anteriormente:

filename  rotation date  file size
messages  20130129       5.3MB
secure    20130113       5.1kB
cron      20130113       3.6kB
maillog   20130113       1.1kB

Como se puede ver, solo los mensajes se rotan.

EDIT2:

Debería haberlo consultado man logrotate. En realidad lo actualizaron con la opción maxsize . Esto debería ser lo que estoy buscando:

tamaño máximo
Los archivos de registro se rotan cuando crecen más que los bytes de tamaño, incluso antes del intervalo de tiempo especificado adicionalmente (diario, semanal, mensual o anual). La opción de tamaño relacionada es similar, excepto que es mutuamente exclusiva con las opciones de intervalo de tiempo y hace que los archivos de registro se roten sin tener en cuenta el último tiempo de rotación. Cuando se usa maxsize, se consideran tanto el tamaño como la marca de tiempo de un archivo de registro.

Desbordamiento de preguntas
fuente

Respuestas:

24

Aquí se responden algunas preguntas: ¿ rotar diariamente y tamaño?

Por logrotatelo general , solo se ejecutará una vez al día, por lo que los límites de tamaño no se respetarán exactamente. logrotateEl archivo de estado (posiblemente /var/lib/logrotate.status) solo almacena fechas (no horas), no está diseñado para usarse con más frecuencia, por lo que no puede rotar trivialmente los archivos con más frecuencia ( Actualización : la versión 3.85 agrega soporte por hora y almacena una marca de tiempo completa en el archivo de estado .)

No dice cuál syslogdestá usando, rsyslog y syslog-ng admiten la rotación basada en el tamaño autogestionada, por lo que debería poder hacer que giren por tamaño y logrotaterotar semanalmente (aunque puede ser necesario pensar un poco para nomenclatura de archivos para asegurarse de que la rotación simultánea de archivos no elimine accidentalmente algo).

Otra opción es usar registros canalizados, al igual que Apache, de hecho, Apache-2.4 rotatelogs admite exactamente esta característica (las versiones anteriores solo admitían el tamaño o el tiempo de forma independiente). No dice de dónde se originan los registros, pero es posible que pueda iniciar sesión en una tubería o quince y usar rotatelogs, si eso es compatible.

Con logrotate<= v3.8.0, los tres escenarios compatibles son:

  1. tamaño rotar por tamaño, una vez al día como máximo, independientemente del período de tiempo transcurrido
  2. timeperiod rota incondicionalmente por timeperiod, independientemente del tamaño
  3. minsize & timeperiod si el tamaño del archivo de registro excede minsize, luego gire por timeperiod. Un uso común es "minsize 1", lo que significa que los registros de 0 bytes no se rotan, lo que minimiza el desorden.

logrotate-3.8.1 agrega:

  1. maxsize y timeperiod giran cuando cualquiera de los tamaños excede maxsize, o después del período de tiempo transcurrido. logrotateEs posible que deba ejecutarse más de lo predeterminado una vez al día en este caso.

logrotate-3.8.5 agrega:

  1. soporte por hora , y almacena una marca de tiempo completa en el archivo de estado. Debe ejecutar logrotate(al menos) cada hora para esto.
Sr. púrpura
fuente
Por favor vea mi actualización, gracias por el enlace. Parece que se requiere algún script? minsize parece no muy útil, me pregunto por qué lo tienen en lugar de maxsize.
Desbordamiento de preguntas
1
Yay, la opción maxsize ahora está disponible. Caso cerrado :)
Desbordamiento de preguntas
Lo vi en los documentos antes de leer su actualización ... la respuesta ahora se expandió. Gracias.
Sr.Spuratic
1
> el archivo de estado de logrotate (posiblemente /var/lib/logrotate.status) solo almacena fechas (no horas) Esta declaración puede estar desactualizada. Acabo de comprobar mi archivo de estado de logrotate, y contenía marcas de tiempo con una segunda resolución: "/var/log/kern.log" 2018-3-12-1: 8: 16
hyperair