Sådan opsættes og styres logrotation ved hjælp af Logrotate i Linux


En af de mest interessante (og måske også en af de vigtigste) mapper i et Linux-system er /var/log . I henhold til filsystemhierarkistandarden skrives aktiviteten for de fleste tjenester, der kører i systemet, til en fil i denne mappe eller en af dens underkataloger.

Sådanne filer kaldes logfiler og er nøglen til at undersøge, hvordan systemet fungerer (og hvordan det har fungeret tidligere). Logfiler er også den første informationskilde, hvor administratorer og ingeniører kigger under fejlfinding.

Hvis vi ser på indholdet af /var/log på en CentOS/RHEL/Fedora og Debian/Ubuntu (for variation) vil vi se følgende logfiler og underkataloger.

Bemærk, at resultatet kan være noget andet i dit tilfælde afhængigt af de tjenester, der kører på dine systemer og den tid, de har kørt.

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

I begge tilfælde kan vi se, at nogle af lognavne slutter som forventet i "log", mens andre enten omdøbes ved hjælp af en dato (for eksempel maillog-20160822 på CentOS) eller komprimeres (overvej auth.log.2.gz og mysql.log.1.gz på Debian).

Dette er ikke en standardadfærd baseret på den valgte distribution, men kan ændres efter ønske ved hjælp af direktiver i konfigurationsfilerne, som vi vil se i denne artikel.

Hvis logfiler blev holdt for evigt, ville de til sidst ende med at udfylde filsystemet, hvor/var/log befinder sig. For at forhindre det kan systemadministratoren bruge et pænt værktøj kaldet logrotate til at rydde op i logfilerne med jævne mellemrum.

Med et par ord omdøber eller komprimerer logrotate hovedloggen, når en betingelse er opfyldt (mere om det på et minut), så den næste begivenhed registreres i en tom fil.

Derudover fjerner det "gamle" logfiler og beholder de nyeste. Selvfølgelig får vi beslutte, hvad "gammelt" betyder, og hvor ofte vi ønsker logrotate for at rydde op på logfiler for os.

Installation af Logrotate i Linux

For at installere logrotate skal du bare bruge din pakkehåndtering:

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

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

Det er værd og godt at bemærke, at konfigurationsfilen ( /etc/logrotate.conf ) kan indikere, at andre, mere specifikke indstillinger kan placeres på individuelle .conf -filer inde /etc/logrotate.d.

Dette vil være tilfældet, hvis og kun hvis følgende linje findes og ikke kommenteres:

include /etc/logrotate.d

Vi vil holde fast ved denne tilgang, da det hjælper os med at holde orden på tingene og bruge Debian-boksen til følgende eksempler.

Konfigurer Logrotate i Linux

Da det er et meget alsidigt værktøj, giver logrotate masser af direktiver, der hjælper os med at konfigurere, hvornår og hvordan logfilerne roteres, og hvad der skal ske lige bagefter.

Lad os indsætte følgende indhold i /etc/logrotate.d/apache2.conf (bemærk, at du sandsynligvis bliver nødt til at oprette filen) og undersøge hver linje for at angive dens formål:

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

Den første linje angiver, at direktiverne inde i blokken gælder for alle logfiler inde i/var/log/apache2:

  • ugentligt betyder, at værktøjet forsøger at rotere logfilerne på en ugentlig basis. Andre mulige værdier er daglige og månedlige.
  • roter 3 angiver, at kun 3 roterede logfiler skal opbevares. Således fjernes den ældste fil ved den fjerde efterfølgende kørsel.
  • størrelse = 10M indstiller minimumsstørrelsen for, at rotation skal finde sted til 10M. Med andre ord roteres hver log ikke, før den når 10 MB.
  • komprimering og forsinkelseskomprimering bruges til at fortælle, at alle roterede logfiler bortset fra den seneste skal komprimeres.

Lad os udføre et tørløb for at se, hvad logrotate ville gøre, hvis det faktisk blev udført nu. Brug indstillingen -d efterfulgt af konfigurationsfilen (du kan faktisk køre logrotate ved at udelade denne mulighed):

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

Resultaterne er vist nedenfor:

I stedet for at komprimere logfilerne kunne vi omdøbe dem efter den dato, hvor de blev roteret. For at gøre dette bruger vi dateext -direktivet. Hvis vores datoformat er andet end standard ååååmdd, kan vi specificere det ved hjælp af dateformat.

Bemærk, at vi endda kan forhindre, at rotation sker, hvis loggen er tom med notifempty. Lad os desuden bede logrotate om at maile den roterede log til systemadministratoren (mail-server, der skal oprettes, hvilket er uden for anvendelsesområdet for denne artikel).

Hvis du vil modtage e-mails om logrotate, kan du konfigurere Postfix-mailserver som vist her: Installer Postfix-mailserver

Denne gang bruger vi /etc/logrotate.d/squid.conf til kun at rotere /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 
}

Som vi kan se på billedet nedenfor behøvede denne log ikke at blive roteret. Når størrelsesbetingelsen er opfyldt (størrelse = 1M), omdøbes loggen dog til access.log-25082020 (hvis loggen blev roteret den 25. august 2020), og hovedloggen (access.log) bliver igen oprettet med adgangstilladelser indstillet til 0644 og med root som ejer og gruppeejer.

Endelig når antallet af logfiler endelig når 6, vil den ældste log blive sendt til [email .

Lad os antage, at du vil køre en brugerdefineret kommando, når rotationen finder sted. For at gøre det skal du placere linjen med en sådan kommando mellem postrotate- og slutskriptdirektiverne.

Lad os for eksempel antage, at vi vil sende en e-mail til root, når nogen af logfilerne inden i/var/log/myservice roteres. Lad os tilføje linjerne i rødt til /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
}

Sidst, men ikke mindst, er det vigtigt at bemærke, at indstillinger, der findes i /etc/logrotate.d/*.conf , tilsidesætter dem i hovedkonfigurationsfilen i tilfælde af konflikter.

Logrotate og Cron

Som standard opretter installationen af logrotate en crontab-fil inde i /etc/cron.daily med navnet logrotate. Som det er tilfældet med de andre crontab-filer i denne mappe, vil den blive udført dagligt fra kl. 6:25, hvis anacron ikke er installeret.

Ellers begynder henrettelsen omkring 7:35. For at bekræfte skal du se efter linjen, der indeholder cron.daily i enten/etc/crontab eller/etc/anacrontab.

Resumé

I et system, der genererer flere logfiler, kan administrationen af sådanne filer i høj grad forenkles ved hjælp af logrotate. Som vi har forklaret i denne artikel, vil den automatisk rotere, komprimere, fjerne og maile logfiler med jævne mellemrum, eller når filen når en given størrelse.

Bare sørg for, at det er indstillet til at køre som et cron-job, og logrotate vil gøre tingene meget lettere for dig. For flere detaljer henvises til mandsiden.

Har du spørgsmål eller forslag til denne artikel? Du er velkommen til at give os besked ved hjælp af nedenstående kommentarformular.