Rotación de logs con el comando logrotate

Published:

Sabemos que en la vida de un sysadmin la revisión de logs es vital para poder detectar malos funcionamientos, tener un registro de lo que pasa en el sistema nos sirve para poder ver que pasa y que acción tomar.

Hace tiempo quería hacer un post así, para poder lograr explicar el comando logrotate que sirve para poder darle un corte a los archivos de log, porque si no sería gigantes y es más difícil buscar errores.

Pero, que es eso de Rotar los logs? Una práctica recomendada es guardar los registros por días. Así tendremos un archivo para el lunes, otro para el martes, y por cada día. Lo mejor de todo es que podemos configurar cuantos días podemos guardar.

Y si esto fuera poco además de guardar por días, también se puede guardar por horas, semanas, meses, etc. Todo depende de la aplicación que genera logs, porque si genera una gran cantidad de información, necesitarás guardarla en periodos mas cortos, y almacenar menos periodos. Por ejemplo, puedes guardarla cada hora, y solo almacenar las últimas 10 horas por ejemplo.

Explorando la configuración de Logrotate

  • /etc/logrotate.conf: Este archivo contiene las opciones predeterminadas y configura la rotación para algunos logs que no son propiedad de ningún paquete del sistema. Además utiliza una sentencia include para obtener la configuración de cualquier archivo que se encuentre en el directorio /etc/logrotate.d.
  • /etc/logrotate.d/: Aquí se van a colocar las opciones de Logrotate para cualquier paquete que instales en tu servidor que requiera de ayuda para rotar sus logs. En una instalación estándar deberías tener estos archivos aquí para sistemas básicos como apt, dpkg, rsyslog y más.

Y si voy a ver una configuración puntual encontraremos algo como:

cat /etc/logrotate.d/jenkins
/var/log/jenkins/jenkins.log /var/log/jenkins/access_log {
weekly
copytruncate
missingok
rotate 5
compress
delaycompress
notifempty
}

Directivas habituales de logrotate

  • Intervalos de rotación: daily, weekly, monthly, yearly – diario, semanal, mensual, anual
  • size valor: en este caso se rotarán el log cuando sobrepase el tamaño indicado en bytes. Podemos añadir sufijos: kilobytes. Megabytes o Gigabytes por ejemplo size 10M
  • compress: comprimir los archivos que se hayan rotado. Esto utiliza gzip por defecto y los archivos resultantes tendrán la terminación .gz.
  • nocompress: No comprime los logs. En algunos caso podemos retardar la compresion la compresión, si necesitamos procesar los archivos rotados. En ese caso usaremos delaycompress.
  • rotate 5: son los achivos a conservar – rotate 5, por ejemplo para guardar los últimos 5 archivos.
  • Crear un nuevo archivo – si necesitamos que el archivo exista, con la directiva create permiso usuario grupo, crearemos un nuevo archivo en blanco, por ejemplo create 640 www-data www-data.
  • copytruncate: Realizamos una copia de seguridad del fichero y el log actual lo vaciamos.
  • prerotate/endscript: estas dos directivas deben aparecer en líneas separadas. En medio se pueden especificar acciones que se desea que ocurran ANTES de la rotación de un log.
  • postrotate/endscript: similar al caso anterior, pero referido a acciones que deben ocurrir DESPUÉS de la rotación de un log. En ambos escenarios cuando decimos «acciones» nos referimos a la ejecución de scripts o comandos.
  • notifempty: no hacer la rotación de logs si el archivo está vacío.
  • missingok: no mostrar mensajes de error si el log en cuestión no existe.

Para probar estos archivos de configuración ejecuta la siguiente instrucción,

sudo logrotate /etc/logrotate.conf --debug

E incluso ejecutar el rotado de un único archivo de configuración. Así, para el caso anterior de rsyslog, la instrucción sería,

sudo logrotate /etc/logrotate.d/rsyslog

Es posible comprobar el estado del rotado de registros ejecutando la siguiente instrucción,

cat /var/lib/logrotate/status

Ejecución

Por defecto la herramienta se ejecuta vía cron, una vez al día. Esto lo vemos en

/etc/cron.daily/logrotate

Ejemplos Prácticos:

1- Apache que solo guarde 3 puntos y que se comprima en archivos de 10M (después de 10MB se rotará) se rotará semanalmente.

/var/log/apache2/* {
weekly
rotate 3
size 10M
compress
delaycompress
}

2- Este con aviso por correo y que se cree el archivo para el propietario root menusalmente. Si el size es = a 1MB lo va a rotar y creará otro archivo. Además le va a poner como adicional al nombre día, mes y año.

/var/log/squid/access.log {
monthly
create 0644 root root
rotate 5
size=1M
dateext
dateformat -%d%m%Y
notifempty
mail [email protected]
}

Si queremos forzar la ejecución de logrotate con nuestra configuración, por ejemplo con uno de los ejemplos podemos hacer:

logrotate -vf /etc/logrotate.d/prueba.conf
- Advertisement -
Jorge
Jorgehttps://nksistemas.com
Soy Jorge, Sr Sysadmin Linux/DevOps/SRE y creador de NKSistemas.com Trabajo con plataformas: Linux, Windows, AWS, GCP, VMware, Helm, kubernetes, Docker, etc.

Related articles

Ads Blocker Image Powered by Code Help Pro

Se detecto un bloqueador de publicidad!!!

Nuestro contenido es 100% gratuito, por favor colabora con nosotros, permite la publicidad y disfruta del contenido.