Mikä on Journalctl ja mihin sitä voidaan käyttää?
Journalctl on tehokas ratkaisu järjestelmälokien hallintaan ja analysointiin Linux-ympäristöissä. Työkalua voidaan käyttää järjestelmän toiminnan seurantaan, vianmääritykseen ja lokien reaaliaikaiseen seurantaan, ja se tarjoaa tärkeää tietoa järjestelmäongelmien tehokkaaseen diagnosointiin.
Mikä on Journalctl?
journalctl on tehokas apuohjelma tapahtumalokien tai lokitiedostojen hakemiseen ja näyttämiseen Linux-ympäristössä. Se on keskeinen osa järjestelmä- ja palvelunhallintaohjelmistoa systemd, joka sisältyy moniin nykyaikaisiin Linux-jakeluihin, kuten Ubuntuun, Fedoraan ja Arch Linuxiin. Nimi ”journalctl” on yhdistelmä sanoista ”journal” (loki) ja ”ctl” (ohjaus), mikä viittaa siihen, että komentoa käytetään lokien hallintaan ja analysointiin.
journalctl helpottaa järjestelmälokin käyttöä, jota hallinnoi systemd-journald. Järjestelmäloki on keskitetty kokoelma viestejä ja tapahtumia, jotka syntyvät Linux-järjestelmän käytön aikana. Toisin kuin perinteiset tekstipohjaiset lokit, journalctl tarjoaa jäsennellyn ja tehokkaan tavan hakea, suodattaa ja näyttää lokitietoja reaaliajassa. Tämä voi auttaa ongelmien diagnosoinnissa tai järjestelmän tilan seurannassa.
Tätä varten Journalctl tallentaa lokitiedostot binäärimuodossa, sillä binäärilokitiedostot ovat tiiviimpiä ja tehokkaampia kuin vastaavat tekstitiedostot. Lokitietojen suuren määrän vuoksi tämä mahdollistaa tiettyjen tapahtumien tai tietojen nopeamman ja tehokkaamman haun lokitiedostoista. Rakenteellisen ja salatun luonteensa ansiosta binäärilokitiedostot tarjoavat myös paremman tietoturvan kuin tekstitiedostot, sillä niiden muoto vaikeuttaa lokitietojen manipulointia.
Kuinka säätää lokitiedostojen tallennustilaa
journalctl avulla voidaan rajoittaa ja määrittää lokitiedostojen käyttämää tallennustilaa kiintolevyllä. Tämä tapahtuu systemd-journald-palvelun asetusten kautta. Määritykset tallennetaan tiedostoon /etc/systemd/journald.conf. Siellä on seuraavat merkinnät:
SystemMaxUse: Rajoittaa lokitiedostojen tallennustilaa järjestelmähakemistossaRuntimeMaxUse: Rajoittaa lokien tallennustilaa väliaikaisessa hakemistossa
Määritä muistin enimmäismäärä lisäämällä seuraavat rivit tai muokkaamalla niitä tarpeen mukaan:
[Journal]
SystemMaxUse=50M
RuntimeMaxUse=50MbashTämän esimerkin arvoja (50M) voi muokata tarpeen mukaan. Voit käyttää myös muita yksiköitä, kuten K (kilotavua), M (megatavua), G (gigatavua) tai T (teratavua). Kun olet muokannut asetustiedostoa, systemd-journald on käynnistettävä uudelleen, jotta muutokset astuvat voimaan:
sudo systemctl restart systemd-journaldbashNäiden ohjeiden avulla systemd-journald määritetään rajoittamaan lokitiedostojen levytilaa. Varmista, että valitsemasi raja riittää välttämättömien lokitietojen tallentamiseen. Samalla on tärkeää välttää liian suuren levytilan käyttöä. Muista, että vanhemmat lokit poistetaan automaattisesti, kun varattu levytila on täyttynyt.
Arvioi levytilan käyttö
Ennen kuin säädät lokitiedostojen tallennustilaa, tarkista, kuinka paljon tilaa lokitiedostot tällä hetkellä vievät. Voit tehdä tämän komennolla --disk-usage:
journalctl --disk-usagebashTässä on esimerkki siitä, miltä tulos näyttää:
Journals take up 8.0M on disk.bashPoista vanhat lokimerkinnät
Jos Journal vie liikaa muistia, voit poistaa vanhoja lokimerkintöjä. Tähän on kaksi tapaa:
Käytä --vacuum-size pienentääksesi lokitiedoston kokoa määrittämällä sen koon. Tällä menetelmällä vanhoja merkintöjä poistetaan, kunnes lokitiedoston käyttämä kokonaiskapasiteetti kiintolevyllä on saavuttanut halutun koon.
sudo journalctl --vacuum-size=1GbashVaihtoehtoisesti voit pienentää lokitiedoston kokoa asettamalla säilytysajan vaihtoehdolla --vacuum-time. Määritettyä aikaa vanhemmat merkinnät poistetaan. Jos haluat säilyttää viimeisen vuoden lokimerkinnät, voit käyttää seuraavaa komentoa:
sudo journalctl --vacuum-time=1yearsbashMitä Journalctl pystyy tekemään?
journalctl tarjoaa tehokkaat suodatusominaisuudet, joiden avulla käyttäjät voivat lajitella lokimerkintöjä eri kriteerien perusteella. Tämän ominaisuuden avulla voidaan etsiä kohdennetusti olennaista tietoa, mikä nopeuttaa ongelmien tunnistamista. Tässä on muutamia yleisesti käytettyjä journalctl suodatinvaihtoehtoa:
Näytä lokit
Komentoa journalctl suorittamalla nykyisen järjestelmän lokimerkinnät näytetään käänteisessä aikajärjestyksessä. Käytä komento journalctl -f tai journalctl --follow, jos haluat nähdä merkinnät reaaliajassa. Uudet merkinnät näkyvät automaattisesti saapumisjärjestyksessä.
Riippuen siitä, kuinka kauan systemd on ollut käynnissä järjestelmässäsi, näytölle tulee todennäköisesti hallitsematon määrä tietoja, joka voi olla kymmeniä tai satoja tuhansia rivejä pitkä. Löytääksesi etsimäsi tiedot nopeammin, voit suodattaa lokitiedostoja edelleen erilaisilla Linux-komennoilla.
Kuinka suodattaa ajan mukaan
Käyttämällä journalctl lokitiedostoja voidaan suodattaa tietyn ajankohdan mukaan, jolloin niistä löytyy helpommin etsittyä tietoa.
Suodata käynnistysprosessin mukaan
Lokien suodattaminen käynnistysprosessin perusteella on korvaamatonta apua, kun halutaan tutkia järjestelmän tapahtumia tietyillä ajankohtilla tai käynnistystilanteissa. Tämä kohdennettu lähestymistapa tehostaa vianmääritystä, sillä se keskittää lokimerkinnät tiettyihin järjestelmän tiloihin tai kokoonpanoihin.
- Nykyinen käynnistys: Valitsemalla
journalctl -bsaat näkyviin kaikki lokimerkinnät, jotka on kerätty edellisen uudelleenkäynnistyksen jälkeen. - Aiemmat käynnistykset: Käytä vaihtoehtoa
-bja sen jälkeen numeroa, jos haluat näyttää tietyn aiemman käynnistyksen lokimerkinnät. Jos esimerkiksi syötätjournalctl -b 1, edellinen käynnistys tulee näkyviin. - Luettelo kaikista käytettävissä olevista käynnistysprosesseista: Komento
journalctl --list-bootsnäyttää luettelon käytettävissä olevista käynnistyksistä ja niiden tunnuksista. Voit käyttää haluamaasi käynnistystunnusta tietyn käynnistyksen lokien näyttämiseen.
Vaikka aiempien käynnistysprosessien tallennus on oletusarvoisesti käytössä joissakin Linux-jakeluissa, käyttäjien on joissakin tapauksissa ensin otettava se käyttöön. Tee tämä luomalla hakemisto, johon loki tallennetaan, kirjoittamalla sudo mkdir -p /var/log/journal. Vaihtoehtoisesti voit muokata journal-määritystiedostoa komennolla sudo nano /etc/systemd/journald.conf. Aseta sitten kohdassa [Journal] oleva asetus Storage= arvoksi persistent, jotta jatkuva lokitallennus otetaan käyttöön:
. . .
[Journal]
Storage=persistentbashSuodata aikavälin mukaan
Joskus voi olla tarpeen näyttää tietyn ajanjakson lokimerkinnät. journalctl on vaihtoehdot --since ja --until, joiden avulla merkinnät voidaan rajata tiettyyn ajanjaksoon. Tätä varten käytetään aikamuotoa YYYY-MM-DD HH:MM:SS. Komento, jolla näytetään kaikki lokimerkinnät ajalta 1.1.2023 klo 12.00 – 2.1.2023 klo 12.00, on seuraava:
journalctl --since "2023-01-01 12:00:00" --until "2023-01-02 12:00:00"bashNäiden kahden komennon yhdistelmällä voi suodattaa tuloksia myös lyhyemmältä ajanjaksolta:
journalctl --since 09:00 --until "1 hour ago"bashVaihtoehtoisesti voit myös jättää osan muodosta pois. Jos esimerkiksi haluat näyttää kaikki tietueet tietystä ajankohdasta alkaen:
journalctl --since "2023-11-16 15:25:00"bashjournalctl tunnistaa myös suhteelliset arvot, kuten yesterday, today tai tomorrow. Jos haluat näyttää eilisen merkinnät, kirjoita seuraava:
journalctl --since yesterdaybashKuinka suodattaa viestien ominaisuuksien perusteella
journalctl käyttö lokimerkintöjen suodattamiseen niiden tärkeyden tai sisällön perusteella on myös erittäin hyödyllistä, sillä sen avulla voi etsiä olennaista tietoa ja keskittyä järjestelmälokien tiettyihin osa-alueisiin. Tämä mahdollistaa muun muassa tehokkaan vianmäärityksen, tietoturvaongelmien varhaisen havaitsemisen ja suorituskyvyn nopean seurannan.
Suodata tärkeysjärjestyksen mukaan
Voit suodattaa journalctl n lokit viestien tärkeyden mukaan käyttämällä lokimerkintöjen prioriteettiluokkia. Tätä varten voit käyttää joko prioriteetin nimeä tai sitä vastaavaa numeerista arvoa. Mitä pienempi luku, sitä tärkeämpi viesti on:
- 0: emerg (hätätilanne)
- 1: alert (hälytys)
- 2: crit (kriittinen)
- 3: err (virhe)
- 4: varoitus (warning)
- 5: notice (huomautus)
- 6: info (tieto)
- 7: debug (vianmääritys)
Viestit, joilla on tietty prioriteetti, voidaan suodattaa vaihtoehdolla -p. Esimerkiksi seuraava komento näyttää vain lokimerkinnät, joiden prioriteetti on ”err” (virhe) tai korkeampi:
journalctl -p errbashSuodata yksikön mukaan
Lokien suodattaminen yksiköittäin on hyödyllistä, kun halutaan keskittyä tiettyihin palveluihin tai prosesseihin. Ne voidaan suodattaa käyttämällä vaihtoehtoa -u. Jos haluat esimerkiksi näyttää Apache-verkkopalvelimen lokimerkinnät, kirjoita seuraava komento:
journalctl -u apache2bashHakuja voidaan tarkentaa edelleen suhteellisten aika-arvojen avulla. Jos haluat selvittää, onko palvelu jo suoritettu tänään, voit kirjoittaa seuraavat tiedot:
journalctl -u apache2 --since todaybashjournalctl voi yhdistää eri yksiköiden tietueita. Jos esimerkiksi Nginx-prosessisi on liitetty PHP FPM -yksikköön, niiden tietueet voidaan yhdistää aikajärjestyksessä. Komento tähän on:
journalctl -u nginx.service -u php-fpm.service --since today-u apache2 --since todaybashSuodata prosessin, käyttäjän tai ryhmän tunnuksen mukaan
Journalctl voi suodattaa lokimerkintöjä prosessin, käyttäjän tai ryhmän tunnuksen perusteella. Jos tiedät tarkalleen sen prosessin PID-tunnuksen, jota haluat etsiä, voit käyttää suodattamiseen optiota _PID. Jos PID-tunnus on esimerkiksi 8088, komento näyttäisi tältä:
journalctl _PID=8088bashVaihtoehtoisesti voit käyttää suodattimia _UID tai _GID näyttääksesi kaikki tietyn käyttäjän tai ryhmän kirjaamat merkinnät. Jos esimerkiksi verkkopalvelimesi nimi on ”www-data”, voit selvittää käyttäjätunnuksen seuraavasti:
id -u www-data
33bashKirjaukset voidaan suodattaa tunnisteen perusteella:
journalctl _UID=33 --since todaybashVoit selvittää, mille ryhmätunnuksille tietueita on luotu, käyttämällä vaihtoehtoa -F. Tämä näyttää kaikki arvot, jotka on tallennettu Ryhmätunnus-kenttään:
journalctl -F _GIDbashTässä on esimerkki tuloksesta:
32
99
102
133
81
84
100
0
124
87bashSuodata komponenttien mukaan
Suodattaminen komponentin mukaan on hyödyllistä, kun halutaan keskittyä tiettyihin sovelluksiin, palveluihin tai prosesseihin. Komponenttikenttää käyttävät yleensä erilaiset palvelut tai ohjelmistokomponentit erottamaan tiettyjä tietoja lokitiedoista. Tämän suodatuksen avulla lokimerkinnät voidaan rajata koskemaan tiettyä komponenttia, sovellusta tai palveluyksikköä. Jos esimerkiksi haluat suodattaa merkinnät, jotka sisältävät suoritustiedoston bash, kirjoita seuraava komento:
journalctl /usr/bin/bashbashNäytä ytimen viestit
Lokimerkintöjen suodattaminen ytimen viesteillä, joiden tunnus on journalctl, on tehokas tapa analysoida tietoa ytimen toiminnasta Linux-järjestelmässä. Ytimen viestit voivat antaa viitteitä laitteisto-ongelmista, ohjainristiriidoista tai muista järjestelmätapahtumista.
dmesg tulosteesta löytyvät ytimen viestit voidaan suodattaa myös journal-tiedostosta. Ne voidaan näyttää komennolla `-k or ``:
journalctl -kbashOletuksena näytetään nykyisen käynnistysprosessin ytimen viestit. Voit suodattaa viestit vaihtoehtoisesta käynnistyksestä käyttämällä aiemmin mainittuja käynnistysvalintalippuja. Jos haluat esimerkiksi tarkastella viiden viimeisen käynnistysprosessin ytimen viestejä, kirjoita:
journalctl -k -b -5bashJournalctl-komennon lokinäkymän muuttaminen
Näytön mukauttaminen journalctl antaa käyttäjille mahdollisuuden selata lokitietoja tarkemmin ja poimia tietoja nopeasti. Käyttäjät voivat mukauttaa näytön näyttämään lokitietoja tietyn ajanjakson ajalta tai reaaliajassa, mikä helpottaa järjestelmävirheiden ja ongelmien nopeaa tunnistamista.
Tuloksen lyhentäminen tai laajentaminen
Voit muokata journalctl tietojen näyttötapaa lyhentämällä tai laajentamalla tulostetta. Oletusarvoisesti journalctl näyttää koko merkinnän hakulistassa ja sijoittaa ne näytön oikealle puolelle. Tulostetta voidaan lyhentää --no-full vaihtoehdolla:
journalctl --no-fullbashVoit laajentaa näyttöä -a lipulla:
journalctl -abashAseta journalctl vakiotulostukseen
Vuonna journalctl lokitiedostojen tulostus näytettiin oletuksena sivuttaisnäyttöohjelmalla, kuten less. Tämä mahdollisti tulostuksen katselemisen osissa, mikä helpotti pitkien lokitiedostojen selaamista. On kuitenkin tilanteita, joissa lokien vakiotulostuksen näyttäminen on tarpeen. Näin se tehdään:
journalctl --no-pagerbashMääritä tulostusmuodot
journalctl tarjoaa myös vaihtoehtoja lokien tulostusmuodon mukauttamiseen. Tätä varten voit käyttää -o yhdessä asianomaisen muotoilutunnisteen kanssa. Jos haluat esimerkiksi tulostaa lokimerkinnät JSON-muodossa, kirjoita seuraava koodi:
journalctl -b -u nginx -o jsonbashTässä on tulos:
{ "__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" :bashJournalctl-komennossa voidaan käyttää seuraavia muotoja:
- cat: Näyttää vain viestikentän
- export: Siirtoon tai tallennukseen sopiva binäärimuoto
- json: Standardi-JSON, yksi merkintä riviä kohden
- json-pretty: Luettavuuden parantamiseksi muotoiltu JSON
- json-sse: Kääritty JSON-muotoiltu tuloste, joka mahdollistaa palvelimen lähettämien tapahtumien lisäämisen
- short: Vakiomuotoinen syslog-tyylinen tuloste
- short-iso: Vakiomuoto ISO-8601-kellonajan leimojen näyttämiseen
- short-monotonic: Vakiomuoto, jossa on monotoniset aikaleimat
- short-precise: Vakiomuoto, jossa tarkkuus on mikrosekunteja
- verbose: Näyttää kaikki kyseiselle merkinnälle käytettävissä olevat lokikentät
Miten journalctl toteuttaa prosessien aktiivista valvontaa?
Kun prosesseja seurataan aktiivisesti ohjelmalla journalctl, komentoriviohjelmaa tail käytetään lokien reaaliaikaiseen seurantaan ja uusimpien merkintöjen näyttämiseen. Tämä helpottaa järjestelmätapahtumien reaaliaikaista seurantaa ja mahdollistaa nopean reagoinnin ongelmiin.
Kuinka näyttää nykyiset lokit
Komennolla -n voidaan näyttää tietty määrä tietueita. Se toimii täsmälleen samalla tavalla kuin tail -n. Jos haluat näyttää viimeiset 10 tietuetta, käytä seuraavaa komentoa:
journalctl -nbashVoit myös määrittää merkintöjen lukumäärän, esimerkiksi 20:
journalctl -n 20bash