Imagina cómo sería la vida si un servicio crítico se fuera a pique hace minutos, y te llamaran para salvar el día. Intentas reiniciar el servicio, y simplemente no da. No hay mensajes de error, pero lo que es más importante, no hay rastros de lo que estaba haciendo antes de que decidiera morir. Un centenar de causas pasan por tu mente, y te das cuenta de que no hay manera de saber en qué dirección ir. Tal vez podrías reiniciar el servidor por completo. Sólo tal vez.
Este escenario es uno de los muchos en los que el registro puede venir a tu rescate. Por lo general, una pieza de software en ejecución mantiene un registro de las actividades importantes relacionadas con su funcionamiento para la posteridad en un archivo. Cualquier cosa puede guardarse en un archivo de registro, ya que ayuda a los desarrolladores y a los administradores de sistemas a saber lo que ha sucedido con una pieza concreta de software a posteriori. Los archivos de registro también son utilizados por personas orientadas a la seguridad para revisar el acceso a determinados recursos. En el ámbito de las redes o la mensajería, los archivos de registro registran la hora en que se enviaron o recibieron los mensajes para su posterior consulta.
Los archivos de registro, por definición, siguen aumentando de tamaño en función de la frecuencia y la verbosidad con que se actualizan. Para cumplir con su propósito, normalmente se abren en modo apéndice y contienen marcas de tiempo para ayudar a la resolución de problemas y al análisis forense. Sin embargo, esto plantea un problema, ya que el gran tamaño de los archivos hace que trabajar con los archivos de registro sea un proceso engorroso tanto para el sistema como para el revisor humano. Los registros se rotan para mantener los archivos de registro en buen estado. En pocas palabras, se abre un nuevo archivo y se cierra el más antiguo, que se conserva o se elimina según las preferencias del diseño. Esto evita que los registros llenen particiones enteras y que los sistemas se pongan de rodillas en el proceso. Es posible que haya notado la rotación de registros en el trabajo en un sistema cercano. Mira las fechas de los archivos boot.log
.
En este caso, cuando se cumple una condición específica, se renombra el archivo actual añadiendo una fecha para identificarlo y seguirlo, y se abre un nuevo archivo con el nombre original, listo para recibir los mensajes de registro entrantes.
Logging en Linux (rsyslogd)
Como era de esperar, el logging en los sistemas Linux, como el servidor CentOS 7 que estoy utilizando para la ilustración, dependen de un demonio para facilitar el logging. Rsyslogd
es el nombre del viejo y fiable servicio y es de código abierto. En realidad, no es tan antiguo. Es una versión mejorada del demonio original syslog
, y posee la capacidad de procesar y reenviar rápidamente los registros a cualquier lugar de una red IP. Además de syslog
y rsyslog
, existe syslog-ng
, que es otro demonio para manejar los registros. El gestor de registros por defecto depende de la distro que uno elija. Rsyslog
viene por defecto en muchas distros basadas en Red Hat. Ejecute el siguiente comando para verificar su presencia y versión en su sistema:
rsyslogd -v
Como es un demonio, puedes comprobar que está activo empleandosystemd
de la siguiente manera:
systemctl status rsyslogd
systemd
.
Logrotate
Logrotate
es una utilidad de Linux cuya función principal es -espera- rotar los registros. Si no está instalada como parte de la instalación por defecto del sistema operativo, se puede instalar simplemente ejecutando:
yum install logrotate
El archivo binario se puede localizar en /bin/logrotate
.
Al instalar logrotate
, se coloca un nuevo archivo de configuración en el directorio /etc/
para controlar el comportamiento general de la utilidad cuando se ejecuta. Además, se crea una carpeta para los archivos de configuración del complemento específico del servicio para las solicitudes de rotación de registros a medida. Más sobre esto un poco más tarde.
Trabajo cron diario
Un trabajo cron
se ejecuta diariamente que inicia la utilidad. Esto se consigue colocando una llamada a la utilidad en la carpeta estándar cron
para los trabajos diarios. Aunque los detalles de la llamada están fuera del alcance de este artículo, basta con decir que la llamada es sólo un script Bash que ejecuta el binario logrotate
, indicando al sistema qué hacer en caso de error.
Localización estándar de los archivos de registro
Los registros en un sistema Linux pueden colocarse en cualquier lugar que los permisos permitan. Sin embargo, debido a que cambian continuamente de tamaño y contenido, por definición, la Jerarquía del Sistema de Archivos prescribe que se guarden en el directorio /var/log/
.
La captura de pantalla de abajo es un vistazo al contenido de mi directorio /var/log
.
Archivos de configuración y ejemplos
/etc/logrotate.conf
El primer archivo del que hay que tomar nota respecto al funcionamiento de logrotate
es logrotate.conf
. Este archivo de configuración contiene las directivas para la rotación de los archivos de registro por defecto. Si no hay un conjunto específico de directivas, la utilidad actúa de acuerdo con las directivas de este archivo.
A continuación se muestra el contenido del archivo de configuración.
Vayamos a ver algunas de las directivas para tener una idea de la flexibilidad de logrotate. Graciosamente, el autor de la utilidad ha puesto en los comentarios suficientes para obtener un novato en marcha. También puedes ver la página man
para una inmersión más profunda. Las directivas weekly
dateext
compress
create
, y rotate 4
establecen que los archivos de registro deben ser rotados semanalmente, que la fecha de rotación se utilice como sufijo identificador de los archivos rotados, que los archivos rotados se compriman, que se cree un nuevo archivo para recibir los registros entrantes y que no se guarden más de cuatro registros. En otras palabras, el quinto registro más reciente debe ser eliminado. También hay que tener en cuenta que en mi sistema, debido a la presencia del #
antes de la directiva compress
, la compresión está desactivada por defecto.
También hay una directiva para incluir una carpeta concreta: /etc/logrotate.d
. Esta carpeta se utiliza para las solicitudes de rotación de registros específicas del paquete. Los paquetes diseñados para aprovechar logrotate
dejan caer los archivos de configuración en este directorio. Esta modularidad está en consonancia con el espíritu de Linux y mejora la extensibilidad de la utilidad. Los archivos de configuración contienen directivas similares y archivos de registro personalizados cuando es necesario. También puede crear su propio archivo de configuración para manejar cualquier archivo de registro de su elección. Sólo tiene que dar un nombre al archivo, añadir el archivo de registro que se va a procesar y colocarlo en este directorio. Por último, hay directivas para archivos de registro sin paquetes propietarios, como wtmp
y otros archivos de registro del sistema. La página man
está llena de más directivas, y para los usuarios que tengan necesidades de rotación más específicas, les aconsejo encarecidamente que le echen un vistazo.
/etc/logrotate.d
Afortunadamente, he hablado considerablemente sobre el directorio /etc/logrotate.d
, así que sin mucho preámbulo, déjame mostrarte el contenido de este directorio para llevar a casa las ideas compartidas anteriormente.
Y por si acaso, echemos un vistazo al archivo de configuración de Samba.
logrotate.conf
? Antes de echar el telón a esta pieza, vamos a repasar algunas de las directivas de este archivo:
/var/log/samba/*
– El archivo de registro a rotar. En este caso, son todos los archivos de registro del directorio de registros de Samba.
notifempty
– Directiva que indica que el archivo no debe rotarse si está vacío.
olddir /var/log/samba/old
– Ubicación para almacenar los registros antiguos rotados.
missingok
– Evita que logrotate
lance un error si falta el archivo de registro.
copytruncate
– No cerrar el archivo de registro. Haz una copia, que será el archivo rotado y renombrado, y luego trunca el archivo de registro a tamaño cero
¿Puedes adivinar qué hace la directiva sharedscripts
? No hace falta que lo adivines – consulta la página man
.
Resumiendo