Rotér en VPN-watchdog-log uden at brække skriveren
Vælg sinket først, og lad derefter rotationen passe til den måde, skriveren åbner filen på: omdøb til kortvarige tjek, genåbn eller copytruncate til en daemon.
Et VPN-sundhedstjek, der tilføjer én linje i minuttet, skaber stille en anden pligt: at beslutte, hvordan de linjer forlader disken. At reparere tunnelen gør intet for den pligt, og at omdøbe filen omdirigerer ikke en proces, der stadig holder den gamle deskriptor. Besvar først sink-spørgsmålet, og lad derefter rotationen passe til den måde, skriveren åbner den på.
Vælg sinket før rotationspolitikken
En systemd-enhed, der allerede sender sin output til journalen, holder opbevaringen ét sted. journald håndhæver grænser som SystemMaxUse og MaxRetentionSec , så en watchdog, der logger der, arver en grænse uden ekstra arbejde. At tilføje en anden ubegrænset fil ved siden af fordobler vedligeholdelsen uden gevinst.
En dedikeret fil fortjener sin plads, når noget andet læser den: en parser, en revisionseksport eller en side, der forventer en stabil sti. Når den beslutning er taget, har filen brug for en ejer, en tilstand og en rotationspolitik skrevet ned sammen, fordi de tre kun er korrekte som et sæt. En sti, som enhver kan oprette, er også en sti, som enhver kan erstatte, så mappetilladelserne hører i samme note. Skriv det hele ved siden af tjekket, og den næste ændring starter fra de samme fakta.
Skriv blokken, så den passer til skriveren
Start med en skriver, der åbner stien ved hvert kald, tilføjer en linje og afslutter. Det mønster overlever rotation uden nogen form for samarbejde fra processen, fordi næste kørsel åbner den fil, der aktuelt ligger på den sti. Blokken nedenfor beholder en uges versioner og genskaber filen med den ejer og tilstand, som skriveren har brug for:
/var/log/vpn-watchdog.log {
daily
rotate 7
create 0600 root root
missingok
notifempty
}
logrotate-manualen definerer antallet som antallet af bevarede roterede versioner, ikke som en garanti for syv dages historik, og nøgleordet daily vurderes, når jobbet kører, i stedet for at fungere som sin egen planlægger. På de fleste distributioner ejer en systemd-timer eller en cron-post allerede det kald, så kontroller, hvilken der findes, før du tilføjer en anden. At matche ejerskab betyder mere end antallet af opbevaring. At kopiere en tilstand kun for root over på en fil, der skrives af en tjenestekonto, stopper logningen ved næste rotation, og fejlen vises timer senere som et forældet tidsstempel i stedet for som en fejl. Bekræft skriverens bruger, før du kopierer en blok fra et andet sted.
En skriver, der aldrig genåbner, kræver en anden løsning
En langvarig proces, der holder en åben deskriptor, bliver ved med at skrive til den omdøbte inode. Plads frigives ikke, og den synlige fil holder op med at vokse, hvilket ser ud som en brudt rotation, indtil du tjekker inoden. Lær enten processen at genåbne, eller lad rotationen kopiere og afkorte i stedet for at omdøbe.
Genåbningsvejen er den reneste, hvor softwaren understøtter det: send det dokumenterede signal, eller kør den dokumenterede kommando, og lad processen selv åbne den nye fil. Alternativet er copytruncate , som kopierer indholdet til det roterede navn og derefter afkorter originalen på stedet, så deskriptoren forbliver gyldig, men skrivninger mellem kopieringen og afkortningen går tabt.
For enheder startet af systemd, peg StandardOutput mod journalen eller mod en fil, og lad enheden eje livscyklussen. En shell-løkke, der tilføjer via tee -a uden størrelsesgrænse, er den indretning, der fylder en partition under et udfald, fordi et fejlende tjek ofte logger langt mere end et sundt.
Test rotationen uden at vente på timeren
Fejlsøgningstilstand rapporterer, hvad der ville ske, og rører intet, hvilket gør den til den sikre første kørsel efter en ændring. Gennemtving en rigtig rotation, når du er tilfreds, og bekræft derefter, at den næste loglinje lander i den nye fil i stedet for den omdøbte:
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
Læs outputtet i den rækkefølge. Fejlsøgningskørslen skal navngive filen og de handlinger, den agter; en gennemtvunget kørsel skal producere det roterede navn, du forventede; tail skal vise en frisk post, efter at skriveren kører igen. En voksende df-værdi med en skrumpende synlig fil betyder det deskriptorproblem, der er beskrevet ovenfor.
Gentag den gennemtvungne kørsel to gange for at se, hvordan opbevaringen opfører sig, når der allerede findes versioner. Sletning af den ældste fil er det forventede resultat, og en manglende sletning betyder normalt, at antallet eller jokertegnet i det roterede navn ikke matcher det, logrotate har oprettet.
Behold en tilbagerulning og en skriftlig registrering
Gem den forrige blok før redigering, og noter, hvilken planlægger der kører den, fordi en tilbagerulning, der gendanner filen men ikke timeren, gengiver halvdelen af det oprindelige problem. Rotér én gang manuelt efter gendannelsen, og bekræft derefter, at skriverens konto kan skrive på logstien. Hvis tjenesten kører under systemd, skal du genindlæse enheden efter enhver ændring af dens outputomdirigering, fordi den kørende proces bliver ved med at skrive til det gamle mål. Læs selv de næste par loglinjer i stedet for at stole på, at enheden kom rent tilbage.
Notér tilstand, ejer, opbevaringsantal og det forventede diskbudget ved siden af selve tjekket. Når tjekket senere ændres fra et engangsscript til en daemon, skal rotationspolitikken ændre sig med det, og den note er det, der fortæller den næste person, hvilken antagelse der brød.
Endelig skal du holde logbeslutningen adskilt fra gendannelsesbeslutningen. Et fejlet probe bør følge forbindelsens egen gendannelsespolitik, ikke en regel skjult inde i logrotate, og ingen logindretning bør være grunden til, at en fungerende tunnel genstartes.