Com configurar i gestionar la rotació del registre mitjançant Logrotate a Linux


Un dels directoris més interessants (i potser també un dels més importants) d'un sistema Linux és /var/log. Segons l'estàndard de jerarquia del sistema de fitxers, l'activitat de la majoria de serveis que s'executen al sistema s'escriu en un fitxer dins d'aquest directori o d'un dels seus subdirectoris.

Aquests fitxers es coneixen com a registres i són la clau per examinar com funciona el sistema (i com s'ha comportat en el passat). Els registres també són la primera font d'informació on els administradors i els enginyers miren mentre resolen problemes.

Si mirem el contingut de /var/log en un CentOS/RHEL/Fedora i Debian/Ubuntu (per a la varietat) veurem els següents fitxers de registre i subdirectoris.

Tingueu en compte que el resultat pot ser una mica diferent en el vostre cas, depenent dels serveis que s'executen als vostres sistemes i del temps que s'han executat.

# ls /var/log
# ls /var/log

En ambdós casos, podem observar que alguns dels noms de registre acaben com s'esperava a \log, mentre que d'altres es canvien de nom amb una data (per exemple, maillog-20160822 a CentOS) o es comprimeixen (considereu auth.log.2. gz i mysql.log.1.gz a Debian).

Aquest no és un comportament predeterminat basat en la distribució escollida, però es pot canviar a voluntat mitjançant les directives dels fitxers de configuració, com veurem en aquest article.

Si els registres es mantinguessin per sempre, acabarien omplint el sistema de fitxers on resideix /var/log. Per evitar-ho, l'administrador del sistema pot utilitzar una bona utilitat anomenada logrotate per netejar els registres periòdicament.

En poques paraules, logrotate canviarà el nom o comprimirà el registre principal quan es compleixi una condició (més sobre això en un minut) de manera que el següent esdeveniment es registri en un fitxer buit.

A més, eliminarà els fitxers de registre \vells i conservarà els més recents. Per descomptat, decidirem què significa \vells i amb quina freqüència volem que logrotate netegi els registres per nosaltres.

Instal·lació de Logrotate a Linux

Per instal·lar logrotate, només cal que utilitzeu el vostre gestor de paquets:

---------- On Debian and Ubuntu ---------- 
# aptitude update && aptitude install logrotate 

---------- On CentOS, RHEL and Fedora ---------- 
# yum update && yum install logrotate

Val la pena tenir en compte que el fitxer de configuració (/etc/logrotate.conf) pot indicar que es poden col·locar altres configuracions més específiques en fitxers .conf individuals. /etc/logrotate.d.

Aquest serà el cas si i només si la línia següent existeix i no està comentada:

include /etc/logrotate.d

Seguirem amb aquest enfocament, ja que ens ajudarà a mantenir les coses en ordre, i utilitzarem la caixa de Debian per als exemples següents.

Configura Logrotate a Linux

Com que és una eina molt versàtil, logrotate ofereix moltes directives per ajudar-nos a configurar quan i com es giraran els registres, i què hauria de passar després.

Inseriu el següent contingut a /etc/logrotate.d/apache2.conf (tingueu en compte que probablement haureu de crear aquest fitxer) i examinem cada línia per indicar-ne la finalitat:

/var/log/apache2/* {
    weekly
    rotate 3
    size 10M
    compress
    delaycompress
}

La primera línia indica que les directives dins del bloc s'apliquen a tots els registres dins de /var/log/apache2:

  • setmanalment significa que l'eina intentarà girar els registres setmanalment. Altres valors possibles són diaris i mensuals.
  • rotar 3 indica que només s'han de conservar 3 registres girats. Així, el fitxer més antic s'eliminarà a la quarta execució posterior.
  • size=10M estableix la mida mínima perquè es faci la rotació a 10M. En altres paraules, cada registre no es girarà fins que no arribi als 10 MB.
  • compress i delaycompress s'utilitzen per indicar que tots els registres girats, a excepció del més recent, s'han de comprimir.

Executem una execució en sec per veure què faria logrotate si realment s'executés ara. Utilitzeu l'opció -d seguida del fitxer de configuració (de fet, podeu executar logrotate ometent aquesta opció):

# logrotate -d /etc/logrotate.d/apache2.conf

Els resultats es mostren a continuació:

En lloc de comprimir els registres, podríem canviar-los el nom després de la data en què es van girar. Per fer-ho, utilitzarem la directiva dateext. Si el nostre format de data no és el predeterminat aaaammdd, podem especificar-lo mitjançant dataformat.

Tingueu en compte que fins i tot podem evitar que es produeixi la rotació si el registre està buit amb notificació buida. A més, diguem a logrotate que enviï el registre girat per correu electrònic a l'administrador del sistema (el servidor de correu s'ha de configurar, que està fora de l'abast d'aquest article).

Si voleu rebre correus electrònics sobre logrotate, podeu configurar el servidor de correu Postfix tal com es mostra aquí: Instal·leu el servidor de correu Postfix

Aquesta vegada utilitzarem /etc/logrotate.d/squid.conf només per girar /var/log/squid/access.log:

/var/log/squid/access.log {
    monthly
    create 0644 root root
    rotate 5
    size=1M
    dateext
    dateformat -%d%m%Y
    notifempty
    mail [email 
}

Com podem veure a la imatge següent, no calia girar aquest registre. Tanmateix, quan es compleix la condició de mida (mida=1M), el registre girat es canviarà de nom access.log-25082020 (si el registre es va girar el 25 d'agost de 2020) i el registre principal (access.log) es tornarà a fer. creat amb permisos d'accés establerts a 0644 i amb root com a propietari i propietari del grup.

Finalment, quan el nombre de registres finalment arribi a 6, el registre més antic s'enviarà per correu a [email .

Ara suposem que voleu executar una ordre personalitzada quan es produeixi la rotació. Per fer-ho, col·loqueu la línia amb aquesta ordre entre les directives postrotate i endscript.

Per exemple, suposem que volem enviar un correu electrònic a root quan es gira qualsevol dels registres de /var/log/myservice. Afegim les línies en vermell a /etc/logrotate.d/squid.conf:

/var/log/myservice/* {
	monthly
	create 0644 root root
	rotate 5
	size=1M
    	postrotate
   		echo "A rotation just took place." | mail root
    	endscript
}

Finalment, però no menys important, és important tenir en compte que les opcions presents a /etc/logrotate.d/*.conf substitueixen les del fitxer de configuració principal en cas de conflictes.

Logrotate i Cron

Per defecte, la instal·lació de logrotate crea un fitxer crontab dins de /etc/cron.daily anomenat logrotate. Com passa amb els altres fitxers crontab dins d'aquest directori, s'executarà diàriament a partir de les 6:25 a.m. si no està instal·lat anacron.

En cas contrari, l'execució començarà cap a les 7.35 hores. Per verificar, observeu la línia que conté cron.daily a /etc/crontab o a /etc/anacrontab.

Resum

En un sistema que genera diversos registres, l'administració d'aquests fitxers es pot simplificar molt mitjançant logrotate. Com hem explicat en aquest article, girarà, comprimirà, eliminarà i enviarà els registres automàticament periòdicament o quan el fitxer assoleixi una mida determinada.

Només assegureu-vos que estigui configurat per executar-se com a treball cron i logrotate us facilitarà molt les coses. Per obtenir més detalls, consulteu la pàgina de manual.

Tens alguna pregunta o suggeriment sobre aquest article? No dubteu a fer-nos-ho saber mitjançant el formulari de comentaris a continuació.