Generator konfiguracji logrotate
Plik do /etc/logrotate.d z rotacją według czasu i rozmiaru, kompresją, create lub copytruncate i poleceniem po rotacji.
-
1Wprowadź dane
Wpisz treść, wklej tekst lub załaduj plik z dysku. -
2Kliknij przycisk
Narzędzie natychmiast przetworzy Twoje dane w przeglądarce. -
3Pobierz wynik
Skopiuj gotowy tekst lub zapisz plik na urządzeniu.
return "Wynik gotowy w 0.1s";
}
Więcej opcji
/etc/logrotate.d/myapp
Linii w pliku
Rotacja
daily
Zachowane archiwa
Zakres historii
plus bieżący plik
Kompresja
gzip; najnowsze archiwum bez kompresji
- Uwaga: Ścieżka z gwiazdką obejmuje kilka plików, a postrotate wykona się dla każdego z nich osobno. Zaznacz „Jedno uruchomienie skryptu (sharedscripts)”, jeśli ma wystarczyć jedno.
- Uwaga: Użytkownik i grupa z dyrektywy create muszą istnieć w systemie, inaczej logrotate zgłosi błąd.
Test bez zmian (dry-run)
Ściąga: co znaczą dyrektywy
| Dyrektywa | Co robi |
|---|---|
| daily | Rotacja raz dziennie. |
| rotate 14 | Ile ostatnich archiwów zachować; starsze są usuwane. |
| compress | Kompresuje zarchiwizowane logi (domyślnie gzip). |
| delaycompress | Odkłada kompresję do następnej rotacji; najnowsze archiwum zostaje nieskompresowane. |
| missingok | Brak pliku logu nie jest błędem. |
| notifempty | Pusty log nie jest rotowany. |
| create 0640 www-data adm | Po rotacji tworzy nowy, pusty plik z podanymi uprawnieniami, właścicielem i grupą. |
| postrotate … endscript | Polecenie wykonywane po rotacji (do linii endscript), np. przeładowanie usługi. |
Gdzie zapisać i jak sprawdzić
Zapisz konfigurację jako osobny plik w /etc/logrotate.d/ (nazwa jak usługa, np. myapp). Polecenie logrotate -d działa w trybie testowym: pokazuje, co by się stało, niczego nie zmieniając. Opcja -f wymusza rotację od razu.
create czy copytruncate
Zwykle logrotate przenosi stary plik i tworzy nowy (create), więc program musi ponownie otworzyć log, stąd postrotate z reload. Gdy aplikacja tego nie potrafi, użyj copytruncate: kopiuje log i zeruje oryginał, ale ułamek sekundy wpisów może zginąć.
Gwiazdka w ścieżce i postrotate
Gdy ścieżka obejmuje kilka plików, postrotate wykona się dla każdego osobno. Dyrektywa sharedscripts uruchamia skrypt raz, po rotacji wszystkich pasujących plików. Dla przeładowania usługi zwykle właśnie tego chcesz.
Jak policzyć okres przechowywania
Okres to w przybliżeniu rotate razy odstęp rotacji: daily i 14 daje ok. 14 dni, weekly i 8 daje ok. 8 tygodni (56 dni), monthly i 6 daje ok. 6 miesięcy. Z maxsize rotacja zachodzi też po przekroczeniu rozmiaru, więc okres bywa krótszy.
Oceń to narzędzie:
Powiązane narzędzia
Inne narzędzia, które mogą Ci się przydaćKonfiguracja logrotate z formularza
Logi rosną bez końca i mogą zapełnić dysk. logrotate dzieli je na archiwa, kompresuje i usuwa najstarsze – automatycznie i bez nadzoru. Konfiguracja logrotate to blok w osobnym pliku w /etc/logrotate.d/: ścieżka logów, a w nawiasach klamrowych dyrektywy. Generator składa taki blok z pól formularza, proponuje nazwę pliku i podaje gotowe polecenie testowe sudo logrotate -d.
Szablony Nginx, Apache i Aplikacja ustawiają ścieżkę oraz polecenie po rotacji (np. systemctl reload apache2), a szablon Tygodniowo zmienia częstotliwość na weekly z rotate 8. Ścieżka musi leżeć w /var/log/ i kończyć się na .log, liczba archiwów to 1–365, a polecenie postrotate to jedna linia. Pod wynikiem widać liczbę linii, przybliżony zakres historii, stan kompresji i ostrzeżenia, np. o gwiazdce w ścieżce bez sharedscripts.
Najważniejsze dyrektywy
| Dyrektywa | Znaczenie |
|---|---|
| daily / weekly / monthly | częstotliwość rotacji |
| rotate N | ile archiwów zachować; starsze są usuwane |
| maxsize 100M | rotacja także po przekroczeniu rozmiaru, przed upływem okresu (jednostki k, M, G) |
| compress | kompresuj archiwa (domyślnie gzip) |
| delaycompress | kompresuj dopiero kolejny plik; najnowsze archiwum zostaje bez kompresji |
| dateext | data w nazwie archiwum zamiast numeru |
| missingok | nie zgłaszaj braku pliku |
| notifempty | nie rotuj pustego pliku |
| create 0640 www-data adm | po rotacji utwórz pusty plik z podanymi uprawnieniami, właścicielem i grupą |
| copytruncate | skopiuj log i wyzeruj oryginał zamiast go przenosić |
| sharedscripts | uruchom postrotate raz dla wszystkich pasujących plików |
| postrotate … endscript | polecenie po rotacji |
Przykład
Wynik szablonu Nginx z domyślnymi opcjami i zaznaczonym sharedscripts:
/var/log/nginx/*.log {
daily
rotate 14
compress
delaycompress
missingok
notifempty
create 0640 www-data adm
sharedscripts
postrotate
systemctl reload nginx
endscript
}Instalacja
Zapisz plik w /etc/logrotate.d/ pod nazwą, którą podpowiada generator (pierwszy katalog ścieżki, tu nginx), i sprawdź go poleceniem sudo logrotate -d /etc/logrotate.d/nginx (tryb debug). Plik testowany osobno nie dziedziczy ustawień globalnych, więc pełny test to logrotate -d /etc/logrotate.conf. Opcja -f wymusza rotację od razu i pozwala sprawdzić, czy polecenie z postrotate działa.
Pakiety Nginx i Apache w Debianie i Ubuntu instalują własny plik w /etc/logrotate.d/. Zastąp go albo edytuj – dwa bloki dla tych samych plików kończą się błędem zduplikowanego wpisu.
Jak działa rotacja i co właściwie generuje narzędzie
logrotate nie jest usługą działającą w tle. To program uruchamiany cyklicznie – przez cron lub timer systemd – który czyta konfigurację, sprawdza stan plików i wykonuje rotację tylko wtedy, gdy minął zadany okres. Każdy blok zaczyna się od ścieżki lub wzorca, na przykład /var/log/nginx/*.log, a w nawiasach klamrowych znajdują się dyrektywy opisujące, co zrobić z pasującymi plikami.
Bez dateext mechanizm rotacji to zmiana nazw: plik bieżący staje się plikiem numer 1, plik numer 1 – numerem 2 i tak dalej, aż do granicy wyznaczonej przez rotate N. Wszystko, co przekroczy tę granicę, jest usuwane. Dyrektywa rotate 14 oznacza więc, że obok pliku bieżącego leży maksymalnie 14 archiwów, czyli historia obejmuje 14 okresów rotacji. Przy daily daje to 14 dni, przy weekly – 14 tygodni. Na jeden rotowany log przypada zatem 15 plików: bieżący plus 14 archiwów. Z dateext archiwa dostają datę w nazwie (np. access.log-20261021), a limit rotate działa tak samo.
Generator składa gotowy blok z wybranych elementów: częstotliwości, liczby archiwów, opcjonalnego maxsize, kompresji, daty w nazwie, obsługi braku i pustego pliku, sposobu odtworzenia logu (create z uprawnieniami albo copytruncate) oraz polecenia w sekcji postrotate … endscript. Gdy zaznaczysz copytruncate, dyrektywa create jest pomijana, a delaycompress pojawia się tylko razem z compress. Wynik wklejasz do pliku w /etc/logrotate.d/, bo logrotate dołącza zawartość tego katalogu automatycznie. Nic nie jest zapisywane w systemie – to zwykły tekst do skopiowania i samodzielnego wdrożenia.
Przykład krok po kroku dla logów serwera WWW
- Klikasz szablon Nginx: ścieżka zmienia się na
/var/log/nginx/*.log, a polecenie po rotacji nasystemctl reload nginx. Gwiazdka obejmuje jednocześnie access.log i error.log, więc oba pliki rotują się w tym samym bloku i w tym samym momencie. - Zostawiasz częstotliwość daily – jedna rotacja na dobę, w chwili uruchomienia logrotate przez cron lub timer systemd.
- Zostawiasz rotate 14. Poza plikiem bieżącym pozostaje 14 archiwów, czyli 14 dni historii; łącznie na każdy log przypada maksymalnie 15 plików.
- compress i delaycompress są włączone domyślnie. Archiwum numer 1 pozostaje przez jeden cykl nieskompresowane, a kompresowane są dopiero pliki od numeru 2 w górę – dzięki temu aplikacja, która wciąż pisze do świeżo zrotowanego pliku, nie traci danych.
- missingok, notifempty i create 0640 www-data adm też są zaznaczone: brak pliku nie wywoła błędu, pusty log nie zostanie zrotowany, a nowy plik powstanie od razu z prawami 0640, właścicielem www-data i grupą adm.
- W sekcji „Więcej opcji” zaznaczasz sharedscripts. Bez tego generator ostrzeże, że przy gwiazdce w ścieżce reload nginx wykona się osobno dla każdego pasującego pliku.
- Kopiujesz wynik do
/etc/logrotate.d/nginxi uruchamiaszsudo logrotate -d /etc/logrotate.d/nginx. Tryb debug wypisze planowane operacje, nie ruszając plików. Wynik: 14 dni historii, maksymalnie 15 plików na log i jeden reload po każdej rotacji.
Jak używać wygenerowanej konfiguracji
- Zaczynaj od
logrotate -d. Tryb debug pokazuje, które pliki pasują do wzorca i co zostałoby zrotowane, nie zmieniając niczego na dysku. To najszybszy sposób wyłapania literówki w ścieżce. - Liczbę archiwów dobieraj do częstotliwości, nie odwrotnie: daily z rotate 14 to 14 dni historii, weekly z rotate 8 to około 56 dni, monthly z rotate 12 to rok. Jeśli zależy ci na około miesiącu wstecz, przy weekly wystarczy rotate 4.
- Każda usługa powinna mieć osobny plik w /etc/logrotate.d/: jeden dla nginx, inny dla własnej aplikacji. Łatwiej wtedy zmienić lub usunąć konfigurację, nie ryzykując cudzych logów.
- Przy create z reloadem w postrotate nowy plik musi mieć właściciela i uprawnienia zgodne z tym, kto realnie do niego pisze. Inaczej usługa po rotacji nie zapisze już nic.
- copytruncate wybieraj tylko dla programów, które nie umieją ponownie otworzyć logu. Między skopiowaniem a wyzerowaniem pliku część wpisów z ułamka sekundy może zginąć.
Czego generator nie uwzględnia
- Tempa przyrostu logów. Narzędzie nie wie, ile danych przybywa w ciągu doby, więc nie dobierze liczby archiwów do wolnego miejsca. Bezpiecznikiem bywa maxsize, ale logrotate sprawdza rozmiar tylko wtedy, gdy jest uruchamiany – przy standardowym uruchomieniu raz na dobę maxsize nie zadziała częściej.
- Istnienia kont. Generator sprawdza tylko format uprawnień (3 lub 4 cyfry ósemkowe) i nazw; create 0640 www-data adm zadziała wyłącznie wtedy, gdy taki użytkownik i grupa istnieją w systemie.
- Uprawnień katalogu. Jeśli katalog z logami jest zapisywalny dla wszystkich albo dla grupy innej niż root, logrotate pominie go z komunikatem o niebezpiecznych uprawnieniach. Trzeba wtedy dopisać ręcznie dyrektywę su.
- Logów spoza /var/log/ i rzadszych dyrektyw. Ścieżkę w innym katalogu, prerotate, olddir czy wieloliniowy skrypt dopisujesz ręcznie po skopiowaniu wyniku.
- Kontekstu systemu: polityk SELinux lub AppArmor, kontenerów bez crona i pliku stanu logrotate, przez który rzeczywisty moment rotacji może odbiegać od deklarowanej częstotliwości.
Najczęstsze pytania
Po co delaycompress?
Pozwala aplikacji dokończyć pisanie do właśnie zrotowanego pliku przed kompresją, co zapobiega utracie danych. Działa tylko razem z compress.
Jak często logrotate działa?
Zwykle raz dziennie przez cron lub timer systemd. Częstotliwość w konfiguracji (daily, weekly, monthly) mówi, kiedy plik ma być zrotowany, ale nie zmienia harmonogramu samego programu.
Czy rotate 14 oznacza 14 dni historii?
Nie samo w sobie. rotate 14 to 14 archiwów obok pliku bieżącego. Przy daily daje to 14 dni, przy weekly 14 tygodni, przy monthly 14 miesięcy.
Czy można rotować logi według rozmiaru, a nie czasu?
Tak, w polu maxsize podajesz limit, np. 100M. Plik rotuje się po przekroczeniu rozmiaru albo po upływie okresu, zależnie od tego, co nastąpi pierwsze, ale tylko w chwili uruchomienia logrotate.
create czy copytruncate?
create przenosi stary plik i tworzy nowy, więc program musi ponownie otworzyć log, zwykle przez reload w postrotate. copytruncate nie wymaga reloadu, ale może zgubić wpisy z chwili kopiowania.
Czy po rotacji trzeba przeładować usługę?
Przy create tak, jeśli aplikacja trzyma otwarty deskryptor pliku. Przy ścieżce z gwiazdką dodaj sharedscripts, żeby systemctl reload nginx wykonał się raz, a nie dla każdego pliku.