Tutoriel Linux

Tester Logrotate voordat de logrotatie de schijf verzadigt

Débutant4 min de lecture

Een toepassing log die ongemerkt groeit, kan /var vullen voordat de service omvalt. Wanneer een Logrotate regel lijkt te zijn ingesteld, is het een goed uitgangspunt om de configuratie te lezen en de effecten op een testbestand te simuleren.

U gaat de daadwerkelijk geladen regels controleren, logrotate -d uitvoeren en dan een rotatie forceren op een testlog met een eigen state-bestand. Het productielog blijft intact gedurende de hele procedure.

Linux server met log, logarchieven en rotatie geïllustreerd
Een Logrotate regel moet worden gesimuleerd voordat het log van een service wordt gearchiveerd.

Lees de configuratie voordat je Logrotate start

Op Debian en Ubuntu bevindt de hoofdconfiguratie zich vaak in /etc/logrotate.conf en laadt de regels die zijn geplaatst in /etc/logrotate.d/. Rocky Linux gebruikt ook deze organisatie in de meeste installaties. Een regel in deze map is niet voldoende: het logpad, de rechten en de geërfde richtlijnen moeten consistent blijven.

sudo sed -n '1,220p' /etc/logrotate.conf
sudo ls -l /etc/logrotate.d/
sudo grep -R --line-number '/var/log/mon-app' /etc/logrotate.conf /etc/logrotate.d 2>/dev/null

Vervang /var/log/mon-app door het pad van de betreffende log. Het resultaat moet naar één leesbare regel wijzen. Als twee regels hetzelfde bestand targeten, corrigeer dan de configuratie voordat je een gedwongen rotatie uitvoert.

  • Het logbestand moet bestaan, of de regel moet missingok bevatten.
  • Het account aangegeven door su gebruiker groep moet de map kunnen lezen en de nieuwe log kunnen aanmaken als create wordt gebruikt.
  • Een olddir richtlijn plaatst de archieven op hetzelfde bestandssysteem, tenzij de regel een geschikte kopieermethode gebruikt.
  • De frequentie daily of weekly activeert geen rotatie bij elke uitvoering. De grootte en het state-bestand dragen ook bij aan de beslissing.

Om een log tijdens deze controle te volgen, is tail -F onder Linux beter geschikt dan tail -f na het vervangen van het bestand. tail -F opent het pad opnieuw wanneer Logrotate een nieuwe log aanmaakt.

Maak een laboratoriumlogboek aan

Forceer geen regel die een actieve service aanraakt om het gedrag te ontdekken. Ik zou /var/tmp voor deze test kiezen: het bestand blijft buiten de toepassingslogs en je kunt de map na de controle verwijderen.

sudo install -d -m 0755 /var/tmp/logrotate-lab
sudo sh -c 'printf "%sn" "testregel" > /var/tmp/logrotate-lab/application.log'
sudo tee /var/tmp/logrotate-lab.conf >/dev/null <<'EOF'
/var/tmp/logrotate-lab/application.log {
    size 1
    rotate 2
    compress
    missingok
    notifempty
    create 0640 root root
}
EOF

De richtlijn size 1 maakt de test reproduceerbaar met een zeer kort bestand. rotate 2 houdt twee archieven maximaal. Het state-bestand dat vervolgens wordt gebruikt, is gescheiden van /var/lib/logrotate/status, dus dit laboratorium wijzigt de geschiedenis van de machine niet.

Simuleer de rotatie en lees het resultaat

De modus -d toont de beslissingen van Logrotate zonder het log te wijzigen of het state-bestand te schrijven. Dit is de opdracht om na elke wijziging van de regel uit te voeren.

sudo logrotate -d -s /var/tmp/logrotate-lab/status /var/tmp/logrotate-lab.conf

U moet het bestand application.log in de output zien en een rotatiebeslissing gerelateerd aan de grootte. Een fout van rechten, syntax of pad verschijnt hier zonder de gegevens aan te tasten. logrotate -d bewijst niet dat een archief is aangemaakt, aangezien deze modus geen schrijfacties uitvoert.

Na een schone simulatie, forceer alleen de laboratoriumregel met -v om elke operatie te tonen.

sudo logrotate -vf -s /var/tmp/logrotate-lab/status /var/tmp/logrotate-lab.conf
sudo ls -lh /var/tmp/logrotate-lab/
sudo stat -c '%n %U:%G %a %s bytes' /var/tmp/logrotate-lab/application.log

De opdracht moet een nieuw application.log leeg achterlaten met rechten 0640, evenals een gecomprimeerd archief met een suffix zoals .1.gz. Als het nieuwe bestand niet de verwachte eigenaar heeft, controleer dan create en su voordat je de regel op een service toepast.

Test de service regel zonder te forceren

Wanneer het laboratorium succesvol is, behoud dan de debugmodus voor de echte regel. Een gerichte opdracht voorkomt dat je de hele map analyseert en toont het state-bestand dat door de normale rotatie wordt gebruikt.

sudo logrotate -d -v /etc/logrotate.d/mon-app
sudo journalctl -u logrotate.service -b --no-pager

Afhankelijk van de distributie wordt Logrotate geactiveerd door logrotate.timer, cron of anacron. Het log van de service bevestigt dat de taak is gestart, maar de debugoutput blijft het nuttige bewijs voor een specifieke regel. De gids journalctl onder Linux helpt om de huidige opstart te herlezen als de eenheid een fout meldt.

Gebruik -f niet op een productie log voor een snelle demonstratie. Een voortijdige rotatie kan een verzamelaar breken, een bestand verplaatsen dat door een toepassing wordt verwacht of nuttige geschiedenis voor een onderzoek verwijderen. Ruim na de test het laboratorium op met sudo rm -rf /var/tmp/logrotate-lab /var/tmp/logrotate-lab.conf.

De man-pagina logrotate(8) beschrijft de beschikbare richtlijnen en hun volgorde van prioriteit. Voordat u een rotatie in productie wijzigt, houdt u een beperkte regel aan, een herkenbaar state-bestand en een leesbare simulatie.