Journalctl je efektívne riešenie na správu a analýzu systémových protokolov v prostredí Linux. Tento nástroj možno použiť na monitorovanie systémových aktivít, riešenie problémov a sledovanie protokolov v reálnom čase, čím poskytuje dôležité informácie na efektívnu diagnostiku systémových problémov.

Čo je Journalctl?

journalctl je výkonný nástroj na vyhľadávanie a zobrazovanie protokolov udalostí alebo protokolových súborov v systéme Linux. Je to centrálna súčasť súboru nástrojov na správu systému a služieb systemd, ktorý je súčasťou mnohých moderných distribúcií Linuxu, ako sú Ubuntu, Fedora a Arch Linux. Názov „journalctl“ je kombináciou slov „journal“ (protokol) a „ctl“ (kontrola), čo odkazuje na skutočnosť, že tento príkaz sa používa na kontrolu a analýzu protokolov.

journalctl zjednodušuje prístup k systémovému protokolu, ktorý spravuje systemd-journald. Systémový protokol je centralizovaný zoznam správ a udalostí, ktoré sa vyskytujú počas prevádzky systému Linux. Na rozdiel od tradičných textových protokolov, journalctl poskytuje štruktúrovaný a efektívny spôsob vyhľadávania, filtrovania a zobrazovania údajov protokolu v reálnom čase. To môže pomôcť pri diagnostike problémov alebo monitorovaní stavu systému.

Na tento účel Journalctl ukladá log súbory v binárnom formáte, pretože binárne log súbory sú kompaktnejšie a efektívnejšie ako ich textové ekvivalenty. Vzhľadom na veľké množstvo zaznamenaných údajov to umožňuje rýchlejšie a efektívnejšie vyhľadávanie konkrétnych udalostí alebo informácií v log súboroch. Vďaka svojej štruktúrovanej a šifrovanej povahe poskytujú binárne log súbory v porovnaní s textovými logmi aj vyššiu bezpečnosť, pretože ich formát sťažuje manipuláciu s údajmi v logoch.

Ako prispôsobiť úložný priestor pre súbory protokolu

journalctl možno použiť na obmedzenie a konfiguráciu úložného priestoru, ktorý log súbory zaberajú na pevnom disku. To sa vykonáva prostredníctvom nastavení služby systemd-journald. Konfiguračné nastavenia sú uložené v súbore /etc/systemd/journald.conf. Tu nájdete nasledujúce položky:

  • SystemMaxUse: Obmedzuje úložný priestor pre protokoly v systémovom adresári
  • RuntimeMaxUse: Obmedzuje úložný priestor pre protokoly v dočasnom adresári

Na nastavenie limitu pamäte pridajte nasledujúce riadky alebo ich podľa potreby upravte:

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

Hodnoty z tohto príkladu (50M) je možné podľa potreby upraviť. Môžete použiť aj iné jednotky, napríklad K (kilobajty), M (megabajty), G (gigabajty) alebo T (terabajty). Po úprave konfiguračného súboru je potrebné reštartovať systém systemd-journald, aby sa zmeny uplatnili:

sudo systemctl restart systemd-journald
bash

Po vykonaní týchto krokov bude systém systemd-journald nakonfigurovaný tak, aby obmedzil diskový priestor pre súbory protokolov. Uistite sa, že zvolený limit umožňuje dostatočné ukladanie dôležitých údajov protokolov. Zároveň je dôležité vyhnúť sa nadmernému využívaniu diskového priestoru. Majte na pamäti, že staršie protokoly sa automaticky odstránia po dosiahnutí limitu prideleného diskového priestoru.

Posúďte využitie miesta na disku

Pred úpravou úložného priestoru pre súbory protokolu skontrolujte, koľko úložného priestoru momentálne zaberá denník. Na to použite --disk-usage:

journalctl --disk-usage
bash

Tu je príklad toho, ako vyzerá výstup:

Journals take up 8.0M on disk.
bash

Odstrániť staré záznamy protokolu

Ak Journal zaberá príliš veľa pamäte, môžete vymazať staré záznamy v protokole. Existujú dva spôsoby, ako to urobiť:

Pomocou --vacuum-size môžete znížiť veľkosť denníka zadávaním veľkosti. Týmto spôsobom sa staré záznamy odstraňujú, až kým celkový priestor na pevnom disku obsadený denníkom nedosiahne požadovanú veľkosť.

sudo journalctl --vacuum-size=1G
bash

Alternatívne môžete zmenšiť denník nastavením doby uchovávania pomocou možnosti --vacuum-time. Záznamy staršie ako stanovený čas budú odstránené. Ak chcete uchovať záznamy z minulého roka, môžete použiť nasledujúci príkaz:

sudo journalctl --vacuum-time=1years
bash

Čo dokáže Journalctl?

journalctl ponúka výkonné funkcie filtrovania, ktoré používateľom umožňujú prechádzať záznamy protokolu na základe rôznych kritérií. Táto funkcia umožňuje cielené vyhľadávanie relevantných informácií, čím uľahčuje rýchlejšiu identifikáciu problémov. Tu je niekoľko bežne používaných možností filtrovania journalctl:

Zobraziť protokoly

Vykonaním príkazu journalctl sa zobrazia záznamy protokolu pre aktuálny systém v obrátenom chronologickom poradí. Použite journalctl -f alebo journalctl --follow na zobrazenie záznamov v reálnom čase. Nové záznamy sa automaticky zobrazujú v poradí, v akom prichádzajú.

V závislosti od toho, ako dlho systém systemd beží vo vašom systéme, sa vám pravdepodobne zobrazí neovládateľné množstvo údajov, ktoré môže mať desiatky alebo stovky tisíc riadkov. Ak chcete rýchlejšie nájsť to, čo hľadáte, môžete protokoly ďalej filtrovať pomocou rôznych príkazov systému Linux.

Ako filtrovať podľa času

Pomocou journalctl je možné protokoly filtrovať podľa konkrétneho časového bodu, aby bolo možné efektívnejšie vyhľadávať relevantné informácie.

Filtrovať podľa procesu spúšťania

Filtrovanie protokolov podľa procesu spúšťania sa ukazuje ako neoceniteľné pri skúmaní systémových udalostí v presných časoch alebo počas scenárov spúšťania. Tento cielený prístup zefektívňuje diagnostiku problémov tým, že zameriava záznamy protokolov na konkrétne stavy alebo konfigurácie systému.

  1. Aktuálne spustenie: Pomocou journalctl -b sa zobrazia všetky záznamy protokolu, ktoré boli zhromaždené od posledného reštartovania.
  2. Predchádzajúce spustenia: Použite možnosť -b nasledovanú číslom, aby sa zobrazili záznamy protokolu pre konkrétne predchádzajúce spustenie. Ak napríklad zadáte journalctl -b 1, zobrazí sa predchádzajúce spustenie.
  3. Zoznam všetkých dostupných procesov spustenia: Príkaz journalctl --list-boots zobrazí zoznam dostupných spustení s ich príslušnými ID. Pomocou požadovaného ID spustenia môžete zobraziť protokoly pre konkrétne spustenie.

Zatiaľ čo u niektorých distribúcií Linuxu je ukladanie predchádzajúcich procesov spúšťania aktivované štandardne, u iných distribúcií ho používatelia musia najskôr aktivovať. Na to vytvorte adresár, do ktorého sa bude protokol ukladať, zadávaním sudo mkdir -p /var/log/journal. Prípadne môžete upraviť konfiguračný súbor protokolu pomocou sudo nano /etc/systemd/journald.conf. Potom nastavte možnosť Storage= pod [Journal] na persistent, aby ste aktivovali trvalé protokolovanie:

. . . 
[Journal] 
Storage=persistent
bash

Filtrovať podľa časového okna

Niekedy môže byť potrebné zobraziť záznamy protokolu za určité časové obdobie. journalctl ponúka možnosti --since a --until, ktoré možno použiť na obmedzenie záznamov na určité obdobie. Na to použite formát času YYYY-MM-DD HH:MM:SS. Príkaz na zobrazenie všetkých záznamov protokolu medzi 1. januárom 2023 o 12:00 a 2. januárom 2023 o 12:00 vyzerá takto:

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

Kombináciou týchto dvoch príkazov je možné filtrovať aj kratšie časové obdobie:

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

Prípadne môžete vynechať aj časti formátu. Napríklad, ak chcete zobraziť všetky záznamy od určitého časového bodu:

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

journalctl rozpoznáva aj relatívne hodnoty, ako napríklad yesterday, today alebo tomorrow. Ak chcete zobraziť záznamy z včerajška, zadajte nasledujúce údaje:

journalctl --since yesterday
bash

Ako filtrovať podľa charakteristík správ

Použitie journalctl na filtrovanie záznamov protokolu na základe dôležitosti alebo obsahu je tiež veľmi užitočné, pretože vám umožňuje vyhľadávať relevantné informácie a zamerať sa na konkrétne aspekty systémových protokolov. To umožňuje okrem iného efektívnu diagnostiku chýb, včasnú detekciu bezpečnostných problémov a rýchle monitorovanie výkonu.

Filtrovať podľa priority

Na filtrovanie protokolov s journalctl podľa dôležitosti správy môžete použiť kategórie priority pre záznamy protokolu. Na tento účel môžete použiť buď názov priority, alebo jej zodpovedajúcu číselnú hodnotu. Čím nižšie číslo, tým dôležitejšia je správa:

  • 0: núdzový stav (emergency)
  • 1: alert (výstraha)
  • 2: kritický stav (kritický)
  • 3: err (chyba)
  • 4: varovanie (varovanie)
  • 5: notice (poznámka)
  • 6: info (informácia)
  • 7: debug (odstraňovanie chýb)

Správy s určitou prioritou je možné filtrovať pomocou možnosti -p. Napríklad nasledujúci príkaz zobrazí iba záznamy protokolu s prioritou „err“ (chyba) a vyššou:

journalctl -p err
bash

Filtrovať podľa jednotky

Filtrovanie protokolov podľa jednotky je užitočné pre zameranie sa na konkrétne služby alebo procesy. Tieto sa dajú filtrovať pomocou možnosti -u. Napríklad, ak chcete zobraziť záznamy protokolu pre webový server Apache, zadajte nasledujúce:

journalctl -u apache2
bash

Vyhľadávanie je možné ďalej spresniť pomocou relatívnych časových hodnôt. Ak chcete zistiť, či bola služba dnes už vykonaná, môžete zadať nasledujúce údaje:

journalctl -u apache2 --since today
bash

journalctl môže zlúčiť dátové záznamy z rôznych jednotiek. Napríklad, ak je váš proces Nginx prepojený s jednotkou PHP FPM, ich záznamy môžu byť zlúčené chronologicky. Príkaz na to je:

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

Filtrovanie podľa procesu, používateľa alebo ID skupiny

Journalctl môže filtrovať záznamy protokolu podľa ID procesu, používateľa alebo skupiny. Ak máte presné PID procesu, ktorý chcete vyhľadať, môžete použiť možnosť _PID na filtrovanie záznamov. Napríklad, ak je PID 8088, príkaz bude vyzerať takto:

journalctl _PID=8088
bash

Alternatívne môžete použiť filtre _UID alebo _GID na zobrazenie všetkých záznamov zaznamenaných konkrétnym používateľom alebo skupinou. Ak sa napríklad váš webový server nazýva „www-data“, môžete zistiť ID používateľa takto:

id -u www-data
33
bash

Záznamy v denníku je možné filtrovať pomocou ID:

journalctl _UID=33 --since today
bash

Na určenie, pre ktoré položky ID skupiny boli vytvorené, môžete použiť možnosť -F. Táto možnosť zobrazí všetky hodnoty, ktoré boli uložené pre pole ID skupiny:

journalctl -F _GID
bash

Tu je príklad výstupu:

32
99
102
133
81
84
100
0
124
87
bash

Filtrovať podľa komponentu

Filtrovanie podľa komponentu je užitočné na zameranie sa na konkrétne aplikácie, služby alebo procesy. Pole komponentu sa zvyčajne používa v rôznych službách alebo softvérových komponentoch na rozlíšenie konkrétnych informácií v protokoloch. Toto filtrovanie umožňuje zúžiť záznamy protokolu na konkrétny komponent, aplikáciu alebo službu. Ak napríklad chcete filtrovať záznamy obsahujúce spustiteľný súbor bash, zadajte nasledujúci príkaz:

journalctl /usr/bin/bash
bash

Zobraziť správy jadra

Filtrovanie záznamov protokolu pre správy jadra s journalctl je efektívny spôsob analýzy informácií o prevádzke jadra v systéme Linux. Správy jadra môžu poskytovať informácie o hardvérových problémoch, konfliktoch ovládačov alebo iných systémových udalostiach.

Správa jadra, ktoré sa nachádzajú vo výstupe dmesg, môžu byť tiež filtrované z denníka. Môžu byť zobrazené s príznakmi `-k or ``:

journalctl -k
bash

Správa jadra aktuálneho spúšťacieho procesu sa zobrazuje štandardne. Správy z alternatívneho spúšťacieho procesu môžete filtrovať pomocou spomínaných príznakov výberu spúšťacieho procesu. Ak napríklad chcete zobraziť správy jadra z posledných piatich spúšťacích procesov, zadajte:

journalctl -k -b -5
bash

Zmena zobrazenia denníka v Journalctl

Prispôsobenie zobrazenia v journalctl umožňuje používateľom presnejšie vyhľadávať v protokoloch a rýchlo extrahovať informácie. Používatelia môžu prispôsobiť zobrazenie tak, aby zobrazovalo údaje protokolu za určité obdobie alebo v reálnom čase, čo uľahčuje rýchlu identifikáciu systémových chýb a problémov.

Skrátenie alebo rozšírenie výstupu

Môžete prispôsobiť spôsob, akým journalctl zobrazuje údaje, skrátením alebo rozšírením výstupu. Predvolene journalctl zobrazuje celý záznam v pageru a spúšťa ich na pravej strane obrazovky. Výstup je možné skrátiť pomocou možnosti --no-full:

journalctl --no-full
bash

Zobrazenie môžete rozšíriť pomocou príznaku -a:

journalctl -a
bash

Nastavte journalctl na štandardný výstup

V journalctl sa výstup protokolu štandardne zobrazuje pomocou pageru, ako je less. To umožňuje používateľom zobraziť výstup postupne, čím sa im uľahčuje navigácia v dlhých súboroch protokolov. Existujú však prípady, kedy je potrebné zobraziť štandardný výstup protokolov. Postupujte takto:

journalctl --no-pager
bash

Nastaviť výstupné formáty

journalctl ponúka aj možnosti prispôsobenia výstupného formátu protokolov. Na tento účel môžete použiť možnosť -o s príslušným identifikátorom formátu. Ak chcete napríklad vygenerovať položky protokolu vo formáte JSON, zadajte nasledujúci kód:

journalctl -b -u nginx -o json
bash

Tu je výstup:

{ "__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

V programe Journalctl možno použiť nasledujúce formáty:

  • cat: Zobrazí iba pole správy
  • export: Binárny formát vhodný na prenos alebo uloženie
  • json: Štandardný JSON s jedným záznamom na riadok
  • json-pretty: JSON formátovaný pre lepšiu čitateľnosť
  • json-sse: Formátovaný výstup JSON, ktorý umožňuje pridávať udalosti odoslané serverom
  • short: Štandardný výstup v štýle syslog
  • short-iso: Štandardný formát na zobrazenie časových značiek ISO-8601
  • short-monotonic: Štandardný formát s monotónnymi časovými značkami
  • short-precise: Štandardný formát s presnosťou na mikrosekundu
  • verbose: Zobrazuje všetky polia denníka dostupné pre príslušný záznam

Ako journalctl vykonáva aktívne monitorovanie procesov?

Počas aktívneho monitorovania procesov pomocou journalctl sa program príkazového riadku tail používa na sledovanie protokolov v reálnom čase a zobrazenie najnovších záznamov. To uľahčuje monitorovanie systémových udalostí v reálnom čase a rýchlu reakciu na problémy.

Ako zobraziť aktuálne protokoly

Možnosť -n sa dá použiť na zobrazenie konkrétneho počtu dátových záznamov. Funguje presne rovnako ako tail -n. Ak chceš zobraziť posledných 10 záznamov, použij tento príkaz:

journalctl -n
bash

Môžete nastaviť aj počet záznamov, napr. na 20:

journalctl -n 20
bash
Prejsť na hlavné menu