SafeChildren Banner

Havoc Oracle Solaris Experts

jueves, 6 de mayo de 2010

Cómo rotar archivos de log con LogAdm en Solaris 10

Introducción
Solaris tiene una utilidad llamada <logadm> que se encarga de rotar los archivos de log que nosotros tengamos configurados en el archivo </etc/logadm.conf>

Aunque inicialmente podemos realizar las configuraciones sobre el mismo archivo no es recomendable y deberemos utilizar el comando <logadm> para gestionar las entradas.

El formato del comando <logadm> es el siguiente:
logadm [-options] logname...
Y en opciones tenemos -principalmente- las siguientes
  • -a command. Ejecuta el comando <command> después de realizar la rotación. Esta opción es muy útil, por ejemplo para llamar a $APACHE_HOME/bin/apachectl graceful
  • -c. Ejecuta la rotación mediante un <copy> y luego trunca el original. Esto nos permite que si tenemos un proceso con descriptores abiertos al log, no perderá las referencias ya que el archivo no es eliminado
  • -C count. Mantiene sólo un número de copias <count> de log, cuando llega a ese número, comienza a sobreescribir de forma cíclica
  • -e mail_address. Envía un correo con los errores a la dirección de correo <mail_address>
  • -p period. Rota después de un periodo de tiempo <period>. Podemos definir el periodo utilizando d para días, h para horas, w para semanas, m para meses e y para años. Por ejemplo, si queremos que rote cada 12h, deberemos utilizar <-p 12h>. Existe una opción especial llamada <now> que rota siempre el archivo de log.
  • -s size. Rota cuando el archivo es superior al tamaño definido en <size>. Pdemos definir el tamaño utilizando b para bytes, k para Kb, m para Mb y G para Gb
  • -w. Escribe la entrada en el fichero de configuración
  • -v. Escribe pos stdout lo que está procesando el comando
  • -z count. Comprime los archivos rotados dejando <count> sin comprimir, es decir, si ponemos count con valor 0, todos los archivos rotados estarán comprimidos.
Por defecto, durante la instalación de Solaris, se crea una entrada en el Crontab de root que llama a <logadm> todos los días a las 03:10h. Si quieres más información puedes ver el post sobre Cómo Editar y Gestionar el Crontab en Solaris

# crontab -l
  #ident  "@(#)root       1.21    04/03/23 SMI"
  #
  # The root crontab should be used to perform accounting data collection.
  #
  #
  10 3 * * * /usr/sbin/logadm
Esta entrada podemos editarla y ponerla a nuestro antojo para tener la rotación, por ejemplo, a las 00:00h y así tener logs diarios.

Además -y ya concluye la teoría- si no utilizamos ninguna regla de rotación Solaris utilizará <-s1b -p1w> por defecto, es decir, rotar si es mayor de 1 byte y una semana
 
Rotar Logs de Apache utilizando <logadm>
Vamos a rotar los logs de Apache HTTP, queremos que rote diariamente, guarde 7 copias y que comprima las 6 últimas. Vamos a asumir que nuestro $APACHE_HOME=/opt/www/apache-1.3.41
# logadm -w /opt/www/apache-1.3.41/logs/www.sfchildren.com-error_log -C 7 -p 1d -z 1 -a '/opt/www/apache-1.3.41/bin/apachectl graceful'
# tail -1 /etc/logadm.conf
/opt/www/apache-1.3.41/logs/www.sfchildren.com-error_log -C 7 -a '/opt/www/apache-1.3.41/bin/apachectl graceful' -p 1d -z 1

Rotar Log de PostgreSQL con <copy and truncate>
# logadm -w /var/log/postgres/server.log -C 5 -c -p 1d -z 0
# tail -1 /etc/logadm.conf
/var/log/postgres/server.log -C 5 -c -p 1d -z 0
Si ejecutamos el comando <logadm> con la opción <-v> -para ver que procesa-, y comprobamos que al utilizar la opción <-c> ha hecho un <cp y truncate>

# logadm -v
   # cargando /etc/logadm.conf
   # procesando nombre de registro: /var/log/postgres/server.log
   #     usando plantilla predeterminada: $archivo.$n
   mkdir -p /var/log/postgres # verify directory exists
   cp -fp /var/log/postgres/server.log /var/log/postgres/server.log.0 # rotate log file via copy (-c flag)
   cp -f /dev/null /var/log/postgres/server.log # truncate log file (-c flag)
   touch /var/log/postgres/server.log
   chown 101:90 /var/log/postgres/server.log
   chmod 600 /var/log/postgres/server.log
   #     registrando fecha de rotación Thu May  6 07:54:49 2010 para /var/log/postgres/server.log
   # escribiendo cambios en /etc/logadm.conf
# ls -l /var/log/postgres/server.log*
-rw-------   1 postgres postgres       0 may  6 09:54 /var/log/postgres/server.log
-rw-------   1 postgres postgres 10160774 may  6 09:24 /var/log/postgres/server.log.0

Conclusión
El comando <logadm> nos permite gestionar de forma sencilla la rotación de logs de nuestro Solaris, además tiene un sistema de gestión sencillo e intuitivo

Referencias

No hay comentarios:

Publicar un comentario en la entrada