Een van de interessantste (en misschien ook wel een van de belangrijkste) mappen in een Linux-systeem is /var/log. Volgens de Filesystem Hierarchy Standard wordt de activiteit van de meeste services die op het systeem draaien, weggeschreven naar een bestand in deze directory of een van zijn subdirectories.

Zulke bestanden staan bekend als logs en zijn de sleutel tot het onderzoeken van hoe het systeem werkt (en hoe het zich in het verleden heeft gedragen). Logs zijn ook de eerste bron van informatie waar beheerders en technici naar kijken tijdens het oplossen van problemen.

Als we kijken naar de inhoud van /var/log op een CentOS/RHEL/Fedora en Debian/Ubuntu (ter afwisseling), dan zien we de volgende logbestanden en subdirectories.

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

In RHEL/CentOS en Fedora

# ls /var/log
Log Files and mappen onder CentOS 7
Logbestanden en mappen onder CentOS 7

In Debian en Ubuntu

# ls /var/log
Log Files and Directories in Debian 8
Log Files and Directories in Debian 8

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

Dit is geen standaard gedrag gebaseerd op de gekozen distributie, maar kan naar believen worden veranderd 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 programma genaamd logrotate gebruiken om de logs periodiek op te schonen.

In een paar woorden, logrotate hernoemt of comprimeert het hoofdlog als aan een voorwaarde is voldaan (meer daarover in een minuut), zodat de volgende gebeurtenis in een leeg bestand wordt vastgelegd.

Daarnaast verwijdert het “oude” logbestanden en bewaart de meest recente. Natuurlijk mogen we zelf bepalen wat “oud” betekent en hoe vaak we willen dat logrotate de logs voor ons opruimt.

Installeren van logrotate in Linux

Om logrotate te installeren, gebruik je gewoon je package manager:

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

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

Lees Suggesties: Systeemlogs beheren (Configureren, Roteren en Importeren in Database) met Logrotate

Dit is alleen het geval als de volgende regel bestaat en niet is uitgecommentarieerd:

include /etc/logrotate.d

We houden het bij deze aanpak, omdat het ons helpt de zaken op orde te houden, en gebruiken de Debian box voor de volgende voorbeelden.

Configureer Logrotate in Linux

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

Laten we de volgende inhoud in /etc/logrotate.d/apache2.conf zetten (merk op dat je dat bestand waarschijnlijk zelf moet maken) en elke regel bekijken om het doel ervan aan te geven:

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

De eerste regel geeft aan dat de richtlijnen in het blok gelden voor alle logs in /var/log/apache2:

  • weekly betekent dat het programma zal proberen de logs wekelijks te roteren. Andere mogelijke waarden zijn dagelijks en maandelijks.
  • rotate 3 geeft aan dat slechts 3 geroteerde logs moeten worden bewaard. Het oudste bestand wordt dus verwijderd bij de vierde volgende run.
  • size=10M stelt de minimumgrootte voor de rotatie in op 10M. Met andere woorden, elk log wordt pas geroteerd als het 10MB is.
  • 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 dry-run uitvoeren om te zien wat logrotate zou doen als het nu echt 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 zie je hieronder:

Rotate Apache Logs with Logrotate
Rotate Apache Logs with Logrotate

In plaats van de logs te comprimeren, zouden we ze kunnen hernoemen naar de datum waarop ze zijn geroteerd. Om dat te doen, gebruiken we de dateext directive. Als onze datumnotatie anders is dan de standaard jjjjmmdd, kunnen we die specificeren met dateformat.

Suggested Read: Installeer ‘atop’ om de logging activiteit van Linux systeem processen te monitoren

Noteer dat we zelfs kunnen voorkomen dat de rotatie plaatsvindt als het log leeg is met notifempty. Bovendien, laten we logrotate vertellen om de geroteerde log naar de systeembeheerder te mailen ([email protected] in dit geval) voor zijn/haar referentie (hiervoor moet een mail server worden opgezet, wat buiten het bereik van dit artikel valt).

Als je emails over logrotate wilt ontvangen, kun je Postfix mail server opzetten zoals hier wordt getoond: Installeer Postfix Mail Server

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

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

Zoals we in de afbeelding hieronder kunnen zien, hoefde dit log niet geroteerd te worden. Echter, als aan de grootte voorwaarde is voldaan (size=1M), zal het geroteerde log worden hernoemd access.log-25082020 (als het log was geroteerd op 25 augustus 2020) en het hoofdlog (access.log) zal opnieuw worden aangemaakt met toegangsrechten ingesteld op 0644 en met root als eigenaar en groepseigenaar.

Eindelijk, wanneer het aantal logs 6 heeft bereikt, wordt het oudste log gemaild naar [email protected].

Roteer Squid-logs met Logrotate
Roteer Squid-logs met Logrotate

Nu stel je voor dat je een aangepaste opdracht wilt uitvoeren wanneer de rotatie plaatsvindt. Om dat te doen, plaats je de regel met zo’n commando tussen de postrotate- en endscript-richtlijnen.

Voorbeeld: stel dat we een e-mail naar root willen sturen wanneer een van de logs in /var/log/myservice wordt geroteerd. Laten we de regels in het rood toevoegen aan /etc/logrotate.d/squid.conf:

squid.conf
/var/log/myservice/* {monthlycreate 0644 root rootrotate 5size=1M postrotate echo "A rotation just took place." | mail root endscript}

Ten slotte is het belangrijk op te merken dat opties in /etc/logrotate.d/*.conf in geval van conflicten voorrang hebben op die in het hoofdconfiguratiebestand.

Logrotate en Cron

De installatie van logrotate maakt standaard een crontab bestand aan in /etc/cron.daily met de naam logrotate. Zoals het geval is met de andere crontab bestanden in deze directory, zal het dagelijks worden uitgevoerd vanaf 6:25 uur als anacron niet is geinstalleerd.

Suggested Read: 11 Cron Scheduling Task Examples in Linux

In het andere geval, zal de uitvoering beginnen rond 7:35 uur. Let ter controle op de regel met cron.daily in /etc/crontab of /etc/anacrontab.

Samenvatting

In een systeem dat meerdere logs genereert, kan het beheer van zulke bestanden sterk vereenvoudigd worden met logrotate. Zoals we in dit artikel hebben uitgelegd, zal het automatisch logs roteren, comprimeren, verwijderen en mailen op periodieke basis of wanneer het bestand een bepaalde grootte heeft bereikt.

Zorg er gewoon voor dat het is ingesteld om als een cron job te draaien en logrotate zal de dingen veel gemakkelijker voor je maken. Voor meer details, raadpleeg de man page.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *