Cronolog vs logrotate


Odpowiedzi:


14

Z mojego doświadczenia wynika, że ​​logrotate jest świetny. Jest bardzo elastyczny i działa dobrze z większością oprogramowania.

Istnieją jednak pewne problemy, a ponieważ cronolog jest przede wszystkim narzędziem do obracania dziennika internetowego, opiszę moje doświadczenia z logrotate + apache, które były problematyczne:

Podczas obracania dzienników musimy powiadomić apache, że dziennik jest obracany, ponieważ nawet jeśli logrotate zmieni nazwę access.log na access.log.1, apache będzie kontynuował zapisywanie do access.log.1, ponieważ zapisuje do i-węzła, oraz zmiana nazwy pliku nie wpływa na numer i-węzła.

W debian etch (i prawdopodobnie wielu innych dystrybucjach) logrotate jest używany do obracania logów apache. Teraz apache ma wdzięczny restart, który doradza procesom potomnym apache, aby zakończyły działanie po zakończeniu obsługi istniejących połączeń, apache następnie ponownie czyta swoją konfigurację, spawnuje nowe procesy potomne, które zaczynają zapisywać do nowego pliku dziennika (w przypadku gdy poprzedni był obrócone).

To brzmi jak świetne rozwiązanie, jednak pełen wdzięku restart nie zawsze działa w określonych warunkach (np. Duże obciążenie), więc programiści debiana postanowili użyć restartu apache zamiast wdzięcznego restartu, w konfiguracji logrotate apache. Niestety powoduje to, że wszystkie połączenia są przerywane na raz, co jest bardzo złe w przypadku mocno obciążonych witryn. Ponadto ponowne uruchomienie apache może również powodować problemy, takie jak zatrzymywanie i nie uruchamianie apache (także w niektórych sytuacjach ładowania), zobacz linki błędów poniżej, aby uzyskać szczegółowe informacje.

Najważniejsze jest to, że logrotate jest świetny, ale może prowadzić do pewnych problemów dla niektórych programów. Nie mam dużego doświadczenia z cronologiem, ale ponieważ zapisuje dzienniki przez potok, nie wymaga przeładowywania apache podczas obracania plików dziennika, co w zasadzie rozwiązuje wszystko, co opisano powyżej.

Powiązane błędy debiana Logrotate / Apache:

  1. Błąd Debiana # 301702
  2. Błąd Debiana # 400455

1
rozwiązaniem powyższego jest użycie obcinania! robi to, aby skopiować zawartość access.log do access.log.1, a następnie opróżnić access.log (jak widzisz resztki i-węzła access_log pozostają takie same). Zwykle nie masz dzienników większych niż kilka GB (w najgorszym przypadku), więc cały proces nie zajmie dużo czasu!
Nikolaidis Fotis

3

Wolę cronologa, ale nie jest to tak naprawdę silna preferencja.

logrotate, gdzie jest uruchamiany przez crona, a jeśli system jest z jakiegoś powodu wyłączony, powinien nastąpić obrót, to pliki dziennika nie zostaną obrócone.

Lubię też, aby pliki dziennika miały datę (% Y% m.combined.access.log) w nazwie, ponieważ przechowuję te dzienniki przez długi czas. W większości systemów domyślnie apache logrotate nazwie pliki access.log, access.log.1 itp. Może być możliwe użycie daty w plikach dziennika z logrotate, ale nie mogłem wymyślić, jak to zrobić, kiedy ostatnio patrzyłem.


2
Problem polegający na tym, że logrotate nie działa, jeśli upłynął czas cron, można rozwiązać, instalując pakiet „anacron”.
andrewd18

lub jeszcze lepiej, możesz zapisać swoje dzienniki w żądanym formacie - można to zrobić za pomocą szablonów w rsyslog - (% rok% -% miesiąc% -% dzień% _lala.log). w tym przypadku nie trzeba nawet obracać dzienników, ponieważ codziennie zmienia się imię!
Nikolaidis Fotis

2

Używał tylko logrotate. Tego używa Debian domyślnie i nigdy nie miałem z tym żadnych skarg.


2

I prawie wyłącznie używać cronologponad logrotate. logrotatejest dostarczany z Debianem i pozwalam mu kontynuować pracę dla usług systemowych, takich jak dzienniki serwera pocztowego. Ale w przypadku Apache i lighttpdplików dziennika to wszystko cronolog.

Jednym z powodów, dla których używam cronologjest to, że cała konfiguracja odbywa się w wierszu pliku dziennika konfiguracji serwera WWW

np. w lighttpdpliku konfiguracyjnym możesz umieścić:

accesslog.filename = "|/usr/bin/cronolog --symlink=/var/log/webs/access.log /var/log/webs/%Y/%W-access.log"

I wszyscy otrzymują nowy plik dziennika co tydzień bez żadnej innej konfiguracji. Lub możesz być kreatywny i zrobić coś takiego:

accesslog.filename = "|/usr/bin/cronolog --symlink=/var/log/webs/access.log /var/log/webs/%Y/%m/%a-access.log"

I pobierz plik dziennika, który pokazuje ruch według dnia tygodnia. np. we wszystkie niedziele, we wtorki.

Co lepsze, nawet jeśli serwer nie działa przez dłuższy czas, poprawny plik dziennika zostanie użyty po ponownym uruchomieniu.


1
To bardzo przypomina svlogd (z linii runit i daemontools).
Tobu,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.