# 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ähakemistossa
- `RuntimeMaxUse`: Rajoittaa lokien tallennustilaa väliaikaisessa hakemistossa

Määritä muistin enimmäismäärä lisäämällä seuraavat rivit tai muokkaamalla niitä tarpeen mukaan:

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

Tä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:

```bash
sudo systemctl restart systemd-journald
```

Nä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`:

```bash
journalctl --disk-usage
```

Tässä on esimerkki siitä, miltä tulos näyttää:

```bash
Journals take up 8.0M on disk.
```

### Poista 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.

```bash
sudo journalctl --vacuum-size=1G
```

Vaihtoehtoisesti 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:

```bash
sudo journalctl --vacuum-time=1years
```

## Mitä 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.

1. **Nykyinen käynnistys**: Valitsemalla `journalctl -b` saat näkyviin kaikki lokimerkinnät, jotka on kerätty edellisen uudelleenkäynnistyksen jälkeen.
2. **Aiemmat käynnistykset**: Käytä vaihtoehtoa `-b` ja sen jälkeen numeroa, jos haluat näyttää tietyn aiemman käynnistyksen lokimerkinnät. Jos esimerkiksi syötät `journalctl -b 1`, edellinen käynnistys tulee näkyviin.
3. **Luettelo kaikista käytettävissä olevista käynnistysprosesseista**: Komento `journalctl --list-boots` nä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:

```bash
. . . 
[Journal] 
Storage=persistent
```

### Suodata 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:

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

Näiden kahden komennon yhdistelmällä voi suodattaa tuloksia myös lyhyemmältä ajanjaksolta:

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

Vaihtoehtoisesti voit myös jättää osan muodosta pois. Jos esimerkiksi haluat näyttää kaikki tietueet tietystä ajankohdasta alkaen:

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

`journalctl` tunnistaa myös suhteelliset arvot, kuten `yesterday`, `today` tai `tomorrow`. Jos haluat näyttää eilisen merkinnät, kirjoita seuraava:

```bash
journalctl --since yesterday
```

## Kuinka 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:

```bash
journalctl -p err
```

### Suodata 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:

```bash
journalctl -u apache2
```

Hakuja voidaan tarkentaa edelleen suhteellisten aika-arvojen avulla. Jos haluat selvittää, onko palvelu jo suoritettu tänään, voit kirjoittaa seuraavat tiedot:

```bash
journalctl -u apache2 --since today
```

`journalctl` 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:

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

### Suodata 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ä:

```bash
journalctl _PID=8088
```

Vaihtoehtoisesti 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:

```bash
id -u www-data
33
```

Kirjaukset voidaan suodattaa tunnisteen perusteella:

```bash
journalctl _UID=33 --since today
```

Voit 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:

```bash
journalctl -F _GID
```

Tässä on esimerkki tuloksesta:

```bash
32
99
102
133
81
84
100
0
124
87
```

### Suodata 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:

```bash
journalctl /usr/bin/bash
```

### Nä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 ``:

```bash
journalctl -k
```

Oletuksena 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:

```bash
journalctl -k -b -5
```

## Journalctl-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:

```bash
journalctl --no-full
```

Voit laajentaa näyttöä `-a` lipulla:

```bash
journalctl -a
```

### Aseta `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:

```bash
journalctl --no-pager
```

### Mää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:

```bash
journalctl -b -u nginx -o json
```

Tässä on tulos:

```bash
{ "__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" :
```

Journalctl-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:

```bash
journalctl -n
```

Voit myös määrittää merkintöjen lukumäärän, esimerkiksi 20:

```bash
journalctl -n 20
```


This is a markdown version of: [https://www.ionos.com/fi-fi/digitalguide/palvelin/tyoekalut/journalctl/](https://www.ionos.com/fi-fi/digitalguide/palvelin/tyoekalut/journalctl/) for AI/LLM consumption.