Kontrola stavu VPN, ktorá každú minútu pridá jeden riadok, potichu vytvára druhú povinnosť: rozhodnúť, ako tie riadky opúšťajú disk. Oprava tunela pre túto povinnosť nič nerobí a premenovanie súboru nepresmeruje proces, ktorý stále drží starý deskriptor. Najprv odpovedzte na otázku cieľa, potom prispôsobte rotáciu spôsobu, akým ju zapisovateľ otvára.

Vyberte cieľ pred politikou rotácie

Jednotka systemd, ktorá už posiela svoj výstup do žurnálu, drží uchovávanie na jednom mieste. journald vynucuje limity ako SystemMaxUse a MaxRetentionSec , takže strážca, ktorý tam loguje, zdedí hranicu bez akejkoľvek práce navyše. Pridanie druhého neobmedzeného súboru vedľa neho zdvojnásobí údržbu bez zisku.

Vyhradený súbor si zaslúži svoje miesto, keď ho číta niečo iné: parser, export pre audit alebo stránka, ktorá očakáva stabilnú cestu. Keď je toto rozhodnutie prijaté, súbor potrebuje vlastníka, režim a politiku rotácie zapísané spolu, pretože všetky tri sú správne len ako celok. Cesta, ktorú môže vytvoriť ktokoľvek, je aj cesta, ktorú môže ktokoľvek nahradiť, takže oprávnenia adresára patria do tej istej poznámky. Zapíšte to všetko vedľa kontroly a ďalšia úprava začne z tých istých faktov.

Napíšte blok tak, aby zodpovedal zapisovateľovi

Začnite zapisovateľom, ktorý otvorí cestu pri každom volaní, pridá riadok a skončí. Tento vzor prežije rotáciu bez akejkoľvek spolupráce procesu, pretože ďalší beh otvorí súbor, ktorý práve leží na tejto ceste. Blok nižšie uchováva týždeň verzií a znovu vytvára súbor s vlastníkom a režimom, ktoré zapisovateľ potrebuje:

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

Príručka logrotate definuje počet ako počet uchovaných rotovaných verzií, nie ako záruku siedmich dní histórie, a kľúčové slovo daily sa vyhodnocuje pri behu úlohy, namiesto toho aby pôsobilo ako vlastný plánovač. Na väčšine distribúcií už tento príkaz vlastní časovač systemd alebo záznam cron, takže pred pridaním druhého skontrolujte, ktorý existuje. Zhoda vlastníctva je dôležitejšia ako počet uchovávania. Skopírovanie režimu len pre root na súbor, ktorý zapisuje servisný účet, zastaví logovanie pri ďalšej rotácii a zlyhanie sa objaví o hodiny neskôr ako zastaraná časová pečiatka, nie ako chyba. Pred kopírovaním bloku odinakiaľ potvrďte používateľa zapisovateľa.

Zapisovateľ, ktorý nikdy neotvorí znova, potrebuje inú opravu

Dlho bežiaci proces, ktorý drží otvorený deskriptor, ďalej zapisuje do premenovaného inodu. Miesto sa neuvoľní a viditeľný súbor prestane rásť, čo vyzerá ako pokazená rotácia, kým inod neskontrolujete. Buď proces naučte znovu otvárať, alebo nechajte rotáciu kopírovať a skracovať namiesto premenovania.

Cesta znovuotvorenia je čistejšia tam, kde to softvér podporuje: pošlite dokumentovaný signál alebo spustite dokumentovaný príkaz a nechajte proces otvoriť nový súbor sám. Alternatívou je copytruncate , ktorá skopíruje obsah do rotovaného názvu a potom skráti originál na mieste, takže deskriptor zostane platný, ale zápisy medzi kopírovaním a skrátením sa stratia.

Pri jednotkách spúšťaných systémom systemd nasmerujte StandardOutput do žurnálu alebo do súboru a nechajte jednotku vlastniť životný cyklus. Slučka shellu, ktorá pridáva cez tee -a bez obmedzenia veľkosti, je usporiadanie, ktoré pri výpadku zaplní oddiel, pretože neúspešná kontrola často zaloguje oveľa viac ako zdravá.

Otestujte rotáciu bez čakania na časovač

Ladiaci režim hlási, čo by sa stalo, a ničoho sa nedotýka, čo z neho robí bezpečný prvý beh po úprave. Keď ste spokojní, vynúťte skutočnú rotáciu, potom potvrďte, že ďalší riadok logu pristane v novom súbore, nie v premenovanom:

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

Čítajte výstup v tomto poradí. Ladiaci prechod by mal pomenovať súbor a zamýšľané akcie; vynútený beh by mal vytvoriť očakávaný rotovaný názov; tail by mal po ďalšom behu zapisovateľa ukázať nový záznam. Rastúca hodnota df so zmenšujúcim sa viditeľným súborom znamená vyššie opísaný problém s deskriptorom.

Zopakujte vynútený beh dvakrát, aby ste videli, ako sa uchovávanie správa, keď verzie už existujú. Zmazanie najstaršieho súboru je očakávaný výsledok a chýbajúce zmazanie zvyčajne znamená, že počet alebo zástupný znak v rotovanom názve nezodpovedá tomu, čo vytvoril logrotate.

Zachovajte možnosť vrátenia a písomný záznam

Pred úpravou uložte predchádzajúci blok a poznamenajte, ktorý plánovač ho spúšťa, pretože vrátenie, ktoré obnoví súbor, ale nie časovač, reprodukuje polovicu pôvodného problému. Po obnovení raz ručne zrotujte a potom potvrďte, že účet zapisovateľa môže zapisovať na cestu logu. Ak služba beží pod systemd, po každej zmene presmerovania výstupu jednotku znovu načítajte, pretože bežiaci proces ďalej zapisuje do starého cieľa. Prečítajte si sami niekoľko ďalších riadkov logu, namiesto toho aby ste sa spoliehali, že jednotka sa vrátila čisto.

Zaznamenajte režim, vlastníka, počet uchovávania a očakávaný diskový rozpočet vedľa samotnej kontroly. Keď sa kontrola neskôr zmení z jednorazového skriptu na démona, politika rotácie sa musí zmeniť s ňou, a tá poznámka povie ďalšiemu človeku, ktorý predpoklad sa zlomil.

Nakoniec držte rozhodnutie o logu oddelené od rozhodnutia o obnove. Neúspešná kontrola by mala nasledovať vlastnú politiku obnovy spojenia, nie pravidlo ukryté v logrotate, a žiadne usporiadanie logovania by nemalo byť dôvodom na reštart fungujúceho tunela.

Súvisiace články