Tuesday, 7 November 2017

Logrotate copytruncate binära alternativ


Manrottssidan i logrotatet säger att: Jag är förvirrad av detta. Om ett program inte kan höras för att stänga loggfilen fortsätter det att skriva för alltid. inte för någon gång. Om komprimeringen skjuts upp till nästa rotationscykel fortsätter programmet att skriva till den filen även efter nästa rotationscykel. Hur utmanar man att lösa problemet Min förståelse är att copytruncate ska användas när ett program inte kan höras för att stänga loggfilen. Jag är medveten om att vissa data som skrivs till loggfilmen går vilse när kopian pågår. Jag tittade på logrotatfilen för couchdb, och den hade både copytruncate och delaycompress-alternativ. Det verkar som om det inte finns någon poäng med att använda delaycompress när copytruncate redan finns. Vad jag saknar frågade 21 juli 11 kl 2: 14Im arbetar på Ubuntu 14 med standard rsyslog och logrotate utility. I standard rsyslog logrotate etclogrotate. drsyslog config ser jag följande: Från vad jag förstår, rekommenderas att använda copytruncate i alla logrotatscenarier, eftersom det inte flyttar den aktuella loggen, men snarare truncates loggen så att någon process med en öppen fil handler kommer att kunna fortsätta skriva till den. Så hur kommer standardkonfigurationen med hjälp av rsyslog reload-funktionen i stället frågad 5 maj 15 kl 07:40. För att svara på din fråga måste din näve förstå de olika avvägningarna av reload och copytruncate: reload. Den gamla loggfilen omdirigeras och processen som skrivs in i den loggen meddelas (via Unix-signal) för att återskapa loggfilen. Detta är den snabbaste lägre överliggande metoden: Renamemove-operationerna är mycket snabba och har en konstant körtid. Dessutom är det en nästan atomisk operation: det betyder att (nästan) ingen loggpost kommer att gå vilse under movereload. Å andra sidan behöver du en process som kan ladda om och återåta sin loggfil. Rsyslog är en sådan process, så standard logrotate config använder reload-metoden. copytruncate. Den gamla loggfilen kopieras till en arkivfil, och sedan avkortas den för att radera gamla logglinjer. Medan trunkeringen är mycket snabb kan kopian vara ganska lång (beroende på hur stor din loggfil). Dessutom kan en viss loggförlust gå förlorad under tiden mellan kopieringsoperationen (kom ihåg det kan vara långsamt) och avkorta. Av dessa skäl används copytruncate inte som standard för tjänster som kan ladda om och återskapa loggfilerna. Om en server inte kan återhämta loggfiler, är copytruncate din säkraste satsning. Med andra ord behöver det inte någon support på servicenivå. svarade 5 maj 15 kl 7:50 I39m begränsar mina loggfiler till 500M vardera, så att kopiera dem won39t är ett problem (högst några sekunder). Tack ndash Mattan 5 maj 15 kl 7:57 Det beror helt på hur processen skriver loggar. copytruncate fungerar bara om loggmeddelandena bifogas filen (t. ex. vad som helst gtgt logfile. Och inte när det omdirigerar utmatningen (t ex vad som helst loggfil). För rsyslog specifikt är det förmodligen mer meningsfullt att lämna saker som de är . Den grundläggande anledningen är att rsyslog har interna köer som den kan använda i fall där dess utmatningshandtag blir otillgängligt. Återladdningen a) kommer att orsaka rsyslog att återskapa sin egen loggfil, och b) orsaka att några köda händelser spolas till filen på skapande. Det kan vara copytruncate gör ingen skada (även om jag skulle vara oroad över att delvis skrivna linjer trunkeras), men jag skulle tendera att tro att copydeletereload är säkrare ur integritetssynpunkt. Som nämnts av faker. Eftersom rsyslog kan hantera situationen där filen blir otillgänglig, finns det ingen övertygande anledning att använda copytruncate. Och som nämnts av SelivanovPavel. rsyslog kräver faktiskt en specifik konfiguration för att hantera kopiering avkortas ordentligt. Så om bara för att använda reload-tillvägagångssättet kräver mindre avvikelse från standardkonfigurationen, skulle jag behålla det. Ditt svar 2017 Stack Exchange, Inc Jag vill använda log4j för att skriva revisionsrelaterade loggar till en specifik loggfil, låt oss säga audit. log. Jag vill inte använda syslogappender (utp-baserad) eftersom jag inte vill vara tolerant för dataförlust. Dessutom använder jag logrotat för att rotera audit. log när filen kommer till viss storlek. Jag stöter på att när logrotat roterar filen audit. log till audit. log.1, fortsätter log4j att skriva till audit. log.1 annat än att skriva till audit. log. Jag vet att jag kan använda rollingfileappender för att göra loggrotationen än att använda logrotat, så när rollingfileappender rullar filen växlar den till den nya filen utan krångel. Men anledningen till att jag inte kan använda rollingfileappender är att jag vill använda logrotates post rotera funktion för att utlösa några skript efter rotationen händer som inte kan tillhandahållas av rollingfileappender. Ett annat desperat sätt jag kan tänka på är att skriva en log4j anpassad appendör själv för att stänga loggfilen (audit. log.1) och öppna den nya (audit. log) när den upptäcker att filen roteras. Jag använde aldrig ExternallyRolledFileAppender men om det är möjligt att använda logrotate post rotera för att skicka signalen till ExternallyRolledFileAppender och göra log4j medveten roteras filen och börjar skriva till den nya filen. Bara undrar är det någon som har blivit uppfinningsskrivet eller gör jag redan har andra alternativ för att lösa detta

No comments:

Post a Comment