„Jour­nalctl“ – tai veiks­min­gas spren­di­mas, skirtas sistemos žurnalų tvarkymui ir analizei „Linux“ aplinkose. Šis įrankis gali būti nau­do­ja­mas sistemos veiklai stebėti, trikčių šalinimui ir žurnalų sekimui realiuoju laiku, su­tei­kiant svarbią in­for­ma­ci­ją, pa­de­dan­čią veiks­min­gai dia­g­no­zuo­ti sistemos problemas.

Kas yra „jour­nalctl“?

journalctl – tai galinga programa, skirta ieškoti ir rodyti įvykių žurnalus arba žurnalo failus „Linux“ sistemoje. Tai pag­rin­di­nis sistemos ir paslaugų valdymo paketo „systemd“ kom­po­nen­tas, kuris yra įtrauktas į daugelį šiuo­lai­ki­nių „Linux“ dist­ri­bu­ci­jų, pa­vyz­džiui, „Ubuntu“, „Fedora“ ir „Arch Linux“. Pa­va­di­ni­mas „jour­nalctl“ yra sudarytas iš žodžių „journal“ (žurnalas) ir „ctl“ (valdymas), o tai reiškia, kad ši komanda naudojama žurnalams valdyti ir ana­li­zuo­ti.

journalctl pa­leng­vi­na prieigą prie sistemos žurnalo, kurį tvarko systemd-journald. Sistemos žurnalas – tai cent­ra­li­zuo­ta pranešimų ir įvykių, vyks­tan­čių Linux sistemos veikimo metu, rinkinys. Skir­tin­gai nuo tra­di­ci­nių tekstinių žurnalų, journalctl suteikia struk­tū­ruo­tą ir veiks­min­gą būdą ieškoti, filtruoti ir rodyti žurnalo duomenis realiuoju laiku. Tai gali padėti dia­g­no­zuo­ti problemas arba stebėti sistemos būseną.

Šiuo tikslu „Jour­nalctl“ žurnalo failus saugo dve­je­tai­ne forma, nes dve­je­tai­niai žurnalo failai yra kom­pak­tiš­kes­ni ir efek­ty­ves­ni nei jų teks­ti­niai ati­tik­me­nys. At­si­žvel­giant į didelį už­re­gist­ruo­tų duomenų kiekį, tai leidžia greičiau ir efek­ty­viau ieškoti konkrečių įvykių ar in­for­ma­ci­jos žurnalo failuose. Dėl savo struk­tū­ruo­to ir šifruoto pobūdžio dve­je­tai­niai žurnalo failai taip pat užtikrina didesnį saugumą, palyginti su teks­ti­niais žurnalais, nes jų formatas apsunkina žurnalo duomenų klasto­ji­mą.

Kaip nustatyti žurnalo failų saugojimo vietą

journalctl galima naudoti norint apriboti ir kon­fi­gū­ruo­ti vietą, kurią žurnalo failai užima kietajame diske. Tai atliekama per „systemd-journald“ paslaugos nu­sta­ty­mus. Kon­fi­gū­ra­ci­jos nu­sta­ty­mai saugomi faile /etc/systemd/journald.conf. Čia rasite šiuos įrašus:

  • SystemMaxUse: Apriboja žurnalų saugojimo vietą sistemos kataloge
  • RuntimeMaxUse: Apriboja žurnalų saugojimo vietą lai­ki­no­jo­je kataloge

Norėdami nustatyti atminties ribą, įterpkite šias eilutes arba jas pa­kei­s­ki­te pagal poreikį:

[Journal] 
SystemMaxUse=50M 
RuntimeMaxUse=50M
bash

Šio pavyzdžio reikšmės (50M) gali būti keičiamos pagal poreikį. Taip pat galite naudoti kitus vienetus, pa­vyz­džiui, K (ki­lo­bai­tai), M (me­ga­bai­tai), G (gi­ga­bai­tai) arba T (te­ra­bai­tai). Pakeitus kon­fi­gū­ra­ci­jos failą, reikia iš naujo paleisti „systemd-journald“, kad pa­kei­ti­mai įsi­ga­lio­tų:

sudo systemctl restart systemd-journald
bash

Atlikę šiuos veiksmus, „systemd-journald“ bus su­kon­fi­gū­ruo­tas taip, kad būtų apribota žurnalo failams skirta disko vieta. Įsi­ti­kin­ki­te, kad pa­si­rink­tas limitas yra pa­kan­ka­mas svar­biau­siems žurnalo duomenims saugoti. Tuo pačiu svarbu vengti pernelyg didelio disko vietos naudojimo. Atminkite, kad pasiekus skirtos disko vietos limitą, senesni žurnalai bus au­to­ma­tiš­kai pašalinti.

Įvertinti disko vietos naudojimą

Prieš keisdami žurnalo failų saugojimo vietos dydį, pa­tik­rin­ki­te, kiek vietos šiuo metu užima žurnalas. Tam naudokite komandą --disk-usage:

journalctl --disk-usage
bash

Štai pavyzdys, kaip atrodo galutinis re­zul­ta­tas:

Journals take up 8.0M on disk.
bash

Ištrinti senus žurnalo įrašus

Jei žurnalas užima per daug atminties, galite ištrinti senus įrašus. Tai galima padaryti dviem būdais:

Naudokite --vacuum-size, kad su­ma­žin­tu­mė­te žurnalo dydį, nu­ro­dy­da­mi norimą dydį. Taikant šį metodą, senieji įrašai bus pa­ša­li­na­mi tol, kol bendras žurnalo užimamas vietos kiekis kietajame diske pasieks norimą dydį.

sudo journalctl --vacuum-size=1G
bash

Be to, žurnalą galima su­trum­pin­ti, nustatant saugojimo lai­ko­tar­pį naudojant --vacuum-time parinktį. Įrašai, senesni nei nurodytas laikas, bus ištrinti. Norėdami išsaugoti praėjusių metų žurnalo įrašus, galite naudoti šią komandą:

sudo journalctl --vacuum-time=1years
bash

Ką gali „Jour­nalctl“?

journalctl siūlo galingas fil­t­ra­vi­mo funkcijas, lei­džian­čias var­to­to­jams per­žiū­rė­ti žurnalo įrašus pagal įvairius kri­te­ri­jus. Ši funkcija leidžia tiks­lin­gai ieškoti reikiamos in­for­ma­ci­jos, o tai padeda greičiau nustatyti problemas. Štai keletas daž­niau­siai naudojamų journalctl fil­t­ra­vi­mo parinkčių:

Rodyti žurnalus

Vykdžius komandą journalctl, da­bar­ti­nės sistemos žurnalo įrašai bus rodomi at­virkš­ti­ne ch­ro­no­lo­gi­ne tvarka. Norėdami rodyti įrašus realiuoju laiku, naudokite journalctl -f arba journalctl --follow. Nauji įrašai rodomi au­to­ma­tiš­kai pagal jų gavimo tvarką.

Pri­klau­so­mai nuo to, kiek laiko „systemd“ veikia jūsų sistemoje, grei­čiau­siai bus rodomas mil­ži­niš­kas duomenų kiekis, kuris gali siekti dešimtis ar šimtus tūks­tan­čių eilučių. Norėdami greičiau rasti tai, ko ieškote, galite dar labiau filtruoti žurnalus naudodami įvairias Linux komandas.

Kaip filtruoti pagal laiką

Naudojant journalctl, žurnalus galima filtruoti pagal konkretų laiko momentą, todėl juose galima efek­ty­viau ieškoti reikiamos in­for­ma­ci­jos.

Filtruoti pagal paleidimo procesą

Žurnalų fil­t­ra­vi­mas pagal paleidimo procesą yra ne­pa­kei­čia­mas norint iš­nag­ri­nė­ti sistemos įvykius konkrečiu laiku arba įvairiose paleidimo si­tu­aci­jo­se. Šis tikslinis metodas su­pa­pras­ti­na problemų dia­g­no­za­vi­mą, nes žurnalo įrašai su­tel­kia­mi į konk­re­čias sistemos būsenas ar kon­fi­gū­ra­ci­jas.

  1. Da­bar­ti­nis pa­lei­di­mas: Pa­si­rin­kus journalctl -b, rodomi visi žurnalo įrašai, surinkti nuo pas­ku­ti­nio per­kro­vi­mo.
  2. Ankstesni pa­lei­di­mai: Naudokite parinktį -b, po kurios įveskite skaičių, kad būtų rodomi žurnalo įrašai, susiję su konkrečiu anks­tes­niu paleidimu. Pa­vyz­džiui, jei įvesite journalctl -b 1, bus rodomas anks­tes­nis pa­lei­di­mas.
  3. Visų galimų paleidimų sąrašas: Komanda journalctl --list-boots rodo galimų paleidimų sąrašą su ati­tin­ka­mais ID. Galite naudoti norimą paleidimo ID, kad būtų rodomi konk­re­taus paleidimo žurnalai.

Nors kai kuriose „Linux“ dist­ri­bu­ci­jo­se anks­tes­nių paleidimo procesų iš­sau­go­ji­mas įjungtas pagal nu­ma­ty­tuo­sius nu­sta­ty­mus, kitose dist­ri­bu­ci­jo­se var­to­to­jams gali tekti jį įjungti patys. Norėdami tai padaryti, sukurkite katalogą, kuriame bus saugomas žurnalas, įvesdami sudo mkdir -p /var/log/journal. Arba galite redaguoti žurnalo kon­fi­gū­ra­ci­jos failą, naudodami sudo nano /etc/systemd/journald.conf. Tada nu­sta­ty­ki­te parinktį Storage=, esančią po [Journal], į persistent, kad įjung­tu­mė­te nuolatinį žurnalo įrašymą:

. . . 
[Journal] 
Storage=persistent
bash

Filtruoti pagal laiko intervalą

Kartais gali prireikti per­žiū­rė­ti žurnalo įrašus už konkretų lai­ko­tar­pį. journalctl siūlo parinktis --since ir --until, kurias galima naudoti įrašams apriboti iki konk­re­taus lai­ko­tar­pio. Tam naudokite laiko formatą YYYY-MM-DD HH:MM:SS. Komanda, skirta per­žiū­rė­ti visus žurnalo įrašus nuo 2023 m. sausio 1 d. 12:00 iki 2023 m. sausio 2 d. 12:00, atrodo taip:

journalctl --since "2023-01-01 12:00:00" --until "2023-01-02 12:00:00"
bash

Šias dvi komandas suderinus taip pat galima filtruoti trumpesnį lai­ko­tar­pį:

journalctl --since 09:00 --until "1 hour ago"
bash

Arba galite praleisti tam tikras formato dalis. Pa­vyz­džiui, jei norite rodyti visus įrašus, pradedant nuo tam tikro laiko momento:

journalctl --since "2023-11-16 15:25:00"
bash

journalctl taip pat atpažįsta san­ty­ki­nes reikšmes, pa­vyz­džiui, yesterday, today ar tomorrow. Norėdami per­žiū­rė­ti va­ka­rykš­čius įrašus, įveskite šią komandą:

journalctl --since yesterday
bash

Kaip filtruoti pagal pranešimų cha­rak­te­ris­ti­kas

journalctl nau­do­ji­mas žurnalo įrašams filtruoti pagal svarbą ar turinį taip pat yra labai naudingas, nes leidžia ieškoti reikiamos in­for­ma­ci­jos ir sutelkti dėmesį į konk­re­čius sistemos žurnalų aspektus. Tai, be kita ko, užtikrina veiks­min­gą klaidų dia­g­nos­ti­ką, ankstyvą saugumo problemų nustatymą ir greitą našumo stebėjimą.

Filtruoti pagal pri­o­ri­te­tą

Norėdami filtruoti žurnalus pagal journalctl svarbą, galite naudoti žurnalo įrašų pri­o­ri­te­tų ka­te­go­ri­jas. Tam galite naudoti pri­o­ri­te­tų pa­va­di­ni­mus arba jiems ati­tin­kan­čias skait­me­ni­nes vertes. Kuo skaičius mažesnis, tuo pra­ne­ši­mas svar­bes­nis:

  • 0: emerg (avarinis)
  • 1: alert (pavojaus signalas)
  • 2: krit (kritinis)
  • 3: klaida (klaida)
  • 4: įspėjimas (įspėjimas)
  • 5: notice (pastaba)
  • 6: info (in­for­ma­ci­ja)
  • 7: debug (trikčių šalinimas)

Naudojant parinktį -p galima filtruoti pra­ne­ši­mus, turinčius tam tikrą pri­o­ri­te­tą. Pa­vyz­džiui, ši komanda rodo tik žurnalo įrašus, kurių pri­o­ri­te­tas yra „err“ (klaida) ar aukš­tes­nis:

journalctl -p err
bash

Filtruoti pagal vienetą

Žurnalų fil­t­ra­vi­mas pagal vienetą yra naudingas norint sutelkti dėmesį į konk­re­čias paslaugas ar procesus. Juos galima filtruoti naudojant parinktį -u. Pa­vyz­džiui, norėdami per­žiū­rė­ti žurnalo įrašus, su­si­ju­sius su „Apache“ ži­nia­tink­lio serveriu, įveskite šią komandą:

journalctl -u apache2
bash

Paiešką galima dar labiau pa­tiks­lin­ti naudojant san­ty­ki­nius laiko pa­ra­met­rus. Norėdami nustatyti, ar paslauga šiandien jau buvo suteikta, galite įvesti šią in­for­ma­ci­ją:

journalctl -u apache2 --since today
bash

journalctl gali sujungti duomenų įrašus iš skirtingų vienetų. Pa­vyz­džiui, jei jūsų „Nginx“ procesas yra susietas su „PHP FPM“ vienetu, jų įrašai gali būti sujungti ch­ro­no­lo­gi­ne tvarka. Tam skirta komanda yra:

journalctl -u nginx.service -u php-fpm.service --since today-u apache2 --since today
bash

Filtruoti pagal proceso, vartotojo arba grupės ID

Komanda „jour­nalctl“ gali filtruoti žurnalo įrašus pagal proceso, vartotojo arba grupės ID. Jei žinote tikslią proceso, kurį norite surasti, PID, galite naudoti _PID parinktį įrašams filtruoti. Pa­vyz­džiui, jei PID yra 8088, komanda atrodytų taip:

journalctl _PID=8088
bash

Be to, galite naudoti filtrus _UID arba _GID, kad būtų rodomi visi įrašai, kuriuos už­re­gist­ra­vo konkretus var­to­to­jas ar grupė. Pa­vyz­džiui, jei jūsų ži­nia­tink­lio serverio vardas yra „www-data“, vartotojo ID galite rasti atlikdami šiuos veiksmus:

id -u www-data
33
bash

Žurnalo įrašus galima filtruoti pagal ID:

journalctl _UID=33 --since today
bash

Norėdami nustatyti, kurioms grupės ID įrašams buvo sukurti įrašai, galite pa­si­nau­do­ti -F pa­rink­ti­mi. Tai parodys visas reikšmes, kurios buvo iš­sau­go­tos lauke „Grupės ID“:

journalctl -F _GID
bash

Štai pavyzdys, kaip atrodys re­zul­ta­tas:

32
99
102
133
81
84
100
0
124
87
bash

Filtruoti pagal kom­po­nen­tą

Fil­t­ra­vi­mas pagal kom­po­nen­tą yra naudingas norint sutelkti dėmesį į konk­re­čias programas, paslaugas ar procesus. Laukelis „Kom­po­nen­tas“ paprastai nau­do­ja­mas įvairiose pa­slau­go­se ar prog­ra­mi­nės įrangos kom­po­nen­tuo­se, siekiant išskirti konkrečią in­for­ma­ci­ją žur­na­luo­se. Šis fil­t­ra­vi­mas leidžia su­siau­rin­ti žurnalo įrašų paiešką iki konk­re­taus kom­po­nen­to, programos ar paslaugos vieneto. Pa­vyz­džiui, norėdami filtruoti įrašus, kuriuose yra vyk­do­ma­sis failas bash, įveskite šią komandą:

journalctl /usr/bin/bash
bash

Rodyti bran­duo­lio pra­ne­ši­mus

Žurnalo įrašų fil­t­ra­vi­mas pagal bran­duo­lio pra­ne­ši­mus su journalctl yra veiks­min­gas būdas ana­li­zuo­ti in­for­ma­ci­ją apie bran­duo­lio veikimą Linux sistemoje. Bran­duo­lio pra­ne­ši­mai gali sig­na­li­zuo­ti apie apa­ra­ti­nės įrangos problemas, tvar­kyk­lių konf­lik­tus ar kitus sistemos įvykius.

Bran­duo­lio pra­ne­ši­mus, kuriuos galima rasti dmesg išvestyje, taip pat galima filtruoti iš žurnalo. Juos galima per­žiū­rė­ti naudojant komandą `-k or ``:

journalctl -k
bash

Pagal nu­ma­ty­tuo­sius nu­sta­ty­mus rodomi da­bar­ti­nio paleidimo proceso bran­duo­lio pra­ne­ši­mai. Naudodami anksčiau minėtus paleidimo pa­si­rin­ki­mo žymes, galite filtruoti pra­ne­ši­mus iš al­ter­na­ty­vaus paleidimo. Jei, pa­vyz­džiui, norite per­žiū­rė­ti pas­ku­ti­nių penkių paleidimo procesų bran­duo­lio pra­ne­ši­mus, įveskite:

journalctl -k -b -5
bash

Žurnalo rodymo nustatymų keitimas „Jour­nalctl“

Pri­tai­kius ekrano rodymą journalctl versijoje, var­to­to­jai gali tiksliau ieškoti įvykių žur­na­luo­se ir greitai išgauti reikiamą in­for­ma­ci­ją. Var­to­to­jai gali pri­tai­ky­ti ekrano rodymą taip, kad būtų rodomi įvykių žurnalo duomenys už konkretų lai­ko­tar­pį arba realiuoju laiku, o tai padeda greitai nustatyti sistemos klaidas ir problemas.

Išvesties su­trum­pi­ni­mas arba iš­plė­ti­mas

Galite pri­tai­ky­ti, kaip journalctl rodo duomenis, su­trum­pin­da­mi arba iš­plės­da­mi išvestį. Pagal nu­ma­ty­tuo­sius nu­sta­ty­mus journalctl rodo visą įrašą pageryje ir juos išdėsto ekrano dešinėje pusėje. Išvestį galima su­trum­pin­ti naudojant --no-full parinktį:

journalctl --no-full
bash

Ekraną galite išplėsti naudodami žymę -a “:

journalctl -a
bash

Nustatyti journalctl į stan­dar­ti­nį išvesties srautą

journalctl versijoje žurnalo išvestis pagal nu­ma­ty­tuo­sius nu­sta­ty­mus rodoma naudojant pagerį, pvz., less. Tai leidžia var­to­to­jams per­žiū­rė­ti išvestį dalimis, todėl jiems lengviau naršyti po ilgus žurnalo failus. Tačiau kartais būtina rodyti stan­dar­ti­nę žurnalo išvestį. Štai kaip tai padaryti:

journalctl --no-pager
bash

Nustatyti išvesties formatus

journalctl taip pat siūlo galimybes pri­tai­ky­ti žurnalų išvesties formatą. Tam galite naudoti -o parinktį su ati­tin­ka­mu formato iden­ti­fi­ka­to­riu­mi. Pa­vyz­džiui, norėdami išvesti žurnalo įrašus JSON formatu, įveskite šį kodą:

journalctl -b -u nginx -o json
bash

Štai re­zul­ta­tas:

{ "__CURSOR" : "s=13a21661cf4948289c63075db6c25c00;i=116f1;b=81b58db8fd9046ab9f847ddb82a2fa2d;m=19f0daa;t=50e33c33587ae;x=e307daadb4858635", "__REALTIME_TIMESTAMP" : "1422990364739502", "__MONOTONIC_TIMESTAMP" : "27200938", "_BOOT_ID" : "81b58db8fd9046ab9f847ddb82a2fa2d", "PRIORITY" : "6", "_UID" : "0", "_GID" : "0", "_CAP_EFFECTIVE" : "3fffffffff", "_MACHINE_ID" : "752737531a9d1a9c1e3cb52a4ab967ee", "_HOSTNAME" : "desktop", "SYSLOG_FACILITY" : "3", "CODE_FILE" : "src/core/unit.c", "CODE_LINE" : "1402", "CODE_FUNCTION" :
bash

„Jour­nalctl“ galima naudoti šiuos formatus:

  • cat: rodo tik pranešimo lauką
  • eksportas: Dve­je­tai­nis formatas, tinkamas per­da­vi­mui ar iš­sau­go­ji­mui
  • json: Stan­dar­ti­nis JSON, po vieną įrašą eilutėje
  • json-pretty: JSON, su­for­ma­tuo­tas geresniam skaitymui
  • json-sse: su­for­ma­tuo­tas išvesties JSON, lei­džian­tis pridėti serverio siun­čia­mus įvykius
  • short: Stan­dar­ti­nis syslog stiliaus išvesties formatas
  • short-iso: Stan­dar­ti­nis formatas, skirtas rodyti ISO-8601 realaus laiko žymes
  • short-monotonic: Stan­dar­ti­nis formatas su mo­no­to­niš­kais laiko žymėmis
  • short-precise: Stan­dar­ti­nis formatas su mik­ro­se­kun­džių tikslumu
  • verbose: Rodo kiekvieną žurnalo lauką, kuris yra pri­ei­na­mas ati­tin­ka­mam įrašui

Kaip journalctl vykdo aktyvią procesų stebėseną?

Atliekant aktyvų procesų stebėjimą naudojant journalctl, ko­man­di­nės eilutės programa tail naudojama žurnalams stebėti realiuoju laiku ir rodyti nau­jau­sius įrašus. Tai leidžia lengviau stebėti sistemos įvykius realiuoju laiku ir greitai reaguoti į problemas.

Kaip per­žiū­rė­ti esamus žurnalus

Parinktį -n galima naudoti norint parodyti tam tikrą duomenų įrašų skaičių. Ji veikia lygiai taip pat kaip ir tail -n“. Norėdami parodyti pas­ku­ti­nius 10 įrašų, naudokite šią komandą:

journalctl -n
bash

Taip pat galite nustatyti įrašų skaičių, pvz., iki 20:

journalctl -n 20
bash
Go to Main Menu