Wyszukiwanie w witrynie

Jak skonfigurować rotację dzienników i zarządzać nimi za pomocą Logrotate w systemie Linux


Jednym z najciekawszych (a być może także najważniejszych) katalogów w systemie Linux jest /var/log. Zgodnie ze standardem Filesystem Hierarchy Standard, aktywność większości usług uruchomionych w systemie jest zapisywana w pliku wewnątrz tego katalogu lub jednego z jego podkatalogów.

Takie pliki nazywane są dziennikami i są kluczem do sprawdzenia, jak system działa (i jak zachowywał się w przeszłości). Dzienniki to także pierwsze źródło informacji, do którego zaglądają administratorzy i inżynierowie podczas rozwiązywania problemów.

Jeśli spojrzymy na zawartość /var/log na CentOS/RHEL/Fedora i Debian/Ubuntu (dla różnorodności), zobaczymy następujące pliki dziennika i podkatalogi.

Pamiętaj, że w Twoim przypadku wynik może się nieco różnić, w zależności od usług uruchomionych w Twoim systemie(ach) i czasu ich działania.

W RHEL/CentOS i Fedorze

ls /var/log

W Debianie i Ubuntu

ls /var/log

W obu przypadkach możemy zaobserwować, że niektóre nazwy dzienników kończą się zgodnie z oczekiwaniami na „log ”, podczas gdy nazwy innych zmieniają się z uwzględnieniem daty (na przykład maillog-20160822 w CentOS) lub skompresowany (rozważ auth.log.2.gz i mysql.log.1.gz w Debianie mocny>).

Nie jest to zachowanie domyślne oparte na wybranej dystrybucji, ale można je dowolnie zmienić za pomocą dyrektyw w plikach konfiguracyjnych, jak zobaczymy w tym artykule.

Jeśli logi byłyby przechowywane wiecznie, w końcu zapełniłyby system plików, w którym znajduje się /var/log. Aby temu zapobiec, administrator systemu może użyć przydatnego narzędzia o nazwie logrotate do okresowego czyszczenia dzienników.

W kilku słowach logrotate zmieni nazwę lub skompresuje główny dziennik, gdy spełniony zostanie warunek (więcej o tym za chwilę), tak aby następne zdarzenie zostało zapisane w pustym pliku.

Ponadto usunie „stare” pliki dziennika i zachowa najnowsze. Oczywiście możemy zdecydować, co oznacza „stary” i jak często chcemy, aby logrotate czyścił za nas dzienniki.

Instalowanie Logrotate w systemie Linux

Aby zainstalować logrotate, po prostu użyj menedżera pakietów:

---------- On Debian and Ubuntu ---------- 
aptitude update && aptitude install logrotate 

---------- On CentOS, RHEL and Fedora ---------- 
yum update && yum install logrotate

Warto zauważyć, że plik konfiguracyjny (/etc/logrotate.conf) może wskazywać, że w poszczególnych plikach .conf można umieścić inne, bardziej szczegółowe ustawienia /etc/logrotate.d.

Stanie się tak wtedy i tylko wtedy, gdy istnieje następujący wiersz i nie jest on skomentowany:

include /etc/logrotate.d

Będziemy trzymać się tego podejścia, ponieważ pomoże nam to zachować porządek i będziemy używać pola Debian w poniższych przykładach.

Skonfiguruj Logrotate w systemie Linux

Będąc bardzo wszechstronnym narzędziem, logrotate zapewnia wiele dyrektyw, które pomagają nam skonfigurować, kiedy i w jaki sposób dzienniki będą obracane oraz co powinno się wydarzyć zaraz potem.

Wstawmy następującą zawartość do pliku /etc/logrotate.d/apache2.conf (pamiętaj, że najprawdopodobniej będziesz musiał utworzyć ten plik) i sprawdź każdą linię, aby wskazać jej przeznaczenie:

/var/log/apache2/* {
    weekly
    rotate 3
    size 10M
    compress
    delaycompress
}

Pierwsza linia wskazuje, że dyrektywy wewnątrz bloku mają zastosowanie do wszystkich logów wewnątrz /var/log/apache2:

  • co tydzień oznacza, że narzędzie będzie próbowało zmieniać logi co tydzień. Inne możliwe wartości to wartości dzienne i miesięczne.
  • obróć 3 oznacza, że należy zachować tylko 3 obrócone kłody. Tym samym najstarszy plik zostanie usunięty przy czwartym kolejnym uruchomieniu.
  • size=10M ustawia minimalny rozmiar, w którym ma nastąpić rotacja, na 10M. Innymi słowy, każdy dziennik nie będzie obracany, dopóki nie osiągnie 10MB.
  • compress i delaycompress służą do informowania, że wszystkie obrócone logi, z wyjątkiem najnowszego, powinny zostać skompresowane.

Wykonajmy próbę próbną, aby zobaczyć, co zrobiłby logrotate, gdyby został faktycznie wykonany teraz. Użyj opcji -d, a następnie pliku konfiguracyjnego (w rzeczywistości możesz uruchomić logrotate, pomijając tę opcję):

logrotate -d /etc/logrotate.d/apache2.conf

Wyniki przedstawiono poniżej:

Zamiast kompresować logi, moglibyśmy zmienić ich nazwy po dacie ich rotacji. W tym celu użyjemy dyrektywy dateext. Jeśli nasz format daty jest inny niż domyślny rrrrmmdd, możemy go określić za pomocą formatu daty.

Pamiętaj, że za pomocą notifempty możemy nawet zapobiec rotacji, jeśli dziennik jest pusty. Ponadto powiedzmy logrotate, aby wysłał obrócony dziennik do administratora systemu (w tym przypadku [email ) w celach informacyjnych (będzie to wymagało skonfigurowania serwera pocztowego, czyli poza zakresem tego artykułu).

Jeśli chcesz otrzymywać e-maile dotyczące logrotate, możesz skonfigurować serwer pocztowy Postfix, jak pokazano tutaj: Zainstaluj serwer pocztowy Postfix

Tym razem użyjemy /etc/logrotate.d/squid.conf do obracania tylko /var/log/squid/access.log:

/var/log/squid/access.log {
    monthly
    create 0644 root root
    rotate 5
    size=1M
    dateext
    dateformat -%d%m%Y
    notifempty
    mail [email 
}

Jak widać na obrazku poniżej, dziennik ten nie wymagał obracania. Jeśli jednak warunek rozmiaru zostanie spełniony (size=1M), nazwa obróconego dziennika zostanie zmieniona na access.log-25082020 (jeśli dziennik został obrócony sierpnia 25.02.2020), a główny dziennik (access.log) zostanie utworzony ponownie z uprawnieniami dostępu ustawionymi na 0644 i root jako właściciel i właściciel grupy.

Wreszcie, gdy liczba logów osiągnie ostatecznie 6, najstarszy dziennik zostanie wysłany na adres [email .

Załóżmy teraz, że chcesz uruchomić niestandardowe polecenie podczas rotacji. Aby to zrobić, umieść linię z takim poleceniem pomiędzy dyrektywami postrotate i endscript.

Załóżmy na przykład, że chcemy wysłać e-mail do roota, gdy którykolwiek z dzienników w /var/log/myservice zostanie zmieniony. Dodajmy czerwone linie do /etc/logrotate.d/squid.conf:

/var/log/myservice/* {
	monthly
	create 0644 root root
	rotate 5
	size=1M
    	postrotate
   		echo "A rotation just took place." | mail root
    	endscript
}

Na koniec należy zauważyć, że opcje obecne w /etc/logrotate.d/*.conf w przypadku konfliktów zastępują opcje z głównego pliku konfiguracyjnego.

Logrotate i Cron

Domyślnie instalacja logrotate tworzy plik crontab w /etc/cron.daily o nazwie logrotate. Podobnie jak w przypadku innych plików crontab w tym katalogu, będzie on wykonywany codziennie, zaczynając od 6:25, jeśli anacron nie jest zainstalowany.

W przeciwnym razie egzekucja rozpocznie się około 7:35. Aby to sprawdzić, poszukaj linii zawierającej cron.daily w /etc/crontab lub /etc/anacrontab.

Streszczenie

W systemie generującym kilka logów administrowanie takimi plikami można znacznie uprościć za pomocą logrotate. Jak wyjaśniliśmy w tym artykule, będzie on automatycznie obracał, kompresował, usuwał i wysyłał logi okresowo lub gdy plik osiągnie określony rozmiar.

Upewnij się tylko, że jest ustawione na działanie jako zadanie cron, a logrotate znacznie ułatwi ci pracę. Więcej szczegółów można znaleźć na stronie podręcznika.

Czy masz jakieś pytania lub sugestie dotyczące tego artykułu? Daj nam znać, korzystając z poniższego formularza komentarza.