Kiedy używać opcji delaycompress w Logrotate?

33

Strona man logrotatemówi, że:

It can be used when some program cannot be told to close its logfile
and  thus  might  continue writing to the previous log file for some
time.

Jestem tym zmieszany. Jeśli nie można nakazać programowi, aby zamknął swój plik dziennika, będzie kontynuował pisanie w nieskończoność , nie na jakiś czas . Jeśli kompresja zostanie przełożona na następny cykl rotacji, program będzie kontynuował zapisywanie do tego pliku nawet po następnym cyklu rotacji. Jak odroczenie rozwiązania problemu?

Rozumiem, że copytruncatenależy tego użyć, gdy program nie może nakazać zamknięcia pliku dziennika. Wiem, że niektóre dane zapisane w pliku dziennika gubią się podczas kopiowania.

Patrzyłem na plik logrotate dla couchdb, który zawierał obie opcje copytruncatei delaycompressopcje.

/usr/local/couchdb-1.0.1/var/log/couchdb/*.log {
   weekly
   rotate 10
   copytruncate
   delaycompress
   compress
   notifempty
   missingok
}

Wygląda na to, że nie ma sensu używać, delaycompresskiedy copytruncatejuż tam jest. czego mi brakuje?

Anand Chitipothu
źródło

Odpowiedzi:

27

Twoje rozumienie copytruncatejest poprawne, ale sformułowanie na stronie man delaycompressjest trochę mylące. Mówiąc dokładniej , powinien on powiedzieć „gdy nie można nakazać programowi natychmiastowego zamknięcia pliku dziennika” - na przykład, jeśli używasz skryptów współdzielonych, a skrypt wysyła sygnał do procesu za pomocą dziennika, gdy wszystkie pliki dziennika zostały obrócone .

womble
źródło
1
Kiedy używam copytruncate, nie ma potrzeby, aby program zamykał swój plik dziennika. Czy to nie ma sensu określać delaycompresswraz z copytruncate?
Anand Chitipothu,
6
Nigdy nie używaj, copytruncatechyba że absolutnie musisz, ponieważ traci wpisy w dzienniku. Możesz skorzystać z obu opcji, jeśli chcesz skorzystać z innej funkcji delaycompress- możliwości odczytu poprzedniego pliku dziennika bez konieczności jego wcześniejszej dekompresji.
womble
Czy jest jakaś opcja inna niż copytruncateto, że nie mogę powiedzieć mojemu programowi, żeby przeładował?
Anand Chitipothu,
5
Nie. Dlatego powinieneś używać oprogramowania, które nie jest do bani i które zaakceptuje sygnał „przeładuj logi”.
womble
3

Nie jestem pewien, czy całkowicie rozumiem twoje pytanie, ale jeśli pytasz, co myślę ... Używam tego:

postrotate
          killall -HUP syslog-ng
  endscript

To dobry (lub przynajmniej) sposób na zabicie dziennika i przejście do następnego. W przypadku „programów”, które są do bani, takich jak platforma ASA firmy Cisco, które rejestrują mnóstwo danych na sekundę, działa.

Królikarnia
źródło
3

Używamy:

  • codziennie
  • delaycompress
  • tekst węzła

Spowoduje to utworzenie stałej kopii apache access_log access_log.1, abyśmy mogli następnie uruchomić nasz pakiet Stats jako skrypt na koniec dnia.

Następnego dnia logrotate kompresuje tworzenie pliku access_log.2.zip

Edwardg
źródło