Modul 6 · 6.2
Čitanje zapisa s alatom journalctl
Modul 6: Servisi i zapisi · Vrijeme čitanja: 11 minuta
Cilj učenja: Nakon ove lekcije moći ćete s journalctl ciljano pretraživati zapise svog poslužitelja (po usluzi, prioritetu i vremenu), znat ćete gdje se nalaze ostale datoteke zapisa i spriječit ćete da zapisi napune Vaš disk.
Ključni pojmovi: journald, journal, journalctl -u, -p, --since/--until, -f, -b, -e, -n, prioritet (err, warning, info), trajna pohrana, /var/log/journal, --disk-usage, --vacuum-size, /var/log, logrotate, rsyslog
Zapis kao prvi svjedok
Kada nešto na Vašem poslužitelju ne radi, razlog je gotovo uvijek zapisan u nekom zapisniku. Web-stranica koja prikazuje stranicu s pogreškom, usluga koja se ne pokreće, sigurnosna kopija koja se noćas nije izvršila: poslužitelj je to zapisao. Dobar administrator najprije pogleda zapis, a tek zatim počinje nešto mijenjati.
Na modernim Linux poslužiteljima journald (dio systemd-a) prikuplja poruke kernela, samog systemd-a i svih usluga u jedan zapisnik: journal. Čitate ga s journalctl.
Da biste mogli pročitati sve, morate biti u grupi adm ili systemd-journal, ili koristiti sudo. Bez tih prava vidite samo vlastite poruke.
Gdje se nalazi? Trajno ili privremeno
journald čuva journal na jednom od dva mjesta:
- u
/var/log/journal/: trajno, zapisi ostaju sačuvani nakon ponovnog pokretanja; - u
/run/log/journal/: privremeno, u memoriji, nestaju nakon ponovnog pokretanja.
Zadana postavka (Storage=auto u /etc/systemd/journald.conf) odabire trajnu pohranu ako mapa /var/log/journal/ postoji. Na Debianu tu mapu paket systemd stvara već od Debiana 11, a na Ubuntuu također postoji. Provjerite to:
anna@web1:~$ ls -d /var/log/journal
/var/log/journal
anna@web1:~$ journalctl --list-boots | tail -n 3
-2 3c1f... Sun 2026-11-01 04:30:12 CET Sun 2026-11-08 04:30:01 CET
-1 9ab7... Sun 2026-11-08 04:30:40 CET Mon 2026-11-09 08:12:05 CET
0 e41d... Mon 2026-11-09 08:12:30 CET Mon 2026-11-09 11:40:17 CETAko vidite samo jedno pokretanje sustava, a poslužitelj je već bio ponovno pokrenut, Vaši su zapisi privremeni. Stvorite mapu (sudo mkdir -p /var/log/journal i sudo systemd-tmpfiles --create --prefix /var/log/journal) i ponovno pokrenite journald. To je važno: nakon rušenja upravo želite znati što se dogodilo prije ponovnog pokretanja.
Od Debiana 12 Debian više ne instalira rsyslog prema zadanim postavkama. Taj je program nekada zapisivao tekstualne datoteke kao što su /var/log/syslog i /var/log/auth.log. Na novom Debian poslužitelju one stoga ne postoje; sve je u journalu. Ubuntu još uvijek ima rsyslog. Upute koje kažu "pogledajte u /var/log/auth.log" na Debianu možete prevesti u journalctl -u ssh.
Pretraživanje: filtri koje ćete stvarno koristiti
Bez filtra journalctl prikazuje sve, počevši od najstarijeg. To rijetko želite. Najvažniji filtri, koje možete kombinirati:
| Filtar | Primjer | Što |
|---|---|---|
-u <unit> | journalctl -u nginx | samo ta usluga |
-p <prioriteit> | journalctl -p err | samo pogreške i ozbiljnije |
--since, --until | --since "2026-11-09 03:00" --until "04:00" | vremensko razdoblje; također today, yesterday, "1 hour ago" |
-b | journalctl -b, journalctl -b -1 | od ovog pokretanja sustava ili prethodnog |
-f | journalctl -u nginx -f | praćenje uživo (kao tail -f), prekid s Ctrl+C |
-e | journalctl -u ssh -e | skok na kraj |
-n | journalctl -u ssh -n 50 | zadnjih 50 redaka |
-k | journalctl -k | samo poruke kernela |
--no-pager | bez listanja, korisno s grep |
Prioriteti idu od 0 (emerg) do 7 (debug): emerg, alert, crit, err, warning, notice, info, debug. S -p err dobivate err i sve ozbiljnije. -p warning prikazuje i upozorenja.
Tipičan tijek pretraživanja. Vaša web-stranica od jutros vraća pogrešku 502:
anna@web1:~$ systemctl status php8.4-fpm
× php8.4-fpm.service - The PHP 8.4 FastCGI Process Manager
Active: failed (Result: exit-code) since Mon 2026-11-09 07:02:11 CET; 4h ago
...
anna@web1:~$ sudo journalctl -u php8.4-fpm --since today -p warning --no-pager
nov 09 07:02:10 web1 php-fpm8.4[1830]: [09-Nov-2026 07:02:10] ERROR: [/etc/php/8.4/fpm/pool.d/www.conf:42] unknown entry 'pm.max_children '
nov 09 07:02:10 web1 php-fpm8.4[1830]: [09-Nov-2026 07:02:10] ERROR: FPM initialization failed
nov 09 07:02:11 web1 systemd[1]: php8.4-fpm.service: Main process exited, code=exited, status=78/CONFIG
nov 09 07:02:11 web1 systemd[1]: php8.4-fpm.service: Failed with result 'exit-code'.Uzrok je doslovno zapisan: tipfeler u retku 42 konfiguracijske datoteke. Status 78 (CONFIG) potvrđuje da se radi o pogrešci u konfiguraciji. Ne morate ništa nagađati.
Dva savjeta za čitanje:
- Čitajte odozgo prema dolje i potražite prvu pogrešku. Jedna pogreška često uzrokuje cijeli niz posljedičnih poruka. Prva je obično uzrok.
- Pazite na vrijeme. Što se promijenilo oko tog trenutka? Automatsko ažuriranje (lekcija 4.2:
/var/log/unattended-upgrades/), Vaša izmjena, ponovno pokretanje?
Ostale datoteke zapisa
Nije sve u journalu. Mnogi programi zapisuju i (ili samo) vlastite datoteke u /var/log/:
| Datoteka ili mapa | Što |
|---|---|
/var/log/nginx/access.log i error.log | svaki zahtjev i svaka pogreška nginxa |
/var/log/apt/history.log | što je apt instalirao i kada |
/var/log/unattended-upgrades/ | automatska ažuriranja (lekcija 4.2) |
/var/log/fail2ban.log | blokade (lekcija 5.3) |
/var/log/mysql/ ili journal | MariaDB/MySQL, ovisno o postavci |
Velike tekstualne datoteke čitate s less (pretraživanje s /), kraj s tail -n 50, uživo s tail -f, a filtrirate s grep:
anna@web1:~$ sudo grep " 502 " /var/log/nginx/access.log | tail -n 5Zapisi Docker kontejnera nisu u /var/log, nego kod samog Dockera: docker compose logs (lekcija 9.3).
Zapisi ne smiju napuniti Vaš disk
Pun disk jedan je od najčešćih razloga zbog kojih poslužitelj "odjednom" prestane raditi: baze podataka se zaustave, ažuriranja ne uspijevaju, a ponekad se više ne možete ni prijaviti. Zapisi su često krivci.
Journal sam sebe ograničava. Prema zadanim postavkama koristi najviše 10% datotečnog sustava, uz maksimum od 4 GB (SystemMaxUse=). Koliko trenutačno koristi i kako ga počistiti:
anna@web1:~$ journalctl --disk-usage
Archived and active journals take up 512.0M in the file system.
anna@web1:~$ sudo journalctl --vacuum-time=30d # starije od 30 dana se briše
anna@web1:~$ sudo journalctl --vacuum-size=500M # do 500 MBAko želite fiksno ograničenje, upišite u drop-in /etc/systemd/journald.conf.d/grootte.conf:
[Journal]
SystemMaxUse=1Gi ponovno pokrenite journald s sudo systemctl restart systemd-journald.
Tekstualne datoteke u /var/log održava logrotate: svaki dan ili tjedan datoteka se preimenuje (error.log.1), starije se verzije sažimaju (.gz), a najstarije se brišu. Pravila za pojedine programe nalaze se u /etc/logrotate.d/. Paketi iz distribucije donose vlastito pravilo. Ako Vaš vlastiti program ili skripta zapisuje u vlastitu datoteku zapisa, sami napravite pravilo, jer će inače datoteka beskonačno rasti.
Pronalaženje onoga što zauzima prostor:
anna@web1:~$ df -h /
anna@web1:~$ sudo du -xh /var/log | sort -h | tail -n 5Zapisi i privatnost
Zapisi sadrže IP adrese, korisnička imena, a ponekad i adrese e-pošte: to su osobni podaci. Ne čuvajte ih dulje nego što je potrebno (nekoliko tjedana do nekoliko mjeseci uobičajeno je za mali poslužitelj), ne ostavljajte ih javno dostupnima (mapa /logs u Vašem webrootu poznata je pogreška) i ne kopirajte ih olako u usluge drugih.
Na AlmaLinuxu i Rocky Linuxu
journalctl radi jednako. Ondje je rsyslog još uvijek uključen prema zadanim postavkama, s datotekama kao što su /var/log/messages i /var/log/secure (pandan za auth.log). Poruke SELinuxa nalaze se u /var/log/audit/audit.log; ausearch -m avc -ts recent prikazuje nedavna odbijanja.
Sažetak
- journald prikuplja sve poruke u journal; čitajte ga s
journalctl, filtrirano po usluzi (-u), prioritetu (-p), vremenu (--since) i pokretanju sustava (-b). - Provjerite je li journal trajan (postoji li
/var/log/journal), inače ćete nakon ponovnog pokretanja izgubiti zapise. - Debian 12 i noviji prema zadanim postavkama nemaju rsyslog, pa stoga ni
/var/log/auth.logni/var/log/syslog; sve je u journalu. - Potražite prvu pogrešku i pogledajte što se promijenilo oko tog trenutka.
- Pratite veličinu: journal sam sebe ograničava (
--disk-usage,--vacuum-*), a tekstualnim datotekama upravlja logrotate.
Kviz
Zadatak
Zadatak Z6.2: Analiza usluge koja se ruši. U primjernoj datoteci journal-crash-1.txt nalazi se ispis naredbi systemctl status i journalctl za uslugu koja se stalno ponovno pokreće, a zatim odustaje. Odgovorite: kako se usluga zove, koliko je puta systemd pokušao pokrenuti je, s kojim se izlaznim kodom zaustavila, što je uzrok prema prvoj poruci o pogrešci i u koliko je sati systemd odustao? Program uspoređuje Vaše odgovore s fiksnim ključem. Nakon toga provjerite na vlastitom poslužitelju prikazuje li journalctl -p err -b pogreške i je li Vaš journal trajan.
Dodatno štivo
- Priručnik
journalctl(1): https://manpages.debian.org/trixie/systemd/journalctl.1.en.html - Priručnik
journald.conf(5)(Storage=, SystemMaxUse=): https://manpages.debian.org/trixie/systemd/journald.conf.5.en.html - Debian 12, napomene uz izdanje 5.1.7 (rsyslog više nije zadani): https://www.debian.org/releases/bookworm/amd64/release-notes/ch-information.en.html
- Upravljanje servisima pomoću systemctl na Vašem VPS-u
- VPS: od prve prijave do sigurnog poslužitelja 8.4: Čitanje zapisnika pomoću journalctl i docker logs
