Sustavno i bilježenje procesa su samo dvije od najvažnijih prednosti sustava systemd. Kada su zapisi raspršeni po cijelom sustavu, obuhvaćaju više aplikacija i njima upravljaju različiti procesi i pozadinski programi (daemoni), njihovo tumačenje može biti izazovno. Systemd pruža centralizirano rješenje za upravljanje svim zapisima procesa jezgre (kernela) i korisničkog prostora u mediju za kompilaciju poznatom kao dnevnik (journal). Više o sustavu systemd možete saznati u našem vodiču o tome kako upravljati uslugama i jedinicama sustava systemd pomoću naredbe systemctl. Sve poruke koje generiraju usluge, initrd, jezgre itd. u dnevniku obrađuje daemon dnevnika (journal daemon). Svrha ovog vodiča je prikazati kako pristupiti podacima dnevnika i manipulirati njima pomoću naredbe journalctl.
Osnovna pretpostavka
Bez obzira na to odakle poruka potječe, jedan od primarnih ciljeva sustava systemd jest omogućiti centralizaciju njihovog upravljanja. Budući da se proces systemd brine za većinu procesa pokretanja i upravljanja uslugama, način na koji se zapisi prikupljaju i kako im se pristupa trebao bi biti standardiziran. Prikupljajući podatke iz svih dostupnih izvora u jedan sveobuhvatan alat, journald ih pohranjuje u binarnom formatu. To omogućuje da podaci budu lako dostupni za dinamičku i jednostavnu manipulaciju.
Ovaj pristup ima nekoliko ključnih prednosti. Imati centralno mjesto za prikupljanje svih podataka omogućuje administratorima da filtriraju i prikažu samo one podatke koji su im potrebni. Na primjer, mogu se pregledati podaci o pokretanju od prije tri pokretanja sustava. To također može značiti sekvencijalno bilježenje unosa iz povezanih usluga i učinkovitije praćenje problema u komunikaciji između njih.
Zahvaljujući binarnoj pohrani, podaci se mogu prikazati u različitim izlaznim formatima ovisno o trenutnim potrebama korisnika. Na primjer, dnevni zapis može se pregledavati u standardnom syslog formatu. No ako trebate pratiti trendove prekida usluga u obliku grafikona, unos se može izvesti kao JSON objekt, što ga čini upotrebljivim s uslugom za izradu grafikona. Kada trebate promijeniti formate ovisno o situacijskim zahtjevima, pretvorba nije potrebna jer su podaci binarni i ne zapisuju se na disk u običnom tekstu.
Ovisno o potrebama, dnevnik sustava systemd možete implementirati s postojećim syslogom ili on može zamijeniti tu funkcionalnost. Systemd može čak i nadopuniti postojeće mehanizme bilježenja. Na primjer, više usluga na jednom sustavu može imati svoje prikupljene podatke isprepletene na jednom sustavu s dnevnikom sustava systemd.
Postavljanje vremena sustava
Systemd će prema zadanim postavkama prikazivati rezultate u lokalnom vremenu, što je prednost binarnog bilježenja dnevnika u pogledu načina na koji se zapisi mogu pregledavati. Alternativno, mogu se pregledavati u UTC-u. Stoga je važno osigurati da je vremenska zona ispravno postavljena prije početka bilježenja dnevnika. Da bi to učinio, systemd je opremljen alatom pod nazivom timedatectl. Počinjemo tako što ćemo vidjeti koje su vremenske zone dostupne za korištenje prikazivanjem popisa s opcijom list-timezones:
|
1 |
timedatectl list-timezones |
Nakon što pronađete vremensku zonu koja odgovara lokaciji vašeg poslužitelja, vremenska zona se može postaviti pomoću opcije set-timezone:
|
1 |
sudo timedatectl set-timezone zone |
Kako biste testirali i potvrdili da se vremenska zona sada ispravno prikazuje, možete upotrijebiti naredbu timedatectl samu za sebe ili uz dodavanje 'status':

Prvi redak prikazuje lokalno vrijeme. Ovaj bi redak trebao sadržavati točno vrijeme za vašu lokalnu regiju.
Opći pregled zapisa
Naredba journalctl omogućit će vam pregled zapisa koje je prikupio daemon journald. Kada koristite journalctl, svaki unos u dnevnik iz sustava bit će prikazan na stranici zaslona, s najstarijim unosima navedenim pri vrhu. Cijeli popis podataka bit će, međutim, dug desecima tisuća redaka.
|
1 |
journalctl |

Oni koji su koristili standardno syslog bilježenje naći će format poznatim, ali važno je imati na umu da se ova kompilacija podataka prikuplja iz mnogih izvora, za razliku od syslog metode. Zapisi će uključivati rani proces pokretanja, initrd i kernel, kao i standardne pogreške aplikacija.
Sada kada je lokalno vrijeme postavljeno, svi će unosi započinjati s vremenskim oznakama u lokalnom vremenu, što je dostupno za svaki zapis koji je trenutno pohranjen na sustavu, a sva se logika prikazuje pomoću ovih novih informacija. Međutim, niste ograničeni na lokalno vrijeme. Koristeći zastavicu –utc, možete prikazati vremenske oznake i u UTC-u:
|
1 |
journalctl --utc |
Filtriranje journala po vremenu
Imati toliko dostupnih podataka je fantastično, ali pročešljavanje istih i mogućnost njihovog usvajanja, a kamoli mentalnog procesuiranja, može biti zastrašujući zadatak. Imajući to na umu, dolazimo do najvažnijeg dijela funkcije journalctl: filtriranja.
Prikaz zapisa iz trenutnog pokretanja sustava
Ako tražite podatke u journalu od posljednjeg ponovnog pokretanja, možete upotrijebiti funkciju journalctl sa zastavicom -b. To će prikazati sve relevantne informacije iz zapisa od najnovijeg ponovnog pokretanja vašeg sustava. Ova naredba će vam omogućiti da pronađete i upravljate informacijama koje su najrelevantnije za trenutno radno okruženje:
|
1 |
journalctl -b |
Ako preglednik odluči ne procjenjivati svaki pojedinačni unos, journalctl će prikazati više od jednog dana pokretanja koji će se prikazati u journalctl-u s praktičnim separatorima 'Reboot'. To pomaže u logičkom odvajanju informacija iz različitih sesija pokretanja radi pregleda:
|
1 2 3 |
. . . -- Ponovno pokretanje -- . . . |
Informacije o prošlim pokretanjima
Iako je prikaz informacija o trenutnom pokretanju obično najkorisniji, postoje situacije u kojima će informacije o prošlim pokretanjima biti od pomoći. Journal sprema informacije za više prethodnih pokretanja, tako da journalctl može lako prikazati informacije za bilo koje vremensko razdoblje.
Određene distribucije onemogućuju spremanje informacija o prethodnim pokretanjima, dok druge to imaju omogućeno prema zadanim postavkama. Omogućivanje trajnih informacija o pokretanju može se postići stvaranjem direktorija za pohranu journala upisivanjem sljedećeg:
|
1 |
sudo mkdir -p /var/log/journal |
Alternativno, možete urediti konfiguracijsku datoteku journala na sljedeći način:
|
1 |
sudo nano /etc/systemd/journald.conf |
Postavljanje opcije Storage= na „persistent” unutar odjeljka [Journal] omogućit će trajno bilježenje:

Nakon što je ovo omogućeno, journalctl stavlja na raspolaganje određene naredbe koje vam pomažu označiti ova pokretanja kao jedinice podjele. Za pregled pokretanja koja su zabilježena u journald-u, možete koristiti opciju –list-boots putem journalctl-a:
|
1 |
journalctl --list-boots |
![]()
Kao što je prikazano, svako će pokretanje biti navedeno u vlastitom retku, pri čemu prvi stupac prikazuje prethodna pokretanja redom od najstarijeg do najnovijeg. Ako je potrebna apsolutnija referenca, drugi stupac sadrži identifikaciju pokretanja. Nakon toga navedene su dvije vremenske specifikacije. Informacije iz prvog ili drugog stupca mogu se koristiti za prikaz informacija iz journala za određeno pokretanje. Na primjer, možete koristiti zastavicu -b s relativnim pokazivačem pokretanja -1 za pregled informacija o pretposljednjem ponovnom pokretanju:
|
1 |
journalctl -b -1 |
Slično tome, identifikacijski broj pokretanja iz drugog stupca također se može koristiti na ovaj način:
|
1 |
journalctl -b 54342de612174d269b66f1d5eb098abb |
Vremenski prozori
Pregledavanje pokretanja sustava prema ID-u jedna je od opcija, ali često je korisnije moći se referirati na prethodna pokretanja unutar vremenskog prozora u prošlosti koji se ne mora nužno podudarati s određenim pokretanjima. Na primjer, to je važno u situacijama kada se radi s poslužiteljima koji dugo rade i ne ponovno se pokreću često. Filtriranje vremenskih ograničenja može se izvršiti s proizvoljnim vremenskim ograničenjima. To će prikazati samo informacije o ponovnim pokretanjima koja spadaju u određeni vremenski prozor. Parametri ovog prozora označeni su opcijama –since i –until. Dostupno je nekoliko formata za vremenske opcije. Format apsolutne vremenske vrijednosti je sljedeći:
|
1 |
GGGG-MM-DD HH:MM:SS |
Dakle, ako želite vidjeti sva pokretanja od 10. siječnja 2015. u 17:15, upišite sljedeću naredbu:
|
1 |
journalctl --since "2015-01-10 17:15:00" |
Ako se bilo koja od komponenti izostavi, postoje ugrađene zadane vrijednosti. Nadalje, ako se datum izostavi, zadani je trenutni datum. Ako komponenta vremena nedostaje, zadana je ponoć (00:00:00). Ako izostavite sekunde iz komponente vremena, one će se zadano postaviti na početnu točku te minute (00):
|
1 |
journalctl --since "2015-01-10" --until "2015-01-11 03:00" |
Dnevnik može razumjeti prečace povezane s vremenom poput „today”, „tomorrow”, „yesterday” i „now”. Riječi poput „ago”, u kombinaciji s prefiksima „-” i „+”, mogu se koristiti za sastavljanje naredbi u obliku rečenice:
|
1 |
journalctl --since yesterday |
Ako ste obaviješteni o prekidu usluge koji je započeo u 9:00 i želite provjeriti zapise dnevnika do prije sat vremena, to možete učiniti sa sljedećim:
|
1 |
journalctl --since 09:00 --until "1 hour ago" |
Kao što je vidljivo, definiranje fleksibilnog vremenskog prozora za pregled željenih zapisa vrlo je jednostavno.
Filtriranje prema interesu za poruke
Osim filtriranja dnevnika prema vremenskim ograničenjima, podaci se također mogu filtrirati na temelju komponente usluge koja vas zanima. Systemd pruža nekoliko metoda za to.
Prema jedinici
Vjerojatno najkorisniji parametar za filtriranje je prema jedinici koja vas zanima. Za filtriranje po jedinici može se iskoristiti opcija -u. Na primjer, ako želite vidjeti sve zapise koji se odnose na jedinicu Nginx, upišite sljedeću naredbu:
|
1 |
journalctl -u nginx.service |
Realno, htjeli biste ovo upariti s vremenskim filtrom kako biste prikazali zanimljive retke. Ako želite provjeriti gore navedenu uslugu i kako je radila danas, možete učiniti sljedeće:
|
1 |
journalctl -u nginx.service --since today |
Ovo je osobito korisno kada se koristi sposobnost dnevnika da spaja zapise iz više jedinica, posebno onih koje surađuju. Ako je proces Nginx povezan s PHP-FPN jedinicom za obradu dinamičkog sadržaja, zapisi se mogu spojiti kronološkim redoslijedom navođenjem obiju jedinica:
|
1 |
journalctl -u nginx.service -u php-fpm.service --since today |
Ovo može uvelike pomoći u uočavanju interakcije programa i olakšati ispravljanje pogrešaka u sustavima umjesto u pojedinačnim procesima.
Prema ID-u grupe, procesu ili korisniku
Mnoge usluge pokreću mnoštvo podprocesa (child procesa) za obavljanje određenog posla. Ako je dostupan ID određenog procesa, on se također može filtrirati navođenjem polja _PID. Ako je PID koji vas zanima 8088, može se učiniti sljedeće:
|
1 |
journalctl _PID=8088 |
Možda ćete također htjeti vidjeti zapise prijavljene od strane određene grupe ili određenog korisnika. To se može postići korištenjem filtara _GID i _UID. Ako se web poslužitelj izvodi pod korisnikom www-data, sljedeće može pronaći potreban ID:
|
1 |
id -u www-data |

Koristeći taj ID, možete zatim pregledati kvalificirane rezultate dnevnika:
|
1 |
journalctl _UID=33 --since today |
Systemd stavlja na raspolaganje mnoga polja za potrebe filtriranja. Neka polja primjenjuje journald na temelju informacija prikupljenih iz sustava u vrijeme bilježenja, dok se druga prosljeđuju iz procesa koji se trenutno bilježi.
Pred-kvalifikator _PID označava da su informacije prikupljene iz sustava u vrijeme bilježenja. Dnevnik automatski bilježi i indeksira PID tijekom procesa bilježenja kako bi mogućnost filtriranja bila dostupna kasnije. Da biste saznali više o dostupnim poljima dnevnika, možete upisati:
|
1 |
man systemd.journal-fields |
O nekima od njih raspravljat ćemo kasnije u ovom vodiču, ali za sada ćemo se dotaknuti nekih drugih korisnih opcija koje se odnose na ova polja. Ako želite vidjeti sve dostupne vrijednosti za određeno polje dnevnika, možete koristiti opciju -F. Ako želite vidjeti što systemd dnevnik ima za ID-ove grupa, možete učiniti sljedeće:
|
1 |
journalctl -F _GID |

To može pomoći u izradi filtara pružanjem potpunog popisa vrijednosti koje je polje ID-a grupe dnevnika pohranilo.
Prema putanji komponente
Filtriranje se također može izvršiti navođenjem lokacije putanje. Ako je putanja do izvršne datoteke, unosi u journalctl bit će prikazani ako uključuju tu izvršnu datoteku. Ako je tražena izvršna datoteka ‘bash’, možete upisati:
|
1 |
journalctl /bin/bash |
Iako to ponekad nije moguće učiniti, ako je jedinica izvršne datoteke dostupna, to može generirati jasniju i informativniju metodu za filtriranje.
Prikaz poruka jezgre
Poruke jezgre, koje se obično nalaze u dmesg izlazu, također se mogu dohvatiti iz dnevnika. Kako bismo prikazali samo ove poruke, koristimo zastavice -k ili -dmesg kao dio naše naredbe:
|
1 |
journalctl -k |
Poruke iz trenutnog pokretanja prikazat će se prema zadanim postavkama, ali prethodna pokretanja mogu se specificirati korištenjem prethodno spomenute zastavice za odabir. Ako tražite poruke od prije pet pokretanja, upisivanjem ovoga dobit ćete potrebne rezultate:
|
1 |
journalctl -k -b 5 |
Prema prioritetu
Sistemski administratori često preferiraju filtriranje prema prioritetu. Zapisi niskog prioriteta, iako su često korisni za pregled, mogu biti zbunjujući i sadržavati mnogo smetnji, što ih čini manje razumljivima tijekom analize. Korištenje opcije -p u journalctl prikazat će samo poruke određenog prioriteta, filtrirajući sve ostale prioritete. Ako želite prikazati unose od razine pogreške ili više, unesite sljedeće:
|
1 |
journalctl -p err -b |
Ta će naredba vratiti sve poruke označene kao pogreške, upozorenja, hitne situacije ili kritične, pri čemu dnevnik koristi standardne razine syslog poruka. Razine prioriteta definirane su prema numeričkoj vrijednosti, rangirane od najviše do najniže:
- 0: emerg
- 1: alert
- 2: crit
- 3: err
- 4: warning
- 5: notice
- 6: info
- 7: debug
Bilo koji od gore navedenih prioriteta može se naizmjenično koristiti s opcijom -p. Odabirom bilo kojeg od gore navedenih prioriteta filtrirat će se svi prioriteti na toj razini i iznad nje.
Izmjena prikaza u dnevniku
Osim korištenja filtriranja za odabir unosa, imamo i druge metode izmjene izlaza, prilagođavajući prikaz journalctl-a našim potrebama.
Skraćivanje/proširivanje izlaza
Možemo prilagoditi prikaz našeg izlaza podešavanjem smanjuje li ili proširuje journalctl podatke. Zadana postavka journalctl-a je prikaz cijelog unosa, pri čemu se duži unosi nastavljaju desno izvan zaslona. Unose u cijelosti možete pregledati pomicanjem pomoću tipke sa strelicom desno. Korisnik može umjesto toga poželjeti skratiti izlaz, pri čemu će na linijama koje bi inače prešle zaslon biti označene tri točke. Za to se može koristiti opcija –no-full:
|
1 |
journalctl --no-full |

Alternativno, također možete dopustiti prikazu da dopusti sve bez obzira na duljinu ili uključivanje znakova koji se ne mogu ispisati pomoću zastavice -a:
|
1 |
journalctl -a |
Izlaz na standardni izlaz
Journalctl prema zadanim postavkama prikazuje izlaz u pageru, ali ako želite manipulirati podacima pomoću alata za uređivanje teksta, vjerojatno vam je potrebno da se izlaz generira u opciju standardnog izlaza. To možete postići pomoću opcije –no-pager:
|
1 |
journalctl --no-pager |
Ovisno o potrebama korisnika, ovo se može preusmjeriti u datoteku na disku ili u uslužni program za obradu.
Formati izlaza
Podatke je uvijek lakše analizirati kada su predstavljeni u lakše čitljivom formatu. Dnevnik (journal) pruža više opcija za prikaz pomoću kvalifikatora -o nakon kojeg slijedi specifično označeni format.
Ako želite izvesti unose dnevnika u JSON format, to možete učiniti na sljedeći način:
|
1 |
journalctl -b -u nginx -o json |
![]()
Ova je strategija osobito korisna kod uslužnih programa za analiziranje. Format json-pretty može biti bolji za prikaz struktura podataka prije nego što ih proslijedite primatelju JSON-a:
|
1 |
journalctl -b -u nginx -o json-pretty |

Postoji nekoliko formata koje možete koristiti za prikaz:
- cat: Prikazuje samo polje poruke.
- export: Binarni format prikladan za prijenos ili izradu sigurnosnih kopija.
- json: Standardni JSON s jednim unosom po retku.
- json-pretty: JSON formatiran za bolju čitljivost ljudima
- json-sse: Izlaz formatiran u JSON-u omotan kako bi bio kompatibilan s događajima koje šalje poslužitelj (server-sent events)
- short: Zadani izlaz u stilu syslog-a
- short-iso: Zadani format proširen za prikaz ISO 8601 vremenskih oznaka stvarnog vremena.
- short-monotonic: Zadani format s monotonim vremenskim oznakama.
- short-precise: Zadani format s preciznošću u mikrosekundama
- verbose: Prikazuje svako polje dnevnika dostupno za unos, uključujući i ona koja su obično interno skrivena.
Gore navedene opcije omogućuju prikaz dnevnika u vašem željenom formatu.
Aktivno praćenje procesa
Dnevnik omogućuje pristup značajkama praćenja aktivnih ili nedavnih aktivnosti bez potrebe za uključivanjem drugog alata. To možete učiniti pomoću naredbe journalctl s funkcijom 'tail'.
-
Prikazivanje nedavnih zapisa
Prikazivanje opcije -n (koja radi isto kao i naredba tail -n) omogućit će prikaz određenog broja zapisa:
|
1 |
journalctl -n |
Broj unosa koje želite prikazati može se odrediti određenim brojem nakon kvalifikatora -n:
|
1 |
journalctl -n 20 |
-
Praćenje zapisa
Također možete aktivno pratiti zapise dok se zapisuju u sustav pomoću zastavice -f. To također radi na isti način kao i naredba tail -f:
|
1 |
journalctl -f |
Održavanje dnevnika
Zapisi zauzimaju prostor. Ovo vrijedi istražiti, potencijalno radi brisanja nekih starijih zapisa kako bi se oslobodio prostor.
Pronalaženje trenutne iskorištenosti diska
Zastavica –disk-usage može pomoći u utvrđivanju koliko prostora na disku trenutno zauzimaju zapisi:
|
1 |
journalctl --disk-usage |

Brisanje starih zapisa
Sa sustavom systemd verzije 218 (i novijim verzijama) možete smanjiti dnevnik na dva različita načina. Jedan je opcija –vacuum-size. Ona može smanjiti dnevnik navođenjem njegove veličine. Drugim riječima, stariji unosi bit će uklonjeni iz dnevnika sve dok zauzeti prostor ne bude na traženom parametru:
|
1 |
sudo journalctl --vacuum-size=1G |
Opcija –vacuum-time može smanjiti zauzeće prostora dnevnika navođenjem graničnog vremena, pri čemu će svi unosi stariji od tog vremena biti obrisani, dok će oni stvoreni nakon navedenog vremena biti zadržani. Ako želite zadržati unose samo iz prošle kalendarske godine, možete koristiti:
|
1 |
sudo journalctl --vacuum-time=1years |
Ograničavanje širenja dnevnika
Također možete ograničiti količinu prostora koju će dnevnik zauzimati. To se postiže uređivanjem datoteke /etc/systemd.journald.conf. Rast dnevnika može se ograničiti pomoću bilo koje od sljedećih metoda:
- SystemMaxUse=: Označava maksimalni prostor na disku koji dnevnik smije koristiti u trajnoj pohrani.
- SystemKeepFree=: Označava koliko prostora treba ostaviti slobodnim kada se entiteti dnevnika dodaju u trajnu pohranu.
- SystemMaxFileSize=: Određuje koliko datoteke dnevnika smiju narasti prije rotacije u trajnoj pohrani.
- RuntimeMaxUse=: Određuje koliko je diskovnog prostora dopušteno koristiti u nestalnoj pohrani (unutar /run datotečnog sustava).
- RuntimeKeepFree=: Prilikom pisanja podataka u nestalnu pohranu, ova funkcija označava količinu prostora koja mora biti namijenjena za druge namjene (unutar /run datotečnog sustava).
- RuntimeMaxFileSize=: Označava koliko prostora pojedinačni dnevnik zapisnika može zauzeti u nestalnoj pohrani (unutar /run datotečnog sustava) prije nego što ga je potrebno rotirati.
Sve ove opcije mogu pomoći u kontroli potrošnje prostora za pohranu od strane dnevnika. Važna činjenica koju treba napomenuti jest da će opcije SystemMaxFileSize i RuntimeMaxFileSize ciljati arhivirane datoteke kako bi dosegle navedena ograničenja. To je važna činjenica koju treba imati na umu pri tumačenju broja datoteka nakon operacija čišćenja.
Zaključak
Evidentno je da je systemd dnevnik nevjerojatno koristan alat, pri čemu većina njegovih prednosti proizlazi iz centralizirane prirode zapisa’ i opsežne količine zabilježenih metapodataka. Opsežne značajke dnevnika mogu se iskoristiti upotrebom naredbe journalctl, što olakšava provođenje relacijskog otklanjanja pogrešaka komponenti aplikacije, kao i opsežnu analizu sustava.
Sretno računanje!
Komentari
Još nema komentara. Budite prvi.