Jour­nalctl on tõhus lahendus süs­tee­mi­lo­gide hal­da­miseks ja ana­lüü­si­miseks Linuxi kesk­kon­da­des. Seda tööriista saab kasutada süsteemi tegevuse jäl­gi­miseks, vigade kõr­val­da­miseks ja logide reaalajas jäl­gi­miseks, pakkudes olulist teavet süs­tee­mi­prob­leemide tõhusaks diag­noo­si­miseks.

Mis on Jour­nalctl?

journalctl on võimas utiliit sünd­mus­lo­gide ja lo­gi­fai­lide päringute te­ge­miseks ning ku­va­miseks Linuxis. See on süsteemi- ja tee­nus­te­hal­dus­pa­keti systemd keskne komponent, mis kuulub paljude kaas­aeg­sete Linuxi dist­ri­but­sioo­nide, nagu Ubuntu, Fedora ja Arch Linux, koosseisu. Nimi „jour­nalctl“ on sõnade „journal“ (logi) ja „ctl“ (juhtimine) liit, mis viitab asjaolule, et käsku ka­su­ta­takse logide juh­ti­miseks ja ana­lüü­si­miseks.

journalctl liht­sus­tab juur­de­pääsu süs­tee­mi­lo­gile, mida haldab systemd-journald. Süs­tee­mi­logi on Linuxi süsteemi töötamise käigus tekkivate sõnumite ja sündmuste tsent­ra­li­see­ri­tud kogum. Erinevalt tra­dit­sioo­ni­lis­test teks­ti­põ­his­test logidest pakub journalctl struk­tu­ree­ri­tud ja tõhusat viisi lo­gi­and­mete ot­si­miseks, filt­ree­ri­miseks ja ku­va­miseks reaalajas. See aitab diag­noo­sida probleeme või jälgida süsteemi seisundit.

Selleks salvestab Jour­nalctl lo­gi­fai­lid binaarses formaadis, kuna binaarsed lo­gi­fai­lid on kom­pakt­se­mad ja tõhusamad kui nende teks­ti­põ­hi­sed vasted. Ar­ves­ta­des logitud andmete suurt mahtu, võimaldab see lo­gi­fai­li­dest konk­reet­seid sündmusi või teavet kiiremini ja tõ­hu­sa­malt otsida. Tänu oma struk­tu­ree­ri­tud ja krüp­tee­ri­tud olemusele pakuvad binaarsed lo­gi­fai­lid teks­ti­põ­histe logidega võrreldes ka suuremat tur­va­li­sust, kuna nende formaat muudab lo­gi­and­mete ma­ni­pu­lee­ri­mise kee­ru­li­se­maks.

Kuidas re­gu­lee­rida lo­gi­fai­lide sal­ves­tus­ruumi

journalctl abil saab piirata ja sea­dis­tada lo­gi­fai­lide poolt kõ­va­ket­tal hõi­va­ta­vat sal­ves­tus­ruumi. Seda tehakse süs­tee­mi­tee­nuse systemd-journald seadete kaudu. Sea­dis­tused on sal­ves­ta­tud failis /etc/systemd/journald.conf. Sealt leiate järgmised kanded:

  • SystemMaxUse: Piirab lo­gi­fai­lide sal­ves­tus­ruumi süs­tee­mi­ka­ta­loo­gis
  • RuntimeMaxUse: Piirab lo­gi­fai­lide sal­ves­tus­ruumi ajutises ka­ta­loo­gis

Mä­lu­piirangu sead­miseks lisage järgmised read või muudke neid vastavalt va­ja­du­sele:

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

Selles näites esitatud väärtusi (50M) saab vastavalt va­ja­du­sele muuta. Samuti on võimalik kasutada teisi ühikuid, näiteks K (ki­lo­bai­did), M (mega­bai­tid), G (giga­bai­tid) või T (te­ra­bai­tid). Kui olete kon­fi­gu­rat­sioo­ni­faili muutnud, tuleb muutuste jõus­tu­miseks taas­käi­vi­tada systemd-journald:

sudo systemctl restart systemd-journald
bash

Nende sammude jär­gi­misel sea­dis­ta­takse systemd-journald nii, et lo­gi­fai­lide jaoks eral­da­ta­vat ket­ta­ruumi pii­ra­takse. Veenduge, et valitud piirang võimaldab olulisi lo­gi­and­meid piisavalt sal­ves­tada. Samal ajal on oluline vältida liigset ket­ta­ruumi ka­su­ta­mist. Pange tähele, et vanemad logid kus­tu­ta­takse au­to­maat­selt, kui eraldatud ket­ta­ruumi piir on täis.

Hinda ket­ta­ruumi ka­su­ta­mist

Enne lo­gi­fai­lide sal­ves­tus­ruumi suuruse muutmist kont­rol­lige, kui palju ruumi ajutine sal­ves­tus­ruum praegu hõivab. Selleks kasutage --disk-usage:

journalctl --disk-usage
bash

Siin on näide, kuidas väljund välja näeb:

Journals take up 8.0M on disk.
bash

Kustuta vanad lo­gi­kir­jed

Kui Journal võtab liiga palju mälu, saate vanad lo­gi­kir­jed kustutada. Selleks on kaks võimalust:

Kasutage --vacuum-size, et vähendada päeviku mahtu, määrates selle suuruseks soovitud väärtuse. Selle meetodi puhul kus­tu­ta­takse vanu kandeid, kuni päeviku poolt kõ­va­ket­tal hõivatud kogumaht on saa­vu­ta­nud soovitud suuruse.

sudo journalctl --vacuum-size=1G
bash

Teise või­ma­lu­sena saate logifaili mahtu vähendada, määrates valikuga --vacuum-time säi­li­ta­mis­aja. Määratud ajast vanemad kanded kus­tu­ta­takse. Eelmise aasta lo­gi­kan­nete säi­li­ta­miseks võite kasutada järgmist käsku:

sudo journalctl --vacuum-time=1years
bash

Mida suudab Jour­nalctl teha?

journalctl pakub võimsaid filt­ree­ri­mis­või­ma­lusi, mis või­mal­da­vad ka­su­ta­ja­tel lo­gi­kir­jeid erinevate kri­tee­riumide alusel läbi vaadata. See funkt­sioon võimaldab as­ja­ko­hast teavet si­hi­pä­ra­selt otsida, aidates probleeme kiiremini tuvastada. Siin on mõned sa­ge­da­mini ka­su­ta­ta­vad journalctl filt­ree­ri­mis­või­ma­lu­sed:

Näita logisid

Käsu journalctl täitmisel kuvatakse praeguse süsteemi lo­gi­kir­jed kää­nu­li­ses kro­no­loo­gi­li­ses jär­je­kor­ras. Kasutage journalctl -f või journalctl --follow, et kuvada kirjed reaalajas. Uued kirjed kuvatakse au­to­maat­selt sis­se­tu­le­vate jär­je­kor­ras.

Sõltuvalt sellest, kui kaua on systemd teie süsteemis töötanud, kuvatakse teile tõe­näo­li­selt hallamatu hulk andmeid, mis võib ulatuda küm­ne­tesse või sadadesse tu­han­de­tesse ridadesse. Et leida otsitavat kiiremini, saate logifaile erinevate Linuxi käskudega täien­da­valt filt­ree­rida.

Kuidas filt­ree­rida aja järgi

journalctl kasutades saab logifaile filt­ree­rida vastavalt kindlale ajale, et neist oleks as­ja­ko­hast teavet tõ­hu­sa­malt otsida.

Filtreeri käi­vi­ta­mis­prot­sessi järgi

Logide filt­ree­ri­mine käi­vi­ta­mis­prot­sessi järgi on hindamatu abi süs­tee­misünd­muste uurimisel kindlatel aja­het­ke­del või käi­vi­ta­mis­si­tuat­sioo­ni­des. See si­hi­pä­rane lä­he­ne­mis­viis liht­sus­tab prob­leemide diag­noo­si­mist, suunates lo­gi­kir­jed konk­reet­se­tele süsteemi sei­sun­di­tele või kon­fi­gu­rat­sioo­ni­dele.

  1. Praegune käi­vi­ta­mine: valikuga journalctl -b kuvatakse kõik lo­gi­kir­jed, mis on kogutud alates viimasest taas­käi­vi­ta­mi­sest.
  2. Eelmised käi­vi­tu­sed: Kasutage valikut -b, millele järgneb number, et kuvada konk­reetse eelmise käivituse lo­gi­kir­jed. Näiteks kui sisestate journalctl -b 1, kuvatakse eelmine käi­vi­ta­mine.
  3. Kõigi kät­te­saa­da­vate käi­vi­ta­mis­prot­ses­side loend: Käsk journalctl --list-boots kuvab loendi kät­te­saa­da­va­test käi­vi­ta­mis­test koos nende vastavate ID-dega. Saate kasutada soovitud käi­vi­ta­mise ID-d, et kuvada konk­reetse käi­vi­ta­mise logid.

Kuigi mõnes Linuxi dist­ri­but­sioo­nis on vara­se­mate käi­vi­ta­mis­prot­ses­side sal­ves­ta­mine vaikimisi sisse lülitatud, peavad kasutajad teistes dist­ri­but­sioo­ni­des selle esmalt ise ak­ti­vee­rima. Selleks looge kataloog, kuhu logi sal­ves­ta­takse, si­ses­ta­des sudo mkdir -p /var/log/journal. Teise või­ma­lu­sena võite re­di­gee­rida ajakirja kon­fi­gu­rat­sioo­ni­faili, kasutades sudo nano /etc/systemd/journald.conf. Seejärel seadke valik Storage= punktis [Journal] väär­tu­seks persistent, et ak­ti­vee­rida püsiv logimine:

. . . 
[Journal] 
Storage=persistent
bash

Filtreeri aja­va­he­miku järgi

Mõnikord võib tekkida vajadus kuvada lo­gi­kir­jed kindla aja­va­he­miku kohta. journalctl pakub valikuid --since ja --until, mille abil saab piirata kirjeid kindla aja­va­he­mi­kuga. Selleks kasutage aja­for­maati YYYY-MM-DD HH:MM:SS. Käsk, millega kuvatakse kõik lo­gi­kir­jed aja­va­he­mi­kus 1. jaanuar 2023 kell 12:00 kuni 2. jaanuar 2023 kell 12:00, näeb välja järgmine:

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

Nende kahe käsu kom­bi­nat­sioo­niga saab filt­ree­rida ka lühema aja­va­he­miku puhul:

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

Teise või­ma­lu­sena võid ka osa vor­min­gust välja jätta. Näiteks kui soovid kuvada kõiki kandeid alates teatud aja­het­kest:

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

journalctl tunnistab ka suhtelisi väärtusi, nagu yesterday, today või tomorrow. Eilsete sis­se­kan­nete ku­va­miseks sisestage järgmine käsk:

journalctl --since yesterday
bash

Kuidas filt­ree­rida sõnumite omaduste järgi

journalctl ka­su­ta­mine lo­gi­kir­jete filt­ree­ri­miseks tähtsuse või sisu alusel on samuti äärmiselt kasulik, kuna see võimaldab otsida as­ja­ko­hast teavet ja kes­ken­duda süs­tee­mi­lo­gide konk­reet­se­tele as­pek­ti­dele. See võimaldab muu hulgas tõhusat vea­diag­nos­ti­kat, tur­va­prob­leemide varast avas­ta­mist ja kiiret jõudluse jälgimist.

Filtreeri priori­teedi järgi

Sõnumite tähtsuse järgi journalctl filt­ree­ri­miseks võite kasutada lo­gi­kir­jete priori­tee­di­ka­te­goo­riaid. Selleks võite kasutada kas priori­teedi nime või selle vastavat numb­ri­list väärtust. Mida väiksem number, seda olulisem on sõnum:

  • 0: emerg (hä­da­olu­kord)
  • 1: alert (häire)
  • 2: crit (krii­ti­line)
  • 3: err (viga)
  • 4: warning (hoiatus)
  • 5: notice (märkus)
  • 6: info (teave)
  • 7: debug (veaotsing)

Teatava priori­tee­diga sõnumeid saab filt­ree­rida valiku -p abil. Näiteks kuvab järgmine käsk ainult neid lo­gi­kir­jeid, mille priori­teet on „err“ (viga) või kõrgem:

journalctl -p err
bash

Filtreeri üksuse järgi

Logide filt­ree­ri­mine üksuste kaupa on kasulik, kui soo­vi­takse kes­ken­duda konk­reet­se­tele tee­nus­tele või prot­ses­si­dele. Neid saab filt­ree­rida valiku -u abil. Näiteks Apache vee­bi­ser­veri lo­gi­kir­jete ku­va­miseks sisestage järgmine käsk:

journalctl -u apache2
bash

Otsingut saab täp­sus­tada aja­va­he­mike abil. Et teada saada, kas teenus on täna juba osutatud, võite sisestada järgmise:

journalctl -u apache2 --since today
bash

journalctl võimaldab ühendada eri üksuste and­me­kir­jeid. Näiteks kui teie Nginx-protsess on seotud PHP FPM-üksusega, saab nende kirjed kro­no­loo­gi­li­selt ühendada. Selleks on vaja kasutada järgmist käsku:

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

Filtreeri protsessi, kasutaja või grupi ID järgi

Jour­nalctl suudab lo­gi­kir­jeid filt­ree­rida protsessi, kasutaja või grupi ID järgi. Kui teate otsitava protsessi täpset PID-i, saate kirjeid filt­ree­rida valikuga _PID. Näiteks kui PID on 8088, näeks käsk välja järgmine:

journalctl _PID=8088
bash

Teise või­ma­lu­sena võite kasutada filtreid _UID või _GID, et kuvada kõik konk­reetse kasutaja või rühma poolt loodud kanded. Näiteks kui teie vee­bi­ser­veri nimi on „www-data“, saate kasutaja ID leida järg­mi­selt:

id -u www-data
33
bash

Raa­ma­tu­pi­da­mis­kan­deid saab filt­ree­rida ID järgi:

journalctl _UID=33 --since today
bash

Selleks, et teada saada, milliste rühma-ID-de jaoks on kirjed loodud, võite kasutada valikut -F. See kuvab kõik väärtused, mis on sal­ves­ta­tud väljale „Rühma-ID“:

journalctl -F _GID
bash

Siin on väljundi näide:

32
99
102
133
81
84
100
0
124
87
bash

Filtreeri kom­po­nendi järgi

Kom­po­nendi järgi filt­ree­ri­mine on kasulik, kui soo­vi­takse kes­ken­duda konk­reet­se­tele ra­ken­dus­tele, tee­nus­tele või prot­ses­si­dele. Kom­po­nendi välja kasutavad ta­va­li­selt erinevad teenused või tark­va­ra­kom­po­nen­did, et eristada logides konk­reet­set teavet. See filt­ree­ri­mine võimaldab kit­sen­dada lo­gi­kir­jeid konk­reetse kom­po­nendi, rakenduse või tee­nu­se­ühiku tasandile. Näiteks, et filt­ree­rida kirjeid, mis si­sal­da­vad käi­vi­ta­ta­vat faili bash, sisestage järgmine käsk:

journalctl /usr/bin/bash
bash

Kuva tuu­ma­tea­ted

Lo­gi­kir­jete filt­ree­ri­mine tuu­ma­tea­dete järgi numbriga journalctl on tõhus viis Linuxi süsteemi tuuma tööd käsitleva teabe ana­lüü­si­miseks. Tuu­ma­tea­ted võivad anda vihjeid riist­va­ra­prob­leemide, drai­ve­rite konf­lik­tide või muude süs­tee­misünd­muste kohta.

dmesg väljundis leiduvaid tuu­ma­sõ­nu­meid saab filt­ree­rida ka aja­kir­jast. Neid saab kuvada käsuga -k or `` koos lippudega -k or:

journalctl -k
bash

Vaikimisi kuvatakse praeguse käi­vi­ta­mis­prot­sessi tuu­ma­sõ­nu­meid. Eespool mainitud käi­vi­ta­mis­va­liku lipukeste abil saate filt­ree­rida sõnumeid teistest käi­vi­ta­mis­prot­ses­si­dest. Kui soovite näiteks vaadata viimase viie käi­vi­ta­mis­prot­sessi tuu­ma­sõ­nu­meid, sisestage:

journalctl -k -b -5
bash

Ajakirja kuvamise muutmine käsus Jour­nalctl

journalctl kuvandi ko­han­da­mine võimaldab ka­su­ta­ja­tel logifaile täpsemalt läbi otsida ja teavet kiiresti leida. Kasutajad saavad kuvandi sea­dis­tada nii, et see kuvaks lo­gi­and­meid kindla aja­va­he­miku kohta või reaalajas, mis hõlbustab süs­tee­mi­vi­gade ja prob­leemide kiiret tu­vas­ta­mist.

Väljundi lü­hen­da­mine või pi­ken­da­mine

Võite kohandada journalctl andmete kuvamist, lü­hen­da­des või laien­da­des väljundit. Vaikimisi kuvab journalctl kogu kande pageris ja jooksutab neid ekraani paremal poolel. Väljundit saab lühendada valikuga --no-full:

journalctl --no-full
bash

Ekraani saab laiendada lipuga -a:

journalctl -a
bash

Suuna journalctl stan­dard­väl­jun­disse

journalctl. ver­sioo­nis kuvatakse lo­gi­väl­jund vaikimisi pager-tüüpi prog­ram­miga, nagu näiteks less. See võimaldab ka­su­ta­ja­tel väljundit osade kaupa vaadata, mis liht­sus­tab pikkade lo­gi­fai­lide sirvimist. Siiski on olukordi, kus on vaja kuvada logide stan­dard­väl­jun­dit. Seda saab teha järg­mi­selt:

journalctl --no-pager
bash

Väl­jund­vor­min­gute määramine

journalctl pakub ka võimalusi lo­gi­fai­lide väl­jund­vor­mingu ko­han­da­miseks. Selleks võid kasutada -o koos vastava vormingu iden­ti­fi­kaa­toriga. Näiteks lo­gi­kir­jete väl­jas­ta­miseks JSON-vormingus sisesta järgmine kood:

journalctl -b -u nginx -o json
bash

Siin on tulemus:

{ "__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-is saab kasutada järgmisi formaate:

  • cat: kuvab ainult sõ­nu­mi­välja
  • eksport: edas­ta­miseks või sal­ves­ta­miseks sobiv binaarne formaat
  • json: Stan­dardne JSON, kus iga rida sisaldab ühte kirjet
  • json-pretty: paremini loetavaks vor­min­da­tud JSON
  • json-sse: vor­min­da­tud väljund, mis võimaldab lisada serveri poolt saadetud sündmusi
  • short: stan­dardne syslog-stiilis väljund
  • short-iso: stan­dard­vor­ming ISO-8601 sei­na­kella aja­mär­kide ku­va­miseks
  • short-monotonic: stan­dard­vor­ming mo­no­toon­sete aja­mär­ki­dega
  • short-precise: stan­dard­vor­ming mik­ro­se­kun­di­lise täpsusega
  • verbose: kuvab iga vastava kande jaoks kät­te­saa­dava päe­vi­ku­välja

Kuidas teostab journalctl prot­ses­side aktiivset seiret?

Prot­ses­side aktiivse jälgimise journalctligus ka­su­ta­takse kä­su­reaprog­rammi tail logide reaalajas jäl­gi­miseks ja viimaste sis­se­kan­nete ku­va­miseks. See liht­sus­tab süs­tee­misünd­muste reaalajas jälgimist ja võimaldab prob­leemi­dele kiiresti rea­gee­rida.

Kuidas kuvada prae­gu­seid logifaile

Pa­ra­meet­rit -n saab kasutada kindla arvu and­me­kir­jete ku­va­miseks. See toimib täpselt samamoodi kui parame tail -n. Viimase 10 kirje ku­va­miseks kasuta järgmist käsku:

journalctl -n
bash

Samuti saad määrata kirjetele arvu, näiteks 20:

journalctl -n 20
bash
Go to Main Menu