Jak naprawić pełny dziennik systemd

11 min czytania - 20 maja 2026

hero section cover
Spis treści
  • Jak naprawić zapełniony dziennik systemd
  • Diagnozowanie problemu
  • Bezpieczne czyszczenie logów
  • Konfiguracja limitów rozmiaru Journald
  • Automatyzacja zarządzania logami
  • Wniosek
Udostępnij

Diagnozowanie i naprawianie pełnego dziennika systemd za pomocą poleceń próżniowych, limitów rozmiaru journald.conf, automatycznych liczników czasu czyszczenia i przekazywania dziennika.

Jak naprawić zapełniony dziennik systemd

Dziennik systemd przechowuje wszystkie komunikaty logowania generowane przez serwer, a na serwerze VPS z małą partycją root może on po cichu zająć całą dostępną przestrzeń dyskową. Kiedy tak się dzieje, usługi nie uruchamiają się, zapis danych się zatrzymuje, a użytkownik traci dostęp do diagnostyki niezbędnej do ustalenia, co poszło nie tak. Niniejszy przewodnik opisuje, jak zdiagnozować problem, natychmiast zwolnić miejsce oraz skonfigurować journald, aby sytuacja się nie powtórzyła.


 

Diagnozowanie problemu

Zacznij od sprawdzenia, ile miejsca zajmuje dziennik:

journalctl --disk-usage

Wynik ten przedstawia łączny rozmiar wszystkich aktywnych i zarchiwizowanych plików dziennika. Porównaj tę wartość z dostępną przestrzenią dyskową df -h. Na partycji root o pojemności 20 GB nawet 2 GB logów stanowi ponad 10% całkowitej pojemności dysku, co wystarczy, by spowodować problemy.

Następnie sprawdź, które usługi generują najwięcej danych. Ten jednowierszowy kod tworzy ranking 10 największych źródeł logów z ostatnich 24 godzin:

journalctl --since "24 hours ago" | awk '{print $5}' | cut -d'[' -f1 | sort | uniq -c | sort -rn | head -10

Filtruj konkretnie na błędy za pomocą journalctl -p err -b , aby sprawdzić, czy pojedyncza usługa utknęła w pętli awarii i zalewa dziennik. Możesz również sprawdzić, czy journald ogranicza szybkość jakichkolwiek usług:

journalctl -u systemd-journald | grep -i "suppressed"

Komunikaty o stłumieniu oznaczają, że usługa przekroczyła domyślny próg 10 000 wpisów w ciągu 30 sekund. To właśnie jest sprawca.

Kilka rzeczy jest szczególnie powszechnych na instancjach VPS. Jeśli Storage=auto jest ustawiony i /var/log/journal/ istnieje, journald korzysta z pamięci trwałej o domyślnym limicie około 4 GB. Na małej partycji root szybko się to zapełnia. Nieprawidłowe wyłączenia mogą również pozostawić uszkodzone pliki dziennika z .journal~ . Pliki te nie są normalnie rotowane i nadal zajmują miejsce.

Bezpieczne czyszczenie logów

Przed usunięciem czegokolwiek należy obrócić aktywny plik dziennika, aby zachować bieżące logi:

journalctl --rotate

Następnie usuń zarchiwizowane logi. Możesz filtrować według wieku, rozmiaru lub liczby plików:

sudo journalctl --vacuum-time=1d
sudo journalctl --vacuum-size=100M
sudo journalctl --vacuum-files=5

Pierwsza opcja usuwa logi starsze niż 24 godziny. Druga zmniejsza całkowity rozmiar dziennika do 100 MB. Trzecia zachowuje tylko pięć najnowszych zarchiwizowanych plików. Wybierz opcję, która pasuje do Twojej sytuacji.

Jeśli dysk jest całkowicie zapełniony, a polecenia journalctl nie reagują, może być konieczne ręczne usunięcie plików dziennika:

sudo rm -rf /var/log/journal/*
sudo systemd-tmpfiles --create --prefix /var/log/journal

Jest to ostateczność. Spowoduje to usunięcie wszystkich zapisanych logów i odtworzenie katalogu z prawidłowymi uprawnieniami. Po zakończeniu czyszczenia uruchom ponownie demona i sprawdź:

sudo systemctl restart systemd-journald
journalctl --disk-usage

Konfiguracja limitów rozmiaru Journald

Domyślne ustawienia journald są dość liberalne. Na serwerze VPS są one zbyt liberalne. Edytuj konfigurację, aby ustawić sztywne limity przechowywania logów. Utwórz plik nadpisujący zamiast edytować bezpośrednio główną konfigurację, aby Twoje zmiany przetrwały aktualizacje pakietów:

sudo mkdir -p /etc/systemd/journald.conf.d/
sudo nano /etc/systemd/journald.conf.d/size-limits.conf

Kluczowe dyrektywy:

ParametrVPS (dysk 20–40 GB)Serwer dedykowanyCo robi
SystemMaxUse500 MB do 1 GB2 GB do 5 GBSztywny limit całkowitej wielkości dziennika
SystemKeepFree1 GB10% dyskuZarezerwowana wolna przestrzeń dla systemu operacyjnego
MaxRetentionSecOd 7 do 14 dniOd 30 do 90 dniAutomatycznie usuwa logi starsze niż ten okres
SystemMaxFileSizeOd 20 MB do 50 MB100 MBMaksymalny rozmiar pliku dziennika

Ustawienie obu SystemMaxUse i SystemKeepFree zapewnia podwójne zabezpieczenie: logi są ograniczone do stałego rozmiaru, a system zawsze ma zapas miejsca niezależnie od tego, co jeszcze znajduje się na dysku.

Pamięć trwała a pamięć ulotna

Dyrektywa Storage= kieruje, gdzie trafiają logi. Ustaw Storage=persistent , aby zapisywać logi na /var/log/journal/ na dysku. Jest to zalecane w przypadku serwerów produkcyjnych, ponieważ logi przetrwają restart i można zbadać awarie po fakcie. Jeśli katalog nie istnieje, należy go utworzyć:

sudo mkdir -p /var/log/journal

Alternatywą jest Storage=volatilepolega na przechowywaniu logów w pamięci RAM w /run/log/journal/. Logi znikają po ponownym uruchomieniu. Ma to sens w przypadku kontenerów o krótkotrwałym działaniu lub serwerów, które przekazują wszystkie logi do systemu zewnętrznego.

Wyłączanie kompresji na serwerach o dużym natężeniu ruchu

Journald domyślnie kompresuje obiekty danych większe niż 512 bajtów. Na serwerach obsługujących duże przepustowości logów powoduje to obciążenie procesora. Ustaw Compress=no , jeśli przekazujesz logi na zewnątrz i nie musisz minimalizować lokalnej pamięci. Ustaw to również ForwardToConsole=no w środowisku produkcyjnym. Przekazywanie do konsoli jest synchroniczne, a zawieszona wirtualna konsola szeregowa może całkowicie zablokować demona journald.

Po każdej zmianie konfiguracji uruchom ponownie usługę:

sudo systemctl restart systemd-journald

Automatyzacja zarządzania logami

Ręczne czyszczenie nie jest skalowalne. Utwórz timer systemd, aby regularnie usuwać logi. Skonfiguruj jednostkę usługi w /etc/systemd/system/journal-vacuum.service:

[Unit]
Description=Vacuum old journal logs
 
[Service]
Type=oneshot
ExecStart=/usr/bin/journalctl --vacuum-time=7d --vacuum-size=500M

Następnie utwórz pasujący timer w /etc/systemd/system/journal-vacuum.timer:

[Unit]
Description=Weekly journal vacuum
 
[Timer]
OnCalendar=Sun 02:00
Persistent=true
 
[Install]
WantedBy=timers.target

Włącz go za pomocą sudo systemctl enable --now journal-vacuum.timer. Timer uruchamia się w każdą niedzielę o 2 w nocy i w jednym przebiegu stosuje zarówno retencję opartą na czasie, jak i na rozmiarze.

Jedna rzecz, której timer nie wychwyci: uszkodzone pliki dziennika. Po nieprawidłowym wyłączeniu systemu journald umieszcza uszkodzone pliki w kwarantannie, dodając ~ do nazwy pliku. Te .journal~ Pliki te nadal wliczają się do wykorzystania miejsca na dysku, ale nie zostaną automatycznie usunięte. Okresowo sprawdzaj i usuwaj stare pliki:

find /var/log/journal/ -name "*.journal~" -mtime +30 -delete

Przekazywanie logów na zewnątrz

W przypadku serwerów, na których potrzebne jest długoterminowe przechowywanie bez powiększania lokalnej pamięci masowej, należy przekierować logi do scentralizowanego systemu. Najprostszym podejściem jest włączenie przekazywania syslogów w journald.conf:

ForwardToSyslog=yes

W przypadku logów strukturalnych z pełnymi metadanymi (PID, UID, nazwy jednostek) użyj systemd-journal-remote do wysyłania wpisów w formacie JSON na platformę zarządzania logami. Zewnętrzna pamięć logów chroni również ścieżkę audytu w przypadku awarii dysku lokalnego lub naruszenia bezpieczeństwa serwera

Wniosek

Pełny dziennik systemd jest łatwy do naprawienia i łatwo mu zapobiec. Kluczowe kroki:

  • Sprawdź wykorzystanie za pomocą journalctl --disk-usage i zidentyfikuj usługi generujące nadmierny ruch.
  • Natychmiast zwolnij miejsce za pomocą journalctl --rotate a następnie --vacuum-size lub --vacuum-time.
  • Ustaw wyraźne limity rozmiaru w pliku nadpisującym journald.conf.
  • Zautomatyzuj czyszczenie za pomocą timera systemd.
  • Przekaż logi na serwer zewnętrzny w celu długoterminowego przechowywania.

Plany VPS i serwerów dedykowanych FDC zapewniają przepustowość wejścia/wyjścia dysku oraz przestrzeń dyskową niezbędną do obsługi obciążeń związanych z logami produkcyjnymi.

Blog

Polecane w tym tygodniu

Więcej artykułów
Procesy zombie w systemie Linux: Znajdź, usuń, zapobiegaj

Procesy zombie w systemie Linux: Znajdź, usuń, zapobiegaj

Dowiedz się, jak identyfikować, usuwać i zapobiegać procesom zombie w systemie Linux. Polecenia, poprawki kodu i wskazówki dotyczące monitorowania dla administratorów serwerów.

15 min czytania - 19 maja 2026

Lista kontrolna zabezpieczania serwerów Linux

15 min czytania - 8 maja 2026

Więcej artykułów
background image

Masz pytania lub potrzebujesz niestandardowego rozwiązania?

icon

Elastyczne opcje

icon

Globalny zasięg

icon

Natychmiastowe wdrożenie

icon

Elastyczne opcje

icon

Globalny zasięg

icon

Natychmiastowe wdrożenie