Skip to content
VDS · Nadzor i performanse

systemd logovi: journalctl jednostavnim jezikom

Kako da nađeš uzrok pada servisa u logu, filtriraš ono što ti treba po vremenu i nivou i sprečiš da logovi pojedu ceo disk.

Ažurirano 23. avgust 2026.

Skoro sve što se dešava na sistemu završi u systemd journal-u. Servis neće da se pokrene, mašina se sama restartovala, sajt vraća 502 — odgovor je obično već zapisan, samo treba da znaš kako da ga pitaš.

Pet komandi koje su dovoljne

journalctl -u nginx -n 50 --no-pager      # last 50 lines of one service
journalctl -u nginx -f                    # follow in real time
journalctl -p err -b                      # only errors since boot
journalctl --since "10 min ago"           # everything for the last ten minutes
journalctl -b -1 -e                       # previous boot log, end of file

Poslednja je posebno vredna posle naglog restarta: -b -1 otvara prethodnu sesiju, a na kraju možeš da vidiš da li je bio kernel panic, da li je radio OOM killer ili je bilo čisto gašenje.

Nivoi u -p: emerg, alert, crit, err, warning, notice, info, debug. Navedeni nivo uključuje i sve važnije.

Dijagnostika servisa koji ne radi

systemctl status myapp
journalctl -u myapp --since today -p warning

systemctl status daje izlazni kod i poslednje linije, journalctl daje celu sliku. Gledaj:

  • Main process exited, code=exited, status=1 — aplikacija je sama izašla sa greškom, uzrok je u liniji iznad;
  • Failed to start ... Permission denied — dozvole na fajlu, direktorijumu ili portu ispod 1024;
  • Killed process ... (java) total-vm... od kernela — OOM killer je uskočio, pročitaj Nema dovoljno memorije;
  • Start request repeated too quickly — servis je u petlji padanja, systemd je prestao da ga pokreće; otkloni uzrok i pokreni systemctl reset-failed myapp.

Spisak svega pokvarenog na sistemu je systemctl --failed.

Filteri koji štede vreme

journalctl --since "2026-08-22 03:00" --until "2026-08-22 04:00"
journalctl -u nginx -u php-fpm            # several services at once
journalctl _PID=1432                      # by specific process
journalctl -k                             # only kernel messages
journalctl -u sshd | grep "Failed password" | tail -20

Kombinuj sa grep, ali zapamti: journalctl bez --no-pager otvara pager, izađi sa q.

Kako da journal ne pojede disk

Podrazumevano, journal raste do 10% particije. Na VDS-1 sa diskom od 40 GB, to je četiri gigabajta — primetno.

journalctl --disk-usage
journalctl --vacuum-size=200M
journalctl --vacuum-time=14d

Trajni limit je u /etc/systemd/journald.conf:

[Journal]
SystemMaxUse=300M
MaxRetentionSec=1month

Zatim systemctl restart systemd-journald.

Česte greške

  • Čitanje journal-a bez -u. Opšti tok je zatrpan zapisima servisa, a linija koja ti treba se izgubi. Uvek ga suzi na servis ili nivo.
  • Gubljenje istorije posle restarta. Ako direktorijum /var/log/journal ne postoji, journal živi samo u memoriji. Napravi ga: mkdir -p /var/log/journal && systemd-tmpfiles --create --prefix /var/log/journal.
  • Traženje grešaka aplikacije tamo. Nginx, PostgreSQL i slični takođe pišu u svoje fajlove u /var/log. Ako je journal prazan, pogledaj tamo.

Kada je disk pun, journalctl može da odbije da radi dok se prostor ne oslobodi. Ta situacija je obrađena u članku Nema dovoljno prostora na disku.