Tuesday, 14 November 2017

Logrotate Copytruncate Binære Alternativer


Mannens side av logrotatet sier at: Jeg er forvirret av dette. Hvis et program ikke kan bli fortalt å lukke loggfilen, vil det fortsette å skrive for alltid. ikke for en gang. Hvis kompresjonen blir utsatt til neste rotasjonssyklus, fortsetter programmet å skrive til den filen selv etter neste rotasjonssyklus. Hvordan utsettes for å løse problemet Min forståelse er at copytruncate skal brukes når et program ikke kan bli fortalt å lukke loggfilen. Jeg er klar over at noen data som er skrevet til loggfilen blir tapt når kopien er i gang. Jeg så på logrotatfilen for couchdb, og den hadde både copytruncate og delaycompress-alternativer. Det ser ut som om det ikke er noe poeng ved å bruke delaycompress når copytruncate allerede er der. Hva mangler jeg spurte 21. juli klokken 2: 14Im jobber med Ubuntu 14 med standard rsyslog og logrotate-verktøyet. I standard rsyslog logrotate etclogrotate. drsyslog config ser jeg følgende: Fra det jeg forstår, anbefales det å bruke copytruncate i alle logrotate scenarier, da det ikke flytter gjeldende logg, men snarere avkorter loggen slik at enhver prosess med en åpen fil Handler vil kunne fortsette å skrive til den. Så hvordan kommer standardkonfigurasjonen ved hjelp av rsyslog reload-funksjonen i stedet spurt 5. mai klokken 7:40. For å svare på spørsmålet ditt, må du ha det greit med å forstå de forskjellige avstandene for reload og copytruncate: Reload. Den gamle loggfilen omdøpes, og prosessen som skrives inn i loggen, blir varslet (via Unix-signal) for å gjenopprette loggfilen. Dette er den raskeste nedre overhead-metoden: Renamemove-operasjoner er veldig raske og har en konstant kjøretid. Videre er det en nesten atomisk operasjon: dette betyr at (nesten) ingen logginngang vil gå tapt under movereload. På den annen side trenger du en prosess som er i stand til å laste inn og gjenåpne sin loggfil. Rsyslog er en slik prosess, så standard logrotate config bruker reload-metoden. copytruncate. Den gamle loggfilen kopieres til en arkivfil, og deretter blir den avkortet for å slette gamle logglinjer. Mens trunkeroperasjonen er veldig rask, kan kopien være ganske lang (avhengig av hvor stor loggen din er). Dessuten kan det hende at noen logginngang går tapt i tiden mellom kopiering (husk at det kan være sakte) og avkortet. Av disse grunner brukes copytruncate ikke som standard for tjenester som er i stand til å laste om og gjenopprette loggfilene sine. På den annen side, hvis en server ikke kan gjenopprette loggfiler, er copytruncate ditt sikreste spill. Det krever med andre ord ingen støtte på servicenivå. svarte 5. mai kl. 7:50 I39m begrenser loggfilene mine til 500M hver, slik at kopiering av dem ikke er et problem (maksimalt flere sekunder). Takk ndash Mattan 5. mai kl. 7:57 Dette er helt avhengig av hvordan prosessen er å skrive logger. copytruncate virker bare hvis loggmeldingene legges til filen (f. eks. hva som helst gtgt loggfil. Og ikke når det omdirigerer utdataene (f. eks. hvilken som helst gt-loggfil). For rsyslog spesifikt er det nok mer sanselig å forlate ting som de er Den grunnleggende grunnen er at rsyslog har interne køer det kan bruke i tilfeller der utgangshåndtaket blir utilgjengelig. Oppdateringen vil a) føre til at rsyslog gjenoppretter sin egen loggfil, og b) føre til at noen køeventiler blir spylt til filen på opprettelse. Det kan være copytruncate gjør ingen skade (selv om jeg ville være bekymret for at delvis skrevne linjer blir avkortet), men jeg vil ha en tendens til å tro at copydeletereload er sikrere fra et integritet synspunkt. Som nevnt av faker. siden rsyslog kan håndtere situasjonen der filen blir utilgjengelig, er det ikke en overbevisende grunn til å bruke copytruncate. Og som nevnt av SelivanovPavel. rsyslog krever faktisk bestemt konfigurasjon for å håndtere kopiering avkortes riktig. Så hvis bare fordi bruk av reload-tilnærmingen krever mindre avvik fra standardkonfigurasjonen, ville jeg beholde den. Ditt svar 2017 Stack Exchange, Inc Jeg vil bruke log4j til å skrive revisjonsrelaterte logger til en bestemt loggfil, la oss si audit. log. Jeg vil ikke bruke syslogappender (utp basert) fordi jeg ikke vil være tolerant overfor tap av data. I tillegg bruker jeg logrotat for å rotere audit. log når filen kommer til en viss størrelse. Jeg støter på at når logrotat roterer filen audit. log til audit. log.1, fortsetter log4j å skrive til audit. log.1 annet enn å skrive til audit. log. Jeg vet at jeg kan bruke rollingfileappender til å gjøre loggrotasjonen annet enn å bruke logrotat, så når rollingfileappender ruller filen, bytter den til den nye filen uten problemer. Men grunnen til at jeg ikke kan bruke rollingfileappender er at jeg vil bruke logrotater etter roterende funksjon for å utløse noen skript etter at rotasjonen skjer, som ikke kan leveres av rollingfileappender. En annen desperat måte jeg kan tenke på, er å skrive en log4j-tilpasset appendør selv for å lukke loggfilen (audit. log.1) og åpne den nye (audit. log) når den oppdager filen blir rotert. Jeg har aldri brukt ExternallyRolledFileAppender, men hvis det er mulig å bruke logrotate post rotere for å sende signalet til ExternallyRolledFileAppender og gjøre log4j oppmerksom på filen blir rotert, og begynn å skrive til den nye filen Bare lurer på er det noen appender som det allerede blitt oppfunnet skrevet eller gjør jeg Har andre alternativer for å løse dette

No comments:

Post a Comment