Skip to content

Rotacja logów

Ograniczanie rozrostu logów

Instrukcja opisuje ograniczenie rozrostu logów systemowych na Ubuntu w dwóch obszarach:

  • systemd-journald (journal) – logi usług systemd, kernela i komponentów systemowych
  • pliki w /var/log (np. syslog, auth.log) – logi zapisywane zwykle przez rsyslog i rotowane przez logrotate

Rotacja logów Dockera jest konfigurowana w daemon.json i została opisana w osobnej instrukcji.

Rotacja journald Rotacja plików /var/log


Szybki audyt

Sprawdzamy ile miejsca zajmuje journal:

sudo journalctl --disk-usage

Sprawdzamy największe katalogi w /var/log:

sudo du -sh /var/log/* 2>/dev/null | sort -h | tail -n 20

Konfiguracja journald

Konfigurujemy twarde limity w /etc/systemd/journald.conf, aby ograniczyć zużycie dysku przez journal.

Edycja konfiguracji

Otwieramy plik:

sudo micro /etc/systemd/journald.conf

W pliku ustawiamy (przykład bezpiecznych limitów na VPS – wartości dopasowujemy do dysku):

journald.conf
[Journal]
Storage=persistent
SystemMaxUse=500M
SystemKeepFree=1G
SystemMaxFileSize=50M
SystemMaxFiles=10
MaxRetentionSec=10day

Znaczenie ustawień:

  • Storage=persistent – przechowywanie journala na dysku (logi pozostają po restarcie)
  • SystemMaxUse – maksymalny rozmiar journala na dysku (łącznie)
  • SystemKeepFree – minimalna ilość wolnego miejsca na dysku
  • SystemMaxFileSize – limit dla pojedynczego pliku journala
  • SystemMaxFiles – maksymalna liczba plików journala
  • MaxRetentionSec – maksymalny czas retencji logów

Zastosowanie zmian

Restartujemy journald:

sudo systemctl restart systemd-journald

Weryfikujemy rozmiar po zmianach:

sudo journalctl --disk-usage

Ręczne czyszczenie journala

Jeśli journal już urósł, usuwamy starsze wpisy.

Zostawiamy tylko 7 dni:

sudo journalctl --vacuum-time=7d

Albo zostawiamy maksymalnie 300 MB:

sudo journalctl --vacuum-size=300M

Rotacja plików /var/log (logrotate)

Logi typu syslog, auth.log, kern.log, daemon.log są zwykle zapisywane przez rsyslog i rotowane przez logrotate.

Weryfikacja działania rsyslog

Sprawdzamy status usługi:

systemctl status rsyslog --no-pager

Konfiguracja rotacji rsyslog

Edycja konfiguracji rotacji znajduje się zwykle w:

  • /etc/logrotate.d/rsyslog

Otwieramy plik:

sudo micro /etc/logrotate.d/rsyslog

W pliku ustawiamy (rotacja tygodniowa lub po rozmiarze, kompresja, 14 kopii):

syslog
/var/log/syslog
/var/log/auth.log
/var/log/kern.log
/var/log/daemon.log
{
    rotate 14
    weekly
    size 50M

    missingok
    notifempty

    compress
    delaycompress

    sharedscripts
    postrotate
        /usr/lib/rsyslog/rsyslog-rotate
    endscript
}

Duplikacja logów (journald vs /var/log)

To normalne, że część zdarzeń widzimy jednocześnie w journald i w /var/log/*. Na początku pozostawiamy oba źródła logów.


Testowanie i weryfikacja

Testujemy konfigurację logrotate bez wykonywania:

sudo logrotate -d /etc/logrotate.conf

Wymuszamy rotację jednorazowo:

sudo logrotate -f /etc/logrotate.conf

Sprawdzamy, czy pliki się obracają:

ls -la /var/log | grep -E 'syslog|auth\.log|kern\.log|daemon\.log'

Sprawdzamy rozmiar journala:

sudo journalctl --disk-usage

Komendy do codziennego użycia

Wyświetlamy ostatnie 100 wpisów z journald:

sudo journalctl -n 100 --no-pager

Wyświetlamy ostatnie 100 wpisów z usługi SSH:

sudo journalctl -u ssh -n 100 --no-pager

Wyświetlamy ostatnie 200 linii z auth.log:

sudo tail -n 200 /var/log/auth.log