Een VPN-gezondheidscontrole die elke minuut één regel toevoegt, schept stil een tweede plicht: beslissen hoe die regels de schijf verlaten. Het repareren van de tunnel doet niets voor die plicht, en het hernoemen van het bestand leidt een proces dat nog de oude descriptor vasthoudt niet om. Beantwoord eerst de vraag naar de bestemming en laat de rotatie dan passen bij de manier waarop de schrijver het opent.

Kies de bestemming vóór het rotatiebeleid

Een systemd-unit die zijn uitvoer al naar het journaal stuurt, houdt de bewaring op één plek. journald dwingt limieten af zoals SystemMaxUse en MaxRetentionSec , dus een watchdog die daar logt, erft een grens zonder extra werk. Een tweede onbegrensd bestand ernaast zetten verdubbelt het onderhoud zonder winst.

Een toegewijd bestand verdient zijn plek wanneer iets anders het leest: een parser, een auditexport of een pagina die een stabiel pad verwacht. Zodra die beslissing is genomen, heeft het bestand een eigenaar, een modus en een rotatiebeleid nodig die samen worden opgeschreven, want de drie zijn alleen als geheel correct. Een pad dat iedereen kan aanmaken is ook een pad dat iedereen kan vervangen, dus de maprechten horen in dezelfde notitie. Schrijf dat alles naast de controle en de volgende wijziging begint bij dezelfde feiten.

Schrijf het blok passend bij de schrijver

Begin bij een schrijver die het pad bij elke aanroep opent, een regel toevoegt en afsluit. Dat patroon overleeft rotatie zonder enige medewerking van het proces, omdat de volgende run het bestand opent dat nu op dat pad staat. Het blok hieronder bewaart een week aan versies en maakt het bestand opnieuw aan met de eigenaar en modus die de schrijver nodig heeft:

/var/log/vpn-watchdog.log {
    daily
    rotate 7
    create 0600 root root
    missingok
    notifempty
}

De logrotate-handleiding definieert het aantal als het aantal bewaarde geroteerde versies, niet als een garantie van zeven dagen geschiedenis, en het sleutelwoord daily wordt geëvalueerd wanneer de taak draait in plaats van als zijn eigen planner te werken. Op de meeste distributies bezit een systemd-timer of een cron-regel die aanroep al, dus controleer welke bestaat voordat je een tweede toevoegt. De eigendom laten kloppen is belangrijker dan het bewaaraantal. Een modus die alleen voor root is op een bestand kopiëren dat door een serviceaccount wordt geschreven, stopt de logging bij de volgende rotatie, en de fout verschijnt uren later als een verouderde tijdstempel in plaats van als een fout. Bevestig de gebruiker van de schrijver voordat je een blok ergens anders vandaan kopieert.

Een schrijver die nooit heropent, vraagt een andere oplossing

Een langlopend proces dat een open descriptor vasthoudt, blijft naar de hernoemde inode schrijven. Ruimte wordt niet vrijgemaakt en het zichtbare bestand stopt met groeien, wat op een kapotte rotatie lijkt tot je de inode controleert. Leer het proces heropenen, of laat de rotatie kopiëren en afkappen in plaats van hernoemen.

Het heropenpad is het schoonst waar de software het ondersteunt: stuur het gedocumenteerde signaal of voer het gedocumenteerde commando uit, en laat het proces het nieuwe bestand zelf openen. Het alternatief is copytruncate , dat de inhoud naar de geroteerde naam kopieert en daarna het origineel ter plekke afkapt, zodat de descriptor geldig blijft maar schrijfacties tussen de kopie en het afkappen verloren gaan.

Voor units die door systemd worden gestart, richt StandardOutput op het journaal of op een bestand en laat de unit de levenscyclus bezitten. Een shell-lus die via tee -a toevoegt zonder groottelimiet is de opzet die een partitie tijdens een storing vult, omdat een mislukte controle vaak veel meer logt dan een gezonde.

Test de rotatie zonder op de timer te wachten

Foutopsporingsmodus meldt wat er zou gebeuren en raakt niets aan, wat het de veilige eerste run na een wijziging maakt. Forceer een echte rotatie wanneer je tevreden bent en bevestig dan dat de volgende logregel in het nieuwe bestand belandt en niet in het hernoemde:

logrotate -d /etc/logrotate.d/vpn-watchdog
logrotate -f /etc/logrotate.d/vpn-watchdog
ls -l /var/log/vpn-watchdog.log*
tail -n 3 /var/log/vpn-watchdog.log
df -h /var/log

Lees de uitvoer in die volgorde. De foutopsporingsronde zou het bestand en de bedoelde acties moeten noemen; een geforceerde run zou de verwachte geroteerde naam moeten opleveren; de tail zou een nieuwe regel moeten tonen nadat de schrijver opnieuw draait. Een groeiende df-waarde met een krimpende zichtbare bestand betekent het hierboven beschreven descriptorprobleem.

Herhaal de geforceerde run twee keer om te zien hoe de bewaring zich gedraagt wanneer er al versies bestaan. Het oudste bestand verwijderen is het verwachte resultaat, en een ontbrekende verwijdering betekent meestal dat het aantal of het jokerteken in de geroteerde naam niet overeenkomt met wat logrotate heeft aangemaakt.

Bewaar een terugrol en een schriftelijk verslag

Bewaar de vorige blok voordat je wijzigt, en noteer welke planner hem draait, want een terugdraaiing die het bestand maar niet de timer herstelt, reproduceert de helft van het oorspronkelijke probleem. Roteer na het herstel één keer met de hand en bevestig dan dat het account van de schrijver naar het logpad kan schrijven. Als de dienst onder systemd draait, herlaad de unit na elke wijziging in de omleiding van zijn uitvoer, omdat het draaiende proces naar het oude doel blijft schrijven. Lees de volgende paar logregels zelf in plaats van te vertrouwen op een schone terugkeer van de unit.

Noteer de modus, de eigenaar, het bewaaraantal en het verwachte schijfbudget naast de controle zelf. Wanneer de controle later van een eenmalig script in een daemon verandert, moet het rotatiebeleid daarmee veranderen, en die notitie vertelt de volgende persoon welke aanname is gebroken.

Houd ten slotte de logbeslissing gescheiden van de herstelbeslissing. Een mislukte controle moet het eigen herstelbeleid van de verbinding volgen, niet een regel die in logrotate verborgen zit, en geen enkele logopzet mag de reden zijn dat een werkende tunnel opnieuw wordt gestart.

Gerelateerde artikelen