La mayoría de los servicios en Linux generarán archivos de registro, de forma general almacenados en /var/log/
. Estos son simples archivos de texto, pero pueden llegar a ser verdaderamente grandes, hasta el punto en que podría ejecutar su servidor sin espacio.
¿Qué hace Logrotate?
Logrotate ayuda a administrar los archivos de registro y evita que se acumulen. Archivará automáticamente el archivo de registro actual, creará uno nuevo vacío y eliminará los archivos verdaderamente antiguos después de que haya rotado varias veces. El tiempo predeterminado puede estar configurado muy alto (nginx tiene un año de registros de forma predeterminada), por lo que puede tener problemas si no edita sus archivos de configuración.
El tamaño de sus archivos variará según el servicio, y querrá configurar logrotate en consecuencia. Si desea saber cuánto espacio ocupa cada servicio con los registros, puede usar el du
mando:
du -h /var/log/ | sort -hr
Casi todos los archivos de registro estarán en /var/log/
, asi que du
totalizará todos los archivos de registro y los mostrará en una buena lista (cortesía de sort -hr
para ‘legible por humanos’):
Esto solo muestra directorios, por lo que deberá utilizar ls -sh
para hallar los tamaños de archivos individuales.
Por lo general, cosas como servidores web (apache2, nginx, etc.) y otras aplicaciones que reciben mucha interacción generarán muchos archivos de registro, aún cuando el tamaño exacto dependerá de la cantidad de datos que estén verdaderamente registrando en el disco.
Instalación de Logrotate (si aún no lo tiene)
De forma predeterminada, probablemente no tendrá que hacer nada para configurar logrotate, puesto que está instalado de forma predeterminada en muchas distribuciones, y los servicios que generan una gran cantidad de archivos de registro (nginx, apache, etc.) de forma general tendrán una configuración de logrotate preconfigurada.
Puede chequear si logrotate está instalado con:
which logrotate
O instálelo desde el administrador de paquetes de su distribución si no es así. Para sistemas basados en Debian como Ubuntu, eso sería:
sudo apt-get install logrotate
Logrotate instalará automáticamente su configuración global predeterminada, pero si la ha instalado después de instalar su servidor web, es factible que deba reinstalar su servidor web si no se genera la configuración predeterminada para ese servicio.
Cómo funciona Logrotate
Aunque logrotate estará preconfigurado para servicios populares como nginx y apache2, es factible que desee configurar la configuración manualmente o editar la configuración predeterminada.
La configuración global para logrotate se almacena en /etc/logrotate.conf
, pero anulará gran parte de ella con archivos de configuración por aplicación, almacenados en el /etc/logrotate.d/
directorio. Echemos un vistazo a la configuración predeterminada de nginx en /etc/logrotate.d/nginx
, que puede utilizar como plantilla para agregar nuevas aplicaciones para logrotate:
/var/log/nginx/*.log { weekly missingok rotate 52 compress delaycompress notifempty create 0640 www-data adm sharedscripts prerotate if [ -d /etc/logrotate.d/httpd-prerotate ]; then run-parts /etc/logrotate.d/httpd-prerotate; fi endscript postrotate invoke-rc.d nginx rotate >/dev/null 2>&1 endscript }
La primera línea inicia el bloque y le dice a logrotate qué archivos debe buscar. El comodín *.log
coincidirá con cualquier archivo que termine con el .log
extensión en la carpeta de registro de nginx. Además puede especificar varios directorios aquí para incluirlos con la misma configuración.
semanalmente rotará los registros una vez a la semana. Si desea rotarlos según el tamaño, puede utilizar size 25M
para rotarlos una vez que alcancen un cierto límite, 25 megabytes en este ejemplo.
faltando evitará que logrotate arroje errores si un archivo de registro es eliminado por cualquier otra cosa que no sea logrotate.
rotar 52 mantendrá 52 archivos de registro diferentes. En esta circunstancia, dado que rotará una vez a la semana, logrotate conservará un año entero de archivos de registro antes de quitar los antiguos. Podrías cambiar esto a rotate 4
para mantener solo un mes de archivos de registro.
comprimir comprimirá los archivos de registro antiguos para ahorrar espacio. Esto causa problemas con algunas aplicaciones que continúan escribiendo en el archivo de registro mientras logrotate aún está haciendo lo suyo, por lo que puede agregar el demoracomprimir para dejar un búfer de un archivo de registro antiguo antes de comprimirlo.
notifempty es otra marca de verificación para asegurarse de que logrotate solo se esté ejecutando si se escriben nuevos archivos de registro. los crear flag crea estos nuevos archivos de registro, con permisos específicos. La sintaxis es create [mode] [owner] [group]
.
Querrá asegurarse de que estos coincidan con lo que sea que estén configurados sus archivos de registro actuales, lo que puede hacer con ls -la
:
Tenga en cuenta que necesitará convertir el modo a octal, asi que -rw-r-----
se convierte en 0640
. El propietario de nginx aquí es www-data
, y el grupo es adm
.
guiones compartidos especifica que el prerrotar y postrotar los ganchos solo se ejecutarán una vez por rotación, y no una vez por cada archivo de registro girado. Estos ganchos son scripts que puede llamar antes y después de la rotación. De forma predeterminada, estos ejecutarán algunos scripts para configurar nginx para que se cambien los archivos de registro. Si el servicio que está configurando no puede cargar en caliente nuevos archivos de registro, querrá detenerlo y reiniciarlo en estos links. A pesar de esto, el gancho no tiene que interactuar con el servicio; a modo de ejemplo, puede usar el gancho de prerotación para haga una copia de seguridad de sus archivos de registro en AWS S3 con s3cmd
antes de que se eliminen.
Logrotate gestionará la ejecución por sí mismo, por lo que no tendrá que preocuparse por iniciar el servicio en el arranque o configurar un cron
trabajo. Simplemente coloque los archivos de configuración para cada aplicación en /etc/logrotate.d/
y nunca más te preocupes por los registros.