Zoeken op website

Logrotatie instellen en beheren met Logrotate in Linux


Eén van de meest interessante (en misschien ook wel één van de belangrijkste) mappen in een Linux-systeem is /var/log. Volgens de Filesystem Hierarchy Standard worden de activiteiten van de meeste services die op het systeem worden uitgevoerd, geschreven naar een bestand in deze map of een van de submappen ervan.

Dergelijke bestanden staan bekend als logboeken en zijn de sleutel tot het onderzoeken van hoe het systeem werkt (en hoe het zich in het verleden heeft gedragen). Logboeken zijn ook de eerste informatiebron waar beheerders en technici naar kijken tijdens het oplossen van problemen.

Als we naar de inhoud van /var/log kijken op een CentOS/RHEL/Fedora en Debian/Ubuntu (voor variatie) zullen we zien de volgende logbestanden en submappen.

Houd er rekening mee dat het resultaat in uw geval enigszins kan verschillen, afhankelijk van de services die op uw systeem(en) draaien en de tijd dat ze actief zijn.

In RHEL/CentOS en Fedora

ls /var/log

In Debian en Ubuntu

ls /var/log

In beide gevallen kunnen we waarnemen dat sommige lognamen zoals verwacht eindigen op “log ”, terwijl andere een nieuwe naam krijgen met een datum (bijvoorbeeld maillog-20160822 op CentOS) of gecomprimeerd (denk aan auth.log.2.gz en mysql.log.1.gz op Debian sterk>).

Dit is geen standaardgedrag op basis van de gekozen distributie, maar kan naar believen worden gewijzigd met behulp van richtlijnen in de configuratiebestanden, zoals we in dit artikel zullen zien.

Als logs voor altijd zouden worden bewaard, zouden ze uiteindelijk het bestandssysteem vullen waar /var/log zich bevindt. Om dat te voorkomen kan de systeembeheerder een handig hulpprogramma genaamd logrotate gebruiken om de logbestanden periodiek op te schonen.

In een paar woorden: logrotate zal het hoofdlog hernoemen of comprimeren wanneer aan een voorwaarde wordt voldaan (meer daarover in een minuut), zodat de volgende gebeurtenis in een leeg bestand wordt vastgelegd.

Bovendien worden “oude” logbestanden verwijderd en worden de meest recente bewaard. Natuurlijk mogen we beslissen wat “oud” betekent en hoe vaak we willen dat logrotate de logs voor ons opschoont.

Logrotate installeren onder Linux

Om logrotate te installeren, gebruikt u gewoon uw pakketbeheerder:

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

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

Het is de moeite waard om op te merken dat het configuratiebestand (/etc/logrotate.conf) kan aangeven dat andere, meer specifieke instellingen kunnen worden geplaatst op individuele .conf bestanden binnenin /etc/logrotate.d.

Dit zal het geval zijn als en alleen als de volgende regel bestaat en niet is becommentarieerd:

include /etc/logrotate.d

We zullen bij deze aanpak blijven, omdat dit ons zal helpen de zaken op orde te houden, en we zullen het Debian-vak gebruiken voor de volgende voorbeelden.

Configureer Logrotate in Linux

Omdat het een zeer veelzijdige tool is, biedt logrotate tal van richtlijnen om ons te helpen configureren wanneer en hoe de logs zullen worden geroteerd, en wat er direct daarna moet gebeuren.

Laten we de volgende inhoud invoegen in /etc/logrotate.d/apache2.conf (merk op dat u dat bestand hoogstwaarschijnlijk zult moeten maken) en elke regel onderzoeken om het doel ervan aan te geven:

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

De eerste regel geeft aan dat de richtlijnen binnen het blok van toepassing zijn op alle logs binnen /var/log/apache2:

  • wekelijks betekent dat de tool probeert de logboeken wekelijks te rouleren. Andere mogelijke waarden zijn dagelijks en maandelijks.
  • roteren 3 geeft aan dat er slechts 3 geroteerde logs moeten worden bewaard. Het oudste bestand wordt dus bij de vierde volgende run verwijderd.
  • size=10M stelt de minimale grootte voor de rotatie in op 10M. Met andere woorden: elk logboek wordt pas geroteerd als het 10 MB heeft bereikt.
  • compress en delaycompress worden gebruikt om aan te geven dat alle geroteerde logs, met uitzondering van de meest recente, moeten worden gecomprimeerd.

Laten we een proefrun uitvoeren om te zien wat logrotate zou doen als het nu daadwerkelijk zou worden uitgevoerd. Gebruik de -d optie gevolgd door het configuratiebestand (je kunt logrotate daadwerkelijk uitvoeren door deze optie weg te laten):

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

De resultaten worden hieronder weergegeven:

In plaats van de logboeken te comprimeren, zouden we ze kunnen hernoemen naar de datum waarop ze werden gerouleerd. Om dat te doen, zullen we de datetext richtlijn gebruiken. Als ons datumformaat anders is dan de standaard jjjjmmdd, kunnen we dit specificeren met datumformaat.

Houd er rekening mee dat we de rotatie zelfs kunnen voorkomen als het logboek leeg is met notifempty. Laten we bovendien logrotate vertellen om het geroteerde log naar de systeembeheerder ([email  in dit geval) te mailen ter referentie (hiervoor moet een mailserver worden ingesteld, namelijk valt buiten het bestek van dit artikel).

Als u e-mails over logrotate wilt ontvangen, kunt u de Postfix-mailserver instellen zoals hier weergegeven: Installeer Postfix Mail Server

Deze keer gebruiken we /etc/logrotate.d/squid.conf om alleen /var/log/squid/access.log te roteren:

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

Zoals we in de onderstaande afbeelding kunnen zien, hoefde dit logboek niet te worden geroteerd. Wanneer echter aan de groottevoorwaarde (size=1M) wordt voldaan, wordt het geroteerde logboek hernoemd naar access.log-25082020 (als het logboek op augustus is gerouleerd 25 januari 2020) en het hoofdlogboek (access.log) wordt opnieuw gemaakt met de toegangsrechten ingesteld op 0644 en met root sterk> als eigenaar en groepseigenaar.

Wanneer het aantal logbestanden uiteindelijk 6 bereikt, wordt het oudste logbestand verzonden naar [email .

Stel nu dat u een aangepaste opdracht wilt uitvoeren wanneer de rotatie plaatsvindt. Om dat te doen, plaatst u de regel met een dergelijk commando tussen de postrotate- en endscript-richtlijnen.

Laten we bijvoorbeeld aannemen dat we een e-mail naar root willen sturen wanneer een van de logbestanden in /var/log/myservice wordt gerouleerd. Laten we de rode regels toevoegen aan /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
}

Als laatste, maar daarom niet minder belangrijk, is het belangrijk op te merken dat de opties in /etc/logrotate.d/*.conf die in het hoofdconfiguratiebestand overschrijven in geval van conflicten.

Logroteren en Cron

Standaard wordt bij de installatie van logrotate een crontab-bestand aangemaakt binnen /etc/cron.daily met de naam logrotate. Zoals het geval is met de andere crontab-bestanden in deze map, zal het dagelijks worden uitgevoerd vanaf 6:25 uur als anacron niet is geïnstalleerd.

Anders begint de executie rond 07:35 uur. Om dit te verifiëren, let op de regel met cron.daily in /etc/crontab of /etc/anacrontab.

Samenvatting

In een systeem dat meerdere logbestanden genereert, kan het beheer van dergelijke bestanden aanzienlijk worden vereenvoudigd met behulp van logrotate. Zoals we in dit artikel hebben uitgelegd, worden de logboeken periodiek automatisch geroteerd, gecomprimeerd, verwijderd en verzonden, of wanneer het bestand een bepaalde grootte bereikt.

Zorg er wel voor dat het is ingesteld om als cronjob te worden uitgevoerd, en logrotate zal het allemaal veel gemakkelijker voor u maken. Raadpleeg de manpagina voor meer details.

Heeft u vragen of suggesties over dit artikel? Laat het ons gerust weten via het onderstaande reactieformulier.