Setting up logrotate on Centos 7
Wczoraj spotkałem się z problemem małej pojemności partycji /var/log/. Niektóre logi były zbyt duże i logrotate jest doskonałym narzędziem, aby poradzić sobie z tym problemem. Jest to oprogramowanie zaprojektowane w celu zmniejszenia ilości miejsca na każdy plik dziennika, który posiadamy. I można to zrobić z niektórych sposobów.
Logrotate Opis: logrotate został zaprojektowany w celu ułatwienia administracji systemów, które generują dużą liczbę plików dziennika. Pozwala na automatyczną rotację, kompresję, usuwanie i wysyłanie plików dziennika. Każdy plik dziennika może być obsługiwany codziennie, co tydzień, co miesiąc, lub gdy rośnie zbyt duży.
Normalnie, logrotate jest uruchamiany jako codzienne zadanie cron. Nie będzie modyfikował logów wiele razy w ciągu jednego dnia Więc w kilku słowach, logrotate redukuje wykorzystanie miejsca na dysku przez pliki logów.
Konfiguracja logrotate
Konfiguracja logrotate odbywa się w jednym głównym pliku: /etc/logrotate.conf oraz innych plikach konfiguracyjnych specyficznych dla danej usługi, które są przechowywane w pliku /etc/logrotate.d/
Więc główna przykładowa konfiguracja to:
# see "man logrotate" for details# rotate log files weekly specified in /etc/logrotate.d/weekly# keep 4 weeks of all log filesrotate 4# create new (empty) log files after rotating old onescreate# use date as a suffix of the rotated filedateext# uncomment this if you want your log files compressed by gzipcompress# RPM packages drop log rotation information into this directory#there are all other configurations of services and their logs to rotateinclude /etc/logrotate.d
Kilka przykładowych i rzeczywistych konfiguracji plików logów
Więc, możemy dodać nowy plik logów do /var/log/ w ten sposób:
echo "this is a sample log file" > /var/log/vasil.log#this create a log file vasil1.log of size 5MBdd if=/dev/zero of=/var/log/vasil1.log bs=1M count=5
Następnie tworzymy nowe pliki konfiguracyjne, które są przechowywane w miejscu docelowym wyjaśnionym powyżej:
vim /etc/logrotate.d/vasil###/var/log/vasil.log { missingok notifempty compress minsize 1M daily create 0600 root root}
vim /etc/logrotate.d/vasil1###/var/log/vasil1.log { missingok notifempty compress minsize 1M daily create 0600 root root}
I nieco wyjaśnień dotyczących zmiennych:
- missingok – do not output error if logfile is missing
- notifempty – do not rotate log file if it is empty
- compress – Stare wersje plików log są domyślnie kompresowane z gzip
- minsize – Log jest rotowany tylko wtedy, gdy jest większy niż 1M
- daily – zapewnia codzienną rotację
- create – tworzy nowy plik dziennika z uprawnieniami 600, gdzie właścicielem i grupą jest użytkownik root
Jeśli chcesz więcej opcji i ich wyjaśnienie, zajrzyj do podręcznika:
man logrotare
Spójrz na listę /var/log dla naszych plików dziennika. Widzimy, że mamy jeden log vasil.log z rozmiarem 26b i vasil1.log z rozmiarem 5MB.
ls -lah /var/log/va*-rw-r--r--. 1 root root 5.0M Mar 3 13:21 /var/log/vasil1.log-rw-r--r--. 1 root root 26 Mar 3 13:21 /var/log/vasil.log
Teraz, możemy debugować naszą konfigurację za pomocą tej komendy:
logrotate -d /etc/logrotate.d/vasil1orlogrotate -d /etc/logrotate.d/vasil
Więc, jeśli chcemy uruchomić logrotate ręcznie i zobaczyć, co się dzieje, wykonaj następującą komendę. Ale bądź świadomy, ponieważ obróci ono wszystkie twoje logi, zdefiniowane w /etc/logrotate.d/
logrotate -f /etc/logrotate.conf
I możemy zobaczyć oba pliki logów skompresowane i dwa nowe puste pliki logów utworzone:
ls -lah /var/log/va*-rw-------. 1 root root 0 Mar 3 13:23 /var/log/vasil1.log-rw-r--r--. 1 root root 5.0K Mar 3 13:21 /var/log/vasil1.log-20170303.gz-rw-------. 1 root root 0 Mar 3 13:23 /var/log/vasil.log-rw-r--r--. 1 root root 44 Mar 3 13:21 /var/log/vasil.log-20170303.gz
Możemy zajrzeć do naszych skompresowanych plików dziennika za pomocą tej komendy:
zcat /var/log/vasil.log-20170303.gzthis is a sample log file
Albo możemy użyć gunzip do ich odkompresowania za pomocą komendy gzip.
Gdy używamy logrotate, czasami musimy zrestartować aplikację lub usługę. Logrotate może to zrobić za pomocą skryptu zwanego „postrotate”. Skrypt ten może być użyty w pliku konfiguracyjnym jak httpd. Kiedy logi są rotowane, skrypt przeładowuje usługę aby użyć nowego pustego pliku logów.
cat /etc/logrotate.d/httpd/var/log/httpd/*log { missingok notifempty sharedscripts delaycompress postrotate /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true endscript}
Mam więc nadzieję, że to jak komuś pomoże 🙂 Miłej zabawy.