Rotar un registre de vigilància VPN sense trencar el procés que l’escriu
Decidiu primer la destinació i feu que la rotació encaixi amb la manera com l’escriptor obre el fitxer: reanomenar per a comprovacions curtes, reobrir o copytruncate per a un dimoni.
Una comprovació de salut VPN que afegeix una línia per minut crea en silenci un segon deure: decidir com aquestes línies surten del disc. Arreglar el túnel no fa res per a aquest deure, i reanomenar el fitxer no redirigeix un procés que encara té el descriptor antic. Responeu primer la qüestió de la destinació i feu que la rotació encaixi amb la manera com l’escriptor obre el fitxer.
Trieu la destinació abans que la política de rotació
Una unitat systemd que ja envia la seva sortida al registre manté la retenció en un sol lloc. journald aplica límits com SystemMaxUse i MaxRetentionSec , així que un vigilant que hi escriu hereta un límit sense cap feina extra. Afegir-hi un segon fitxer sense límit duplica el manteniment sense cap guany.
Un fitxer dedicat guanya el seu lloc quan una altra cosa el llegeix: un analitzador, una exportació d’auditoria o una pàgina que espera un camí estable. Un cop presa aquesta decisió, el fitxer necessita un propietari, un mode i una política de rotació escrits junts, perquè els tres només són correctes com a conjunt. Un camí que qualsevol pot crear també és un camí que qualsevol pot reemplaçar, així que els permisos del directori pertanyen a la mateixa nota. Escriviu-ho tot al costat de la comprovació i la propera edició començarà amb els mateixos fets.
Escriviu el bloc perquè encaixi amb l’escriptor
Partiu d’un escriptor que obre el camí a cada invocació, afegeix una línia i surt. Aquest patró sobreviu a la rotació sense cap cooperació del procés, perquè la propera execució obre el fitxer que ara és en aquest camí. El bloc de sota conserva una setmana de versions i torna a crear el fitxer amb el propietari i el mode que l’escriptor necessita:
/var/log/vpn-watchdog.log {
daily
rotate 7
create 0600 root root
missingok
notifempty
}
El manual de logrotate defineix el recompte com el nombre de versions rotades conservades, no com una garantia de set dies d’historial, i la paraula clau daily s’avalia quan s’executa la feina en lloc d’actuar com a planificador propi. A la majoria de distribucions un temporitzador systemd o una entrada cron ja posseeix aquesta invocació, així que comproveu quin existeix abans d’afegir-ne un segon. Fer encaixar la propietat importa més que el recompte de retenció. Copiar un mode només per a root en un fitxer escrit per un compte de servei atura el registre a la propera rotació, i la fallada apareix hores després com una marca de temps obsoleta en lloc d’una errada. Confirmeu l’usuari de l’escriptor abans de copiar un bloc d’un altre lloc.
Un escriptor que no reobre mai necessita una solució diferent
Un procés de llarga durada que té un descriptor obert continua escrivint a l’inode reanomenat. L’espai no s’allibera i el fitxer visible deixa de créixer, cosa que sembla una rotació trencada fins que comproveu l’inode. O ensenyeu el procés a reobrir, o feu que la rotació copiï i truncï en lloc de reanomenar.
El camí de reobrir és el més net allà on el programari el suporta: envieu el senyal documentat o executeu l’ordre documentada, i deixeu que el procés obri ell mateix el fitxer nou. L’alternativa és copytruncate , que copia el contingut al nom rotat i després trunca l’original al mateix lloc, així que el descriptor continua sent vàlid però les escriptures que cauen entre la còpia i el truncament es perden.
Per a unitats iniciades per systemd, apunteu StandardOutput al registre o a un fitxer i deixeu que la unitat posseeixi el cicle de vida. Un bucle de shell que afegeix mitjançant tee -a sense cap límit de mida és la disposició que omple una partició durant una avaria, perquè una comprovació fallida sovint registra molt més que una de sana.
Proveu la rotació sense esperar el temporitzador
El mode de depuració informa del que passaria i no toca res, cosa que el converteix en la primera execució segura després d’una edició. Forceu una rotació real quan estigueu satisfets i confirmeu després que la línia següent del registre cau al fitxer nou i no al reanomenat:
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
Llegiu la sortida en aquest ordre. La passada de depuració ha de nomenar el fitxer i les accions que pretén; una execució forçada ha de produir el nom rotat que esperàveu; la cua ha de mostrar una entrada nova després que l’escriptor torni a executar-se. Un valor df creixent amb un fitxer visible que s’encongeix vol dir el problema de descriptor descrit més amunt.
Repetiu l’execució forçada dues vegades per veure com es comporta la retenció quan ja existeixen versions. Esborrar el fitxer més antic és el resultat esperat, i un esborrat absent normalment vol dir que el recompte o el comodí del nom rotat no coincideixen amb el que logrotate ha creat.
Mantingueu una reversió i un registre escrit
Desa el bloc anterior abans d’editar i anota quin planificador l’executa, perquè una reversió que restaura el fitxer però no el temporitzador reprodueix la meitat del problema original. Rota una vegada a mà després de restaurar i confirma que el compte de l’escriptor pot escriure al camí del registre. Si el servei s’executa sota systemd, recarrega la unitat després de qualsevol canvi en la redirecció de la sortida, perquè el procés en marxa continua escrivint a l’objectiu antic. Llegeix tu mateix les línies següents del registre en lloc de confiar que la unitat ha tornat neta.
Registra el mode, el propietari, el recompte de retenció i el pressupost de disc esperat al costat de la comprovació mateixa. Quan més endavant la comprovació passi d’un script d’una sola vegada a un dimoni, la política de rotació ha de canviar amb ella, i aquesta nota és la que diu a la persona següent quina suposició s’ha trencat.
Finalment, manteniu la decisió del registre separada de la decisió de recuperació. Una comprovació fallida ha de seguir la política de recuperació de la connexió, no una regla amagada dins de logrotate, i cap disposició de registre no ha de ser la raó per reiniciar un túnel que funciona.