# Kaj je Journalctl in kaj zmore?

Journalctl je učinkovita rešitev za upravljanje in analizo sistemskih dnevnikov v okolju Linux. To orodje se lahko uporablja za spremljanje sistemskih dejavnosti, odpravljanje napak in spremljanje dnevnikov v realnem času, pri čemer zagotavlja ključne informacije za učinkovito diagnosticiranje sistemskih težav.

## Kaj je Journalctl?

`journalctl` je zmogljivo orodje za **poizvedovanje in prikazovanje dnevnikov dogodkov** ali dnevniških datotek v sistemu Linux. Je osrednji del paketa za upravljanje sistema in storitev systemd, ki je vključen v številne sodobne distribucije Linuxa, kot so Ubuntu, Fedora in Arch Linux. Ime »journalctl« je sestavljeno iz besed »journal« (dnevnik) in »ctl« (nadzor), kar nakazuje, da se ukaz uporablja za nadzor in analizo dnevnikov.

`journalctl` olajša dostop do sistemskega dnevnika, ki ga upravlja `systemd-journald`. Sistemski dnevnik je centralizirana zbirka sporočil in dogodkov, ki se pojavijo med delovanjem sistema Linux. Za razliko od tradicionalnih besedilnih dnevnikov `journalctl` omogoča strukturiran in učinkovit način iskanja, filtriranja in prikazovanja **podatkov dnevnika v realnem času**. To lahko pomaga pri diagnosticiranju težav ali spremljanju stanja sistema.

V ta namen Journalctl shranjuje **dnevniške datoteke v binarnem formatu**, saj so binarne dnevniške datoteke bolj kompaktne in učinkovite kot njihove besedilne različice. Glede na veliko količino zabeleženih podatkov to omogoča hitrejše in učinkovitejše iskanje posameznih dogodkov ali informacij v dnevniških datotekah. Zaradi svoje strukturirane in šifrirane narave binarne dnevniške datoteke v primerjavi z besedilnimi dnevniki zagotavljajo tudi večjo varnost, saj njihov format otežuje manipulacijo z dnevniškimi podatki.

## Kako prilagoditi prostor za shranjevanje dnevniških datotek

`journalctl` se lahko uporabi za omejitev in nastavitev prostora na trdem disku, ki ga zasedajo dnevniške datoteke. To se izvede prek **nastavitev storitve systemd-journald**. Nastavitve so shranjene v datoteki `/etc/systemd/journald.conf`. V njej boste našli naslednje vnose:

- `SystemMaxUse`: Omeji prostor za shranjevanje dnevnikov v sistemskem imeniku
- `RuntimeMaxUse`: Omeji prostor za shranjevanje dnevnikov v začasnem imeniku

Če želite nastaviti omejitev pomnilnika, dodajte naslednje vrstice ali jih po potrebi spremenite:

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

Vrednosti iz tega primera (50M) lahko po potrebi spremenite. Uporabite lahko tudi druge enote, kot so `K` (kilobajtov), `M` (megabajtov), `G` (gigabajtov) ali `T` (terabajtov). Ko uredite konfiguracijsko datoteko, je treba za uveljavitev sprememb ponovno zagnati program systemd-journald:

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

Če sledite tem korakom, bo program systemd-journald nastavljen tako, da bo omejil prostor na disku za datoteke dnevnikov. Prepričajte se, da izbrana omejitev omogoča zadostno shranjevanje pomembnih podatkov iz dnevnikov. Hkrati je pomembno, da ne porabite preveč prostora na disku. Upoštevajte, da **se starejši dnevniki samodejno izbrišejo**, ko je dosežena omejitev dodeljenega prostora na disku.

### Preveri porabo prostora na disku

Preden prilagodite prostor za shranjevanje dnevniških datotek, preverite, koliko prostora trenutno zaseda dnevnik. Za to uporabite `--disk-usage`:

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

Tukaj je primer, kako izgleda izpis:

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

### Izbriši stare vpise v dnevniku

Če dnevnik zavzema preveč pomnilnika, lahko izbrišete stare vpise v dnevniku. To lahko storite na dva načina:

Uporabite `--vacuum-size`, da zmanjšate velikost dnevnika tako, da določite želeno velikost. Pri tej metodi se stari vnosi odstranjujejo, dokler skupni prostor za shranjevanje dnevnika na trdem disku ne doseže želene velikosti.

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

Druga možnost je, da dnevnik skrčite tako, da z možnostjo `--vacuum-time` nastavite obdobje hrambe. Vnosi, starejši od določenega časa, bodo izbrisani. Če želite ohraniti dnevniške vnose iz preteklega leta, lahko uporabite naslednji ukaz:

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

## Kaj lahko naredi Journalctl?

`journalctl` ponuja zmogljive možnosti filtriranja, ki uporabnikom omogočajo pregledovanje **vnosov v dnevniku na podlagi različnih meril**. Ta funkcija omogoča ciljno iskanje relevantnih informacij, kar pospeši odkrivanje težav. Tukaj je nekaj pogosto uporabljanih možnosti `journalctl`:

### Prikaži dnevnike

Z izvedbo ukaza `journalctl` se prikažejo vnosi dnevnika za trenutni sistem v obratnem kronološkem vrstnem redu. Z ukazoma `journalctl -f` ali `journalctl --follow` lahko vnose prikažete **v realnem času**. Novi vnosi se samodejno prikažejo v vrstnem redu, v katerem prispejo.

Glede na to, kako dolgo sistemd že deluje v vašem sistemu, se bo verjetno prikazala ogromna količina podatkov, ki lahko obsega več deset ali celo več sto tisoč vrstic. Da bi lažje našli tisto, kar iščete, lahko dnevnike dodatno filtrirate z različnimi ukazi v sistemu Linux.

## Kako filtrirati po času

Z uporabo `journalctl` je mogoče dnevnike filtrirati glede na določen časovni trenutek, kar omogoča učinkovitejše iskanje relevantnih informacij.

### Filtriraj po zagonskem procesu

Filtriranje dnevnikov po postopku zagona se izkaže za neprecenljivo pri preučevanju sistemskih dogodkov v natančno določenih časovnih trenutkih ali med različnimi scenariji zagona. Ta ciljno usmerjen pristop poenostavi diagnosticiranje težav, saj dnevniške vpise osredotoči na določene sistemske stanje ali konfiguracije.

1. **Trenutni zagon**: Z `journalctl -b` se prikažejo vsi vnosi v dnevniku, zbrani od zadnjega ponovnega zagona.
2. **Pretekli zagoni**: Uporabite možnost `-b`, ki ji sledi številka, da prikažete vpise v dnevniku za določen pretekli zagon. Če na primer vnesete `journalctl -b 1`, se prikaže pretekli zagon.
3. **Seznam vseh razpoložljivih zagonskih procesov**: Ukaz `journalctl --list-boots` prikaže seznam razpoložljivih zagonskih procesov z njihovimi ID-ji. Z želenim ID-jem zagonskega procesa lahko prikažete dnevnike za določen zagonski proces.

Čeprav je shranjevanje preteklih zagonskih postopkov v nekaterih distribucijah Linuxa privzeto omogočeno, ga bodo uporabniki v drugih distribucijah morda morali **najprej vklopiti**. Za to ustvarite mapo, v katero se bo dnevnik shranjeval, tako da vnesete `sudo mkdir -p /var/log/journal`. Druga možnost je, da uredite konfiguracijsko datoteko dnevnika s `sudo nano /etc/systemd/journald.conf`. Nato nastavite možnost `Storage=` pod `[Journal]` na `persistent`, da vklopite trajno beleženje:

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

### Filtriraj po časovnem oknu

Včasih je morda potrebno prikazati vpise v dnevniku za določeno časovno obdobje. `journalctl` ponuja možnosti `--since` in `--until`, s katerimi lahko omejite vpise na **določeno obdobje**. Za to uporabite časovni format `YYYY-MM-DD HH:MM:SS`. Ukaz za prikaz vseh vpisov v dnevniku med 1. januarjem 2023 ob 12:00 in 2. januarjem 2023 ob 12:00 je naslednji:

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

Z združitvijo teh dveh ukazov lahko filtrirate tudi za krajše časovno obdobje:

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

Lahko pa tudi izpustite dele formata. Če na primer želite prikazati vse vnose od določenega časovnega trenutka naprej:

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

`journalctl` prepozna tudi relativne vrednosti, kot so `yesterday`, `today` ali `tomorrow`. Če želite prikazati vnose iz včerajšnjega dne, vnesite naslednje:

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

## Kako filtrirati po značilnostih sporočil

Uporaba `journalctl` za filtriranje dnevniških vnosov glede na pomembnost ali vsebino je prav tako izredno koristna, saj omogoča **iskanje relevantnih informacij in osredotočenje na določene vidike sistemskih dnevnikov**. To med drugim omogoča učinkovito odkrivanje napak, zgodnje zaznavanje varnostnih težav in hitro spremljanje delovanja sistema.

### Filtriraj po pomembnosti

Če želite dnevnike s `journalctl` filtrirati po pomembnosti sporočil, lahko uporabite **kategorije prednosti za vpise v dnevniku**. Za to lahko uporabite ime prednosti ali ustrezno številčno vrednost. Nižja kot je številka, pomembnejše je sporočilo:

- 0: emerg (nujni primer)
- 1: alert (alarm)
- 2: krit (kritično)
- 3: err (napaka)
- 4: warning (opozorilo)
- 5: obvestilo (opomba)
- 6: info (informacija)
- 7: debug (odpravljanje napak)

Sporočila z določeno prioriteto je mogoče filtrirati z uporabo opcije `-p`. Na primer, naslednji ukaz prikaže le vpise v dnevniku s prioriteto »err« (napaka) ali višjo:

```bash
journalctl -p err
```

### Filtriraj po enoti

Filtriranje dnevnikov po enoti je koristno, če se želite osredotočiti na določene storitve ali procese. Te lahko filtrirate z uporabo možnosti `-u`. Če želite na primer prikazati vpise v dnevniku za spletni strežnik Apache, vnesite naslednje:

```bash
journalctl -u apache2
```

Iskanje lahko dodatno omejite z uporabo časovnih vrednosti. Če želite ugotoviti, ali je bila storitev danes že opravljena, vnesite naslednje:

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

`journalctl` lahko združi zapise podatkov iz različnih enot. Če je na primer vaš proces Nginx povezan z enoto PHP FPM, se lahko njuni zapisi združijo po časovnem zaporedju. Ukaz za to je:

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

### Filtriraj po ID-ju procesa, uporabnika ali skupine

Journalctl lahko filtrira vpise v dnevniku po ID-ju procesa, uporabnika ali skupine. Če poznate **natančno PID š** te **vilko procesa, ki ga** želite poiskati, lahko za filtriranje vpisov uporabite opcijo `_PID`. Če je na primer PID 8088, bi ukaz izgledal takole:

```bash
journalctl _PID=8088
```

Poleg tega lahko uporabite filtre `_UID` ali `_GID` za prikaz vseh vnosov, ki jih je zabeležil določen uporabnik ali skupina. Če se na primer vaš spletni strežnik imenuje »www-data«, lahko ID uporabnika poiščete tako, da storite naslednje:

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

Vknjižbe je mogoče filtrirati po identifikacijski številki:

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

Če želite ugotoviti, za katere ID-je skupin so bili vnosi ustvarjeni, lahko uporabite možnost `-F`. S tem se prikažejo vse vrednosti, ki so bile shranjene v polju »ID skupine«:

```bash
journalctl -F _GID
```

Tukaj je primer izpisa:

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

### Filtriraj po komponenti

Filtriranje po komponenti je koristno za osredotočanje na določene aplikacije, storitve ali procese. Polje »komponenta« običajno uporabljajo **različne storitve ali programske komponente** za razlikovanje določenih informacij v dnevnikih. To filtriranje omogoča omejitev vnosov v dnevniku na določeno komponento, aplikacijo ali storitveno enoto. Če želite na primer filtrirati vnose, ki vsebujejo izvedljivo datoteko `bash`, vnesite naslednji ukaz:

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

### Prikaži sporočila jedra

Filtriranje dnevniških vnosov za sporočila jedra s `journalctl` je učinkovit način za analizo podatkov o delovanju jedra v sistemu Linux. Sporočila jedra lahko **nakazujejo težave s strojno opremo, konflikte med gonilniki ali druge sistemske dogodke**.

Sporočila jedra, ki jih najdemo v izpisu `dmesg`, je mogoče filtrirati tudi iz dnevnika. Prikazati jih je mogoče z ukazom `-k or ``:

```bash
journalctl -k
```

Privzeto se prikazujejo sporočila jedra iz trenutnega zagonskega procesa. Sporočila iz **alternativnega zagona** lahko filtrirate s pomočjo prej omenjenih zastavic za izbiro zagona. Če želite na primer pregledati sporočila jedra iz zadnjih petih zagonskih procesov, vnesite:

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

## Spreminjanje prikaza dnevnika v Journalctl

Prilagajanje prikaza v `journalctl` omogoča uporabnikom natančnejše iskanje po dnevnikih in hitro pridobivanje informacij. Uporabniki lahko prilagodijo prikaz tako, da se podatki iz dnevnikov prikazujejo za določeno obdobje ali v realnem času, kar olajša hitro odkrivanje sistemskih napak in težav.

### Skrajšanje ali podaljšanje izhoda

Način prikazovanja podatkov `journalctl` lahko prilagodite tako, da skrajšate ali razširite izpis. Privzeto `journalctl` v pagerju prikaže celoten vnos in ga izpiše na desni strani zaslona. Izpis lahko skrajšate z možnostjo `--no-full`:

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

Prikaz lahko razširite z uporabo oznake `-a`:

```bash
journalctl -a
```

### Nastavi `journalctl` na standardni izhod

V `journalctl` se izpis dnevnika privzeto prikaže v obliki, podobni `less`. To uporabnikom omogoča, da si izpis ogledujejo po delih, kar jim olajša brskanje po obsežnih dnevniških datotekah. Vendar pa se včasih zgodi, da je potrebno prikazati standardni izpis dnevnika. Tako to storite:

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

### Nastavi izhodne oblike

`journalctl` ponuja tudi možnosti za prilagajanje izhodnega formata dnevnikov. Za to lahko uporabite možnost `-o` z ustreznim identifikatorjem formata. Če želite na primer izpisati vpise v dnevniku v formatu JSON, vnesite naslednjo kodo:

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

Tukaj je izpis:

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

V Journalctl je mogoče uporabiti naslednje oblike:

- **cat**: Prikaže samo polje za sporočilo
- **export**: Binarni format, primeren za prenos ali shranjevanje
- **json**: Standardni JSON z enim vnosom na vrstico
- **json-pretty**: JSON, oblikovan za boljšo berljivost
- **json-sse**: Oblikovana izhodna JSON-datoteka, ki omogoča dodajanje dogodkov, poslanih s strežnika
- **short**: Standardni izpis v slogu syslog
- **short-iso**: Standardni format za prikaz časovnih žigov po standardu ISO-8601
- **short-monotonic**: Standardni format z monotonimi časovnimi oznakami
- **short-precise**: Standardni format z natančnostjo do mikrosekunde
- **verbose**: Prikaže vsa polja dnevnika, ki so na voljo za zadevni vnos

## Kako `journalctl` izvaja aktivno spremljanje procesov?

Med aktivnim spremljanjem procesov s `journalctl` se program za ukazno vrstico `tail` uporablja za spremljanje dnevnikov v realnem času in prikaz najnovejših vnosov. To olajša spremljanje sistemskih dogodkov v realnem času in omogoča hiter odziv na težave.

## Kako prikazati trenutne dnevnike

Z možnostjo `-n` lahko prikažete določeno število podatkovnih zapisov. Deluje popolnoma enako kot `tail -n`. Če želite prikazati zadnjih 10 vnosov, uporabite naslednji ukaz:

```bash
journalctl -n
```

Prav tako lahko nastavite število vnosov, npr. na 20:

```bash
journalctl -n 20
```


This is a markdown version of: [https://www.ionos.com/sl-si/digitalguide/streznik/orodja/journalctl/](https://www.ionos.com/sl-si/digitalguide/streznik/orodja/journalctl/) for AI/LLM consumption.