GNU/Linux >> Tutoriales Linux >  >> Linux

Rotar y archivar registros con el comando logrotate de Linux

Los registros son excelentes para averiguar qué está haciendo una aplicación o solucionar un posible problema. Casi todas las aplicaciones con las que tratamos generan registros, y queremos que las aplicaciones que desarrollamos nosotros mismos también los generen. Cuanto más detallados sean los registros, más información tenemos. Pero si se dejan solos, los troncos pueden crecer hasta un tamaño inmanejable y, a su vez, pueden convertirse en un problema por sí mismos. Por lo tanto, es una buena idea mantenerlos recortados, conservar los que vamos a necesitar y archivar el resto.

Más recursos de Linux

  • Hoja de trucos de los comandos de Linux
  • Hoja de trucos de comandos avanzados de Linux
  • Curso en línea gratuito:Descripción general técnica de RHEL
  • Hoja de trucos de red de Linux
  • Hoja de trucos de SELinux
  • Hoja de trucos de los comandos comunes de Linux
  • ¿Qué son los contenedores de Linux?
  • Nuestros últimos artículos sobre Linux

Básicos

El logrotate La utilidad es excelente para administrar registros. Puede rotarlos, comprimirlos, enviarlos por correo electrónico, eliminarlos, archivarlos y comenzar de nuevo cuando los necesite.

Ejecutando logrotate es bastante simple:simplemente ejecute logrotate -vs state-file config-file . En el comando anterior, el v opción habilita el modo detallado, s especifica un archivo de estado y el config-file final menciona el archivo de configuración, donde especifica lo que necesita hacer.

Práctica

Veamos un logrotate configuración que se ejecuta de forma silenciosa en nuestro sistema, administrando la gran cantidad de registros que encontramos en /var/log directorio. Echa un vistazo a los archivos actuales en ese directorio. Ves muchos *.[number].gz archivos? Eso es lo logrotate está haciendo. Puede encontrar el archivo de configuración para esto en /etc/logrotate.d/rsyslog . El mío se ve así:

/var/log/syslog
{
        rotate 7
        daily
        missingok
        notifempty
        delaycompress
        compress
        postrotate
                reload rsyslog >/dev/null 2>&1 || true
        endscript
}

/var/log/mail.info
/var/log/mail.warn
/var/log/mail.err
/var/log/mail.log
/var/log/daemon.log
/var/log/kern.log
/var/log/auth.log
/var/log/user.log
/var/log/lpr.log
/var/log/cron.log
/var/log/debug
/var/log/messages

{
        rotate 4
        weekly
        missingok
        notifempty
        compress
        delaycompress
        sharedscripts
        postrotate
                reload rsyslog >/dev/null 2>&1 || true
        endscript
}

El archivo comienza con la definición de las instrucciones para rotar /var/log/syslog archivo y las instrucciones están contenidas dentro de las llaves que siguen. Esto es lo que significan:

  • rotate 7 :Mantenga registros de las últimas siete rotaciones. Luego comience a eliminarlos.
  • daily :Rote el registro diariamente. Junto con rotate 7 , esto significaría que los registros se mantendrían durante los últimos siete días. Otras opciones son weeklymonthlyyearly . También hay un size parámetro que rotará los archivos de registro si su tamaño aumenta más allá de un límite especificado; por ejemplo, size 10ksize 10Msize 10G , etc. Si no se especifica nada, los registros se rotarán siempre que logrotate carreras. Incluso puedes ejecutar logrotate en un cron para usarlo en intervalos de tiempo más específicos.
  • missingok :Está bien si falta el archivo de registro. No se asuste.
  • notifempty :No rotar si el archivo de registro está vacío.
  • delaycompress :si la compresión está activada, retrase la compresión hasta la próxima rotación. Esto permite que al menos un archivo girado pero sin comprimir esté presente. Útil si desea que los registros de ayer permanezcan sin comprimir para solucionar problemas. También es útil si algún programa aún puede escribir en el archivo anterior hasta que se reinicie/recargue, como Apache.
  • compress :La compresión está activada. Usa nocompress para apagarlo.
  • postrotate/endscript :Ejecute el script dentro de esta sección después de la rotación. Útil para hacer cosas de limpieza. También hay un prerotate/endscript por hacer las cosas antes de que comience la rotación.

¿Puedes averiguar qué hace la siguiente sección para todos los archivos mencionados en la configuración anterior? El único parámetro adicional en la segunda sección es sharedscripts , que le dice a logrotate para no ejecutar la sección dentro de postrotate/endscript hasta que se complete toda la rotación de registros. Evita que el script se ejecute por cada registro rotado y se ejecuta una vez al final.

Algo Nuevo

Estoy usando la siguiente configuración para manejar el acceso de Nginx y los registros de errores en mi sistema.

/var/log/nginx/access.log
/var/log/nginx/error.log  {
        size 1
        missingok
        notifempty
        create 544 www-data adm
        rotate 30
        compress
        delaycompress
        dateext
        dateformat -%Y-%m-%d-%s
        sharedscripts
        extension .log
        postrotate
                service nginx reload
        endscript
}

El script anterior se puede ejecutar usando:

logrotate -vs state-file /tmp/logrotate

Ejecutar el comando por primera vez da este resultado:

reading config file /tmp/logrotate
extension is now .log

Handling 1 logs

rotating pattern: /var/log/nginx/access.log
/var/log/nginx/error.log   1 bytes (30 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/nginx/access.log
  log needs rotating
considering log /var/log/nginx/error.log
  log does not need rotating
rotating log /var/log/nginx/access.log, log->rotateCount is 30
Converted ' -%Y-%m-%d-%s' -> '-%Y-%m-%d-%s'
dateext suffix '-2021-08-27-1485508250'
glob pattern '-[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
glob finding logs to compress failed
glob finding old rotated logs failed
renaming /var/log/nginx/access.log to /var/log/nginx/access-2021-08-27-1485508250.log
creating new /var/log/nginx/access.log mode = 0544 uid = 33 gid = 4
running postrotate script
* Reloading nginx configuration nginx

Y ejecutándolo por segunda vez:

reading config file /tmp/logrotate
extension is now .log

Handling 1 logs

rotating pattern: /var/log/nginx/access.log
/var/log/nginx/error.log   1 bytes (30 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/nginx/access.log
  log needs rotating
considering log /var/log/nginx/error.log
  log does not need rotating
rotating log /var/log/nginx/access.log, log->rotateCount is 30
Converted ' -%Y-%m-%d-%s' -> '-%Y-%m-%d-%s'
dateext suffix '-2021-08-27-1485508280'
glob pattern '-[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
compressing log with: /bin/gzip
renaming /var/log/nginx/access.log to /var/log/nginx/access-2021-08-27-1485508280.log
creating new /var/log/nginx/access.log mode = 0544 uid = 33 gid = 4
running postrotate script
* Reloading nginx configuration nginx

Y ejecutándolo por tercera vez:

reading config file /tmp/logrotate
extension is now .log

Handling 1 logs

rotating pattern: /var/log/nginx/access.log
/var/log/nginx/error.log   1 bytes (30 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/nginx/access.log
  log needs rotating
considering log /var/log/nginx/error.log
  log does not need rotating
rotating log /var/log/nginx/access.log, log->rotateCount is 30
Converted ' -%Y-%m-%d-%s' -> '-%Y-%m-%d-%s'
dateext suffix '-2021-08-27-1485508316'
glob pattern '-[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
compressing log with: /bin/gzip
renaming /var/log/nginx/access.log to /var/log/nginx/access-2021-08-27-1485508316.log
creating new /var/log/nginx/access.log mode = 0544 uid = 33 gid = 4
running postrotate script
* Reloading nginx configuration nginx

El contenido del archivo de estado se ve así:

logrotate state -- version 2
"/var/log/nginx/error.log" 2021-08-27-9:0:0
"/var/log/nginx/access.log" 2021-08-27-9:11:56

Descargue la hoja de trucos de Linux logrotate.


Este artículo se publicó originalmente en el blog personal del autor y se ha adaptado con autorización.


Linux
  1. Ver comandos y tareas con el comando watch de Linux

  2. Reemplace las comillas tipográficas con el comando sed de Linux

  3. Encuentra archivos y directorios en Linux con el comando de búsqueda

  4. Primeros pasos con el comando tac de Linux

  5. Primeros pasos con el comando cat de Linux

Cómo usar el comando de suspensión de Linux con ejemplos

Cómo usar el comando who en Linux con ejemplos

Comando tar en Linux con ejemplos

Cómo rotar y comprimir archivos de registro en Linux con Logrotate

Cómo encontrar archivos con el comando fd en Linux

HowTo:El último tutorial del comando Logrotate con 10 ejemplos