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 conrotate 7
, esto significaría que los registros se mantendrían durante los últimos siete días. Otras opciones sonweekly
,monthly
,yearly
. También hay unsize
parámetro que rotará los archivos de registro si su tamaño aumenta más allá de un límite especificado; por ejemplo,size 10k
,size 10M
,size 10G
, etc. Si no se especifica nada, los registros se rotarán siempre quelogrotate
carreras. Incluso puedes ejecutarlogrotate
en uncron
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. Usanocompress
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 unprerotate/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.