journalctl — čitanje sistemskih logova
Kad servis ne startuje, kad sistem puca bez objašnjenja ili kad hoćeš da
vidiš šta se dešavalo u tri ujutru — odgovor je u logovima. Na modernim
Linux sistemima njima upravlja systemd-journald, a čitaju se
komandom journalctl.
Za razliku od starih tekstualnih logova, journal je binarni format sa indeksima. To znači da ne možeš da ga otvoriš običnim cat-om, ali zauzvrat dobijaš filtriranje koje sa grep-om ne bi ni pokušao.
Prvi pogled
# journalctl
Ispisuje ceo journal od najstarijeg zapisa, u pageru. Na sistemu koji radi mesecima to su stotine hiljada linija, pa je ovako praktički neupotrebljivo — ali je dobar način da vidiš kako zapis izgleda:
Aug 19 11:04:23 web01 systemd[1]: Starting The Apache HTTP Server... Aug 19 11:04:23 web01 httpd[1382]: Server configured, listening on: port 80 Aug 19 11:04:23 web01 systemd[1]: Started The Apache HTTP Server.
Svaki red ima vreme, ime računara, ime procesa sa PID-om i poruku.
Bez sudo videćeš samo deo zapisa —
one koje je proizveo tvoj korisnik. Za sistemske logove trebaju ti
administratorska prava, ili članstvo u grupi systemd-journal.
Tri opcije koje ćeš koristiti stalno
Od kraja (-e)
# journalctl -e
Otvara journal na poslednjem zapisu. Skoro uvek te zanima kraj, ne početak.
Poslednjih N redova (-n)
# journalctl -n 50
Bez broja podrazumeva se 10.
Praćenje uživo (-f)
# journalctl -f
Ostaje otvoreno i ispisuje nove zapise čim se pojave. Isto kao
tail -f. Pokreni ovo u jednom terminalu,
pa u drugom restartuj servis — videćeš tačno šta se dešava. Izlaz je
Ctrl+C.
Filtriranje po servisu
Ovo je najvažnija stvar u celom tekstu. Umesto da tražiš iglu u plastu:
# journalctl -u httpd
Prikazuje samo zapise koje je proizveo taj servis. Kombinuj sa gornjim opcijama — ovo je oblik koji ćeš najčešće kucati:
# journalctl -u httpd -n 50 --no-pager
Ili, dok testiraš konfiguraciju:
# journalctl -u httpd -f
Više servisa odjednom:
# journalctl -u httpd -u mariadb
Ime servisa je isto ono koje koristiš uz systemctl. Ako nisi siguran kako se tačno zove:
# systemctl list-units --type=service
Filtriranje po vremenu
# journalctl --since "2026-08-19 09:00:00" # journalctl --since "2026-08-19" --until "2026-08-20"
Ali journalctl razume i ljudski zapis, što je mnogo praktičnije:
# journalctl --since today # journalctl --since yesterday --until today # journalctl --since "1 hour ago" # journalctl --since "30 min ago" # journalctl --since "2 days ago" -u sshd
Kada ti neko kaže „palo je oko podneva", ovo je komanda:
# journalctl --since "11:45" --until "12:15"
Filtriranje po ozbiljnosti
Svaki zapis ima prioritet, od 0 do 7:
| Broj | Naziv | Značenje |
|---|---|---|
| 0 | emerg | sistem je neupotrebljiv |
| 1 | alert | potrebna hitna reakcija |
| 2 | crit | kritično stanje |
| 3 | err | greška |
| 4 | warning | upozorenje |
| 5 | notice | značajno, ali normalno |
| 6 | info | informativno |
| 7 | debug | detalji za razvoj |
Opcija -p prikazuje zadati nivo i sve ozbiljnije od
njega:
# journalctl -p err
Ovo je odlična prva komanda kad ti neko kaže „nešto ne radi, a ne znam šta". Suzi na današnji dan i imaš vrlo kratak spisak:
# journalctl -p err --since today
Logovi prethodnog butovanja
Kad se server iznenada restartuje, zanima te šta je bilo pre pada — a taj log je u prethodnom butu.
$ journalctl --list-boots 0 a1b2c3... Wed 2026-08-19 08:12:04 CEST—Fri 2026-08-21 10:33:17 CEST -1 d4e5f6... Mon 2026-08-17 19:45:11 CEST—Wed 2026-08-19 08:11:52 CEST -2 g7h8i9... Sat 2026-08-15 12:03:44 CEST—Mon 2026-08-17 19:44:58 CEST
Nula je trenutni but, -1 prethodni i tako unazad:
# journalctl -b # trenutni but # journalctl -b -1 # prethodni but # journalctl -b -1 -p err
Važno: ovo radi samo ako je journal trajan. Kod podrazumevanog podešavanja na mnogim sistemima journal živi u memoriji i briše se pri restartu — pa tvog prethodnog buta nema. Kako to popraviti, u sekciji o trajnom čuvanju.
Ostali korisni filteri
Po korisniku:
# journalctl _UID=1000
Po programu, kad te zanima izvršni fajl a ne systemd servis:
# journalctl /usr/sbin/sshd
Po kernelu — poruke o hardveru, diskovima, mreži:
# journalctl -k # journalctl -k -b -1
Filteri se slobodno kombinuju. Sve greške SSH servisa u poslednja tri dana:
# journalctl -u sshd -p err --since "3 days ago"
Format ispisa
Kad ti treba svaki detalj o zapisu — a ne samo poruka:
# journalctl -u httpd -n 1 -o verbose
Dobićeš sva polja, uključujući PID, korisnika, izvršni fajl i
_SYSTEMD_UNIT. Odatle i vidiš po čemu sve možeš da filtriraš.
Za dalju obradu skriptom ili slanje u neki sistem za analizu:
# journalctl -u httpd -o json-pretty
A da ispis ide pravo u terminal bez pagera, što ti treba kad prosleđuješ izlaz:
# journalctl -u httpd --no-pager | grep -i timeout
Koliko journal zauzima i kako se čisti
$ journalctl --disk-usage Archived and active journals take up 2.1G in the file system.
Brisanje po veličini ili starosti:
# journalctl --vacuum-size=500M # journalctl --vacuum-time=30d
Ako ti se disk puni, journal je jedan od prvih kandidata koje treba
proveriti — uz du nad
/var/log.
Trajno čuvanje journal-a
Podrazumevano na nekim distribucijama journal se drži u
/run/log/journal, dakle u memoriji, i nestaje pri svakom
restartu. Za server to nije prihvatljivo.
Proveri stanje:
$ ls /var/log/journal ls: cannot access '/var/log/journal': No such file or directory
Ako direktorijum ne postoji, journal nije trajan. Uključi ga:
# mkdir -p /var/log/journal # systemd-tmpfiles --create --prefix /var/log/journal # systemctl restart systemd-journald
Ili eksplicitno, kroz /etc/systemd/journald.conf —
pronađi red #Storage=auto, ukloni # i postavi:
Storage=persistent SystemMaxUse=1G
pa restartuj systemd-journald. Druga linija ograničava
journal na jedan gigabajt, da ti ne pojede disk.
Šta je sa /var/log?
Journal nije zamenio sve. Servisi koji pišu sopstvene logove i dalje to
rade — Apache u /var/log/httpd/, a na sistemima sa rsyslog-om
i dalje postoje /var/log/messages i
/var/log/secure.
Praktično pravilo: sve što je pokrenuto preko systemd-a traži u
journal-u; logove same aplikacije traži u /var/log/, i tamo
koriste tail,
grep i
less.
Tri komande za pamćenje
Ako iz celog teksta zapamtiš samo ovo, biće dovoljno u 90% slučajeva:
# journalctl -u ime-servisa -n 50 # zašto servis ne radi # journalctl -p err --since today # šta je danas puklo # journalctl -u ime-servisa -f # praćenje dok testiraš
Povezano: systemctl · Proces butovanja Linuxa · tail · Administracija i servisi
Comments
Post a Comment