Istotne informacje o zarządzaniu logami w systemie Linux
- Zapisy systemowe w środowisku Linux mogą pochłaniać znaczną przestrzeń dyskową.
- System operacyjny zazwyczaj kompresuje przestarzałe pliki logów, aby oszczędzić miejsce na dysku.
- Do analizy logów i identyfikacji problematycznych procesów można wykorzystać polecenie `journalctl` lub `tail -f`.
Systemy Linux, mimo swojej reputacji lekkich i oszczędnych, mogą niespodziewanie zacząć sygnalizować brak dostępnego miejsca na dysku. Skąd ten problem? Najczęściej, główną przyczyną tego stanu rzeczy są logi systemowe.
Dlaczego logi zajmują tak dużo przestrzeni dyskowej?
Logi stanowią istotny element w zarządzaniu systemem Linux. Pozwalają monitorować aktywność komputera oraz diagnozować występujące problemy. Działanie mechanizmów logowania w systemie Linux można porównać do Podglądu zdarzeń w systemie Windows. Z reguły logi nie zajmują dużo miejsca, ponieważ większość dystrybucji automatycznie zarządza ich wielkością.
Tradycyjnie, logi w Linuksie były prostymi plikami tekstowymi, jednak w miarę przechodzenia wielu dystrybucji na systemd, stały się one plikami binarnymi obsługiwanymi przez usługę systemową journald. Alternatywnie, wykorzystywane mogą być również rsyslog lub syslog-ng.
Z uwagi na to, że stare logi tracą na znaczeniu, a ich obszerne archiwa mogą generować problemy, system automatycznie je „rotuje” – archiwizuje, kompresuje i w konsekwencji usuwa, aby zwolnić przestrzeń dla istotniejszych danych.
Mimo że logi nie wydają się zajmować dużo miejsca, wadliwie działający proces może generować zapisy logów szybciej, niż system jest w stanie je rotować.
Jeżeli po analizie stanu dysku nagle zauważysz deficyt wolnej przestrzeni, a nie dokonywałeś w ostatnim czasie żadnych operacji zapisu dużych plików, przyczyną mogą być problemy z logami. Konieczne będzie ustalenie, który element systemu zapełnia logi i naprawienie tego.
Możesz sprawdzić, ile miejsca na dysku jest wykorzystywane, używając polecenia `du -h`:
du -h /var/log
Wynikiem będzie lista podkatalogów wraz z informacją o zajmowanej przez nie przestrzeni:
Lokalizacja logów
Jeśli korzystasz z nowoczesnej dystrybucji Linuksa opartej na systemd, do przeglądania logów użyjesz programu `journalctl`. Usługa journald zazwyczaj przechowuje logi w katalogach `/var/log/journal` lub `/run/log/journal`, w zależności od konkretnej dystrybucji.
Aby wyświetlić logi, wprowadź polecenie `journald` w wierszu poleceń powłoki. Dostępne są również przydatne opcje. Na przykład, aby zobaczyć komunikaty rozruchowe, użyj opcji `-b`:
journalctl -b
Możesz obserwować logi systemu w czasie rzeczywistym, korzystając z opcji `-f`.
W dystrybucjach, które nie korzystają z systemd, logi zazwyczaj znajdują się w katalogu `/var/log`. Nawet w przypadku systemów z systemd, niektóre programy nadal zapisują swoje logi w tym właśnie miejscu. Są to standardowe pliki tekstowe, które można przeglądać przy użyciu narzędzi typu pager, na przykład `less`.
Przykładowo, aby wyświetlić log systemowy:
less /var/log/syslog
Zobaczysz całą zawartość pliku dziennika, która może obejmować wiele tysięcy linii:
Możesz również monitorować go na bieżąco, korzystając z opcji `-f` polecenia `tail`:
tail -f /var/log/syslog
Mechanizm rotacji plików logów w systemie Linux
W katalogu `/var/log` możesz natknąć się na pliki, których nazwy kończą się na `log.N.gz`, gdzie N oznacza liczbę. Jest to efekt rotacji starszych logów systemowych. Większość dystrybucji ma wbudowane narzędzie do tego procesu, zwane `logrotate`. `logrotate` jest zazwyczaj uruchamiany jako zadanie cron lub zegar systemowy.
Domyślnie, większość dystrybucji uruchamia `logrotate` codziennie. `logrotate` kompresuje starsze logi za pomocą programu `gzip`, czego dowodem jest rozszerzenie plików `.gz`. Wykorzystuje do tego progi, np. wiek pliku lub jego rozmiar, i kolejny próg, aby ostatecznie usunąć przestarzałe pliki dziennika.
Standardowe opcje `logrotate` są zazwyczaj wystarczające dla większości użytkowników komputerów osobistych. Możesz modyfikować zachowanie `logrotate` poprzez edycję pliku `/etc/logrotate.conf` jako superużytkownik, a także poprzez edycję plików cron lub timerów systemowych. Te operacje są jednak najczęściej przydatne administratorom serwerów.
Zamiast modyfikować konfigurację, aby zaoszczędzić miejsce na dysku, lepiej jest zdiagnozować i naprawić problem, który powoduje nadmierne zapełnianie logów. Jeśli jednak musisz zmienić konfigurację, możesz zajrzeć na stronę podręcznika `logrotate`.
Które logi można bezpiecznie usunąć?
W sytuacji, gdy wszystkie inne metody zawiodą i desperacko potrzebujesz uwolnić miejsce na dysku, możesz manualnie usunąć zarchiwizowane pliki logów z końcówką `.gz`, zanim zrobi to `logrotate`. Możesz użyć polecenia `rm`, ale będziesz musiał je uruchomić jako superużytkownik, ponieważ te pliki należą do systemu:
sudo rm /var/syslog/syslog.*gz
To polecenie skasuje wszystkie pliki, których nazwa zawiera „syslog” i kończy się na „gz”.
Zawsze należy zachować szczególną ostrożność podczas wykonywania poleceń przy użyciu `sudo`, a w szczególności poleceń o charakterze destrukcyjnym, takich jak `rm`!
Zazwyczaj nie powinno się usuwać plików z katalogów systemowych bez pełnej świadomości konsekwencji, jednak usunięcie zarchiwizowanych logów nie powinno powodować żadnych problemów. Należy jednak pamiętać, że w razie problemów starsze logi mogą okazać się niezbędne.
Jak naprawić przyczynę nadmiernego zapełniania logów
Aby zidentyfikować przyczynę nadmiernego zapełniania logów, należy monitorować je za pomocą polecenia `journalctl` lub `tail -f`. Najczęściej, przyczyną problemu są powtarzające się komunikaty o błędach.
Aby odzyskać miejsce na dysku, konieczne jest rozwiązanie problemu, który powoduje nadmierną ilość zapisów w logach. Jeżeli nie potrafisz samodzielnie zdiagnozować przyczyny błędu, poszukaj pomocy w sieci lub na forach technicznych związanych z twoją dystrybucją. Po naprawieniu problemu możesz bezpiecznie usunąć starsze logi. Powinieneś wtedy dysponować zdecydowanie większą ilością wolnej przestrzeni na dysku.
newsblog.pl