Journalctl je efektivní řešení pro správu a analýzu systémových protokolů v prostředí Linux. Tento nástroj lze použít pro monitorování systémových aktivit, řešení problémů a sledování protokolů v reálném čase, čímž poskytuje důležité informace pro efektivní diagnostiku systémových problémů.

Co je Journalctl?

journalctl je výkonný nástroj pro dotazování a zobrazování protokolů událostí nebo logových souborů v systému Linux. Jedná se o ústřední součást sady pro správu systému a služeb systemd, která je součástí mnoha moderních distribucí Linuxu, jako jsou Ubuntu, Fedora a Arch Linux. Název „journalctl“ je kombinací slov „journal“ (protokol) a „ctl“ (ovládání), což odkazuje na skutečnost, že tento příkaz se používá k ovládání a analýze protokolů.

journalctl zjednodušuje přístup k systémovému protokolu, který je spravován systemd-journald. Systémový protokol je centralizovaný soubor zpráv a událostí, které se vyskytují během provozu systému Linux. Na rozdíl od tradičních textových protokolů poskytuje journalctl strukturovaný a efektivní způsob vyhledávání, filtrování a zobrazování dat protokolu v reálném čase. To může pomoci při diagnostice problémů nebo monitorování stavu systému.

Za tímto účelem ukládá Journalctl logové soubory v binárním formátu, protože binární logové soubory jsou kompaktnější a efektivnější než jejich textové ekvivalenty. Vzhledem k velkému množství zaznamenaných dat to umožňuje rychlejší a efektivnější vyhledávání konkrétních událostí nebo informací v logových souborech. Díky své strukturované a šifrované povaze poskytují binární logové soubory také vyšší bezpečnost ve srovnání s textovými logy, protože jejich formát ztěžuje manipulaci s logovými daty.

Jak upravit úložný prostor pro soubory protokolu

journalctl lze použít k omezení a konfiguraci úložného prostoru, který logové soubory zabírají na pevném disku. To se provádí prostřednictvím nastavení služby systemd-journald. Konfigurační nastavení jsou uložena v souboru /etc/systemd/journald.conf. Zde najdete následující položky:

  • SystemMaxUse: Omezuje úložný prostor pro protokoly v systémovém adresáři
  • RuntimeMaxUse: Omezuje úložný prostor pro protokoly v dočasném adresáři

Chcete-li nastavit limit paměti, přidejte následující řádky nebo je podle potřeby změňte:

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

Hodnoty z tohoto příkladu (50M) lze podle potřeby upravit. Můžete také použít jiné jednotky, například K (kilobajty), M (megabajty), G (gigabajty) nebo T (terabajty). Po úpravě konfiguračního souboru je nutné restartovat systém systemd-journald, aby se změny projevily:

sudo systemctl restart systemd-journald
bash

Po provedení těchto kroků bude systém systemd-journald nakonfigurován tak, aby omezil místo na disku pro soubory protokolu. Ujistěte se, že zvolený limit umožňuje dostatečné uložení důležitých dat protokolu. Zároveň je důležité zabránit nadměrnému využívání místa na disku. Mějte na paměti, že starší protokoly jsou automaticky odstraněny, jakmile je dosaženo limitu přiděleného místa na disku.

Posoudit využití místa na disku

Před úpravou úložného prostoru pro soubory protokolu zkontrolujte, kolik úložného prostoru aktuálně zabírá deník. K tomu použijte --disk-usage:

journalctl --disk-usage
bash

Zde je příklad toho, jak vypadá výstup:

Journals take up 8.0M on disk.
bash

Odstranit staré položky protokolu

Pokud Journal zabírá příliš mnoho paměti, můžete smazat staré záznamy protokolu. Existují dva způsoby, jak to provést:

Pomocí --vacuum-size můžete zmenšit velikost deníku zadáním požadované velikosti. Při použití této metody se staré záznamy odstraňují, dokud celková velikost deníku na pevném disku nedosáhne požadované velikosti.

sudo journalctl --vacuum-size=1G
bash

Alternativně můžete deník zmenšit nastavením doby uchovávání pomocí volby --vacuum-time. Záznamy starší než zadaná doba budou odstraněny. Chcete-li uchovat záznamy z minulého roku, můžete použít následující příkaz:

sudo journalctl --vacuum-time=1years
bash

Co umí Journalctl?

journalctl nabízí výkonné funkce filtrování, které uživatelům umožňují procházet záznamy protokolu na základě různých kritérií. Tato funkce umožňuje cílené vyhledávání relevantních informací, což usnadňuje rychlejší identifikaci problémů. Zde je několik běžně používaných možností filtrování journalctl:

Zobrazit protokoly

Provedením příkazu journalctl se zobrazí záznamy protokolu pro aktuální systém v obráceném chronologickém pořadí. Pomocí journalctl -f nebo journalctl --follow lze zobrazit záznamy v reálném čase. Nové záznamy se automaticky zobrazují v pořadí, v jakém přicházejí.

V závislosti na tom, jak dlouho systém systemd ve vašem systému běží, se vám pravděpodobně zobrazí neovladatelné množství dat, které může mít desítky nebo stovky tisíc řádků. Abyste rychleji našli to, co hledáte, můžete protokoly dále filtrovat pomocí různých příkazů Linuxu.

Jak filtrovat podle času

Pomocí journalctl lze protokoly filtrovat podle konkrétního časového bodu, aby bylo možné v nich efektivněji vyhledávat relevantní informace.

Filtrovat podle procesu spouštění

Filtrování protokolů podle procesu spouštění se ukazuje jako neocenitelné pro zkoumání systémových událostí v přesných časech nebo během scénářů spouštění. Tento cílený přístup zefektivňuje diagnostiku problémů tím, že se zaměřuje na záznamy protokolu týkající se konkrétních stavů nebo konfigurací systému.

  1. Aktuální spuštění: Pomocí journalctl -b se zobrazí všechny položky protokolu, které byly shromážděny od posledního restartu.
  2. Minulé spuštění: Pomocí volby -b následované číslem zobrazíte záznamy protokolu pro konkrétní předchozí spuštění. Pokud například zadáte journalctl -b 1, zobrazí se předchozí spuštění.
  3. Seznam všech dostupných procesů spouštění: Příkaz journalctl --list-boots zobrazí seznam dostupných spuštění s příslušnými ID. Pomocí požadovaného ID spuštění můžete zobrazit protokoly pro konkrétní spuštění.

Zatímco u některých distribucí Linuxu je ukládání minulých procesů spouštění aktivováno ve výchozím nastavení, u jiných distribucí jej uživatelé mohou nejprve aktivovat. Chcete-li to provést, vytvořte adresář, do kterého se bude protokol ukládat, zadáním sudo mkdir -p /var/log/journal. Alternativně můžete upravit konfigurační soubor deníku pomocí sudo nano /etc/systemd/journald.conf. Poté nastavte možnost Storage= pod [Journal] na persistent, aby se aktivovalo trvalé protokolování:

. . . 
[Journal] 
Storage=persistent
bash

Filtrovat podle časového okna

Někdy může být nutné zobrazit záznamy protokolu za určité časové období. journalctl nabízí možnosti --since a --until, které lze použít k omezení záznamů na určité období. K tomu použijte časový formát YYYY-MM-DD HH:MM:SS. Příkaz k zobrazení všech záznamů protokolu mezi 1. lednem 2023 v 12:00 a 2. lednem 2023 v 12:00 vypadá takto:

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

Kombinace těchto dvou příkazů může také filtrovat za kratší časové období:

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

Alternativně můžete také vynechat části formátu. Například pokud chcete zobrazit všechny záznamy od určitého časového bodu:

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

journalctl také rozpoznává relativní hodnoty, jako jsou yesterday, today nebo tomorrow. Chcete-li zobrazit záznamy ze včerejška, zadejte následující:

journalctl --since yesterday
bash

Jak filtrovat podle charakteristik zprávy

Použití journalctl k filtrování záznamů protokolu podle důležitosti nebo obsahu je také velmi užitečné, protože umožňuje vyhledávat relevantní informace a soustředit se na konkrétní aspekty systémových protokolů. To mimo jiné umožňuje efektivní diagnostiku chyb, včasné odhalení bezpečnostních problémů a rychlé sledování výkonu.

Filtrovat podle priority

Chcete-li filtrovat protokoly s journalctl podle důležitosti zprávy, můžete použít kategorie priority pro položky protokolu. K tomu můžete použít buď název priority, nebo odpovídající číselnou hodnotu. Čím nižší číslo, tím důležitější je zpráva:

  • 0: emerg (nouzový stav)
  • 1: alert (výstraha)
  • 2: kritický stav (kritický)
  • 3: err (chyba)
  • 4: varování (varování)
  • 5: notice (poznámka)
  • 6: info (informace)
  • 7: debug (odstraňování chyb)

Zprávy s určitou prioritou lze filtrovat pomocí volby -p. Například následující příkaz zobrazí pouze záznamy protokolu s prioritou „err“ (chyba) a vyšší:

journalctl -p err
bash

Filtrovat podle jednotky

Filtrování protokolů podle jednotky je užitečné pro zaměření se na konkrétní služby nebo procesy. Ty lze filtrovat pomocí možnosti -u. Chcete-li například zobrazit položky protokolu pro webový server Apache, zadejte následující příkaz:

journalctl -u apache2
bash

Vyhledávání lze dále upřesnit pomocí relativních časových hodnot. Chcete-li zjistit, zda byla služba již dnes provedena, můžete zadat následující:

journalctl -u apache2 --since today
bash

journalctl může sloučit datové záznamy z různých jednotek. Například pokud je váš proces Nginx propojen s jednotkou PHP FPM, jejich záznamy lze sloučit chronologicky. Příkaz pro tento účel je:

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

Filtrovat podle procesu, uživatele nebo ID skupiny

Journalctl může filtrovat záznamy protokolu podle ID procesu, uživatele nebo skupiny. Pokud znáte přesné PID procesu, který chcete vyhledat, můžete k filtrování záznamů použít možnost _PID. Například pokud je PID 8088, příkaz bude vypadat takto:

journalctl _PID=8088
bash

Alternativně můžete použít filtry _UID nebo _GID k zobrazení všech záznamů zaznamenaných konkrétním uživatelem nebo skupinou. Pokud se například váš webový server jmenuje „www-data“, můžete zjistit ID uživatele následujícím způsobem:

id -u www-data
33
bash

Zápisy v deníku lze filtrovat pomocí ID:

journalctl _UID=33 --since today
bash

Chcete-li zjistit, pro které položky ID skupiny byly vytvořeny, můžete použít možnost -F. Zobrazí se všechny hodnoty, které byly uloženy pro pole ID skupiny:

journalctl -F _GID
bash

Zde je příklad výstupu:

32
99
102
133
81
84
100
0
124
87
bash

Filtrovat podle komponenty

Filtrování podle komponenty je užitečné pro soustředění se na konkrétní aplikace, služby nebo procesy. Pole komponenty se obvykle používá různými službami nebo softwarovými komponentami k rozlišení konkrétních informací v protokolech. Toto filtrování umožňuje zúžit položky protokolu na konkrétní komponentu, aplikaci nebo službu. Chcete-li například filtrovat položky obsahující spustitelný soubor bash, zadejte následující příkaz:

journalctl /usr/bin/bash
bash

Zobrazit zprávy jádra

Filtrování záznamů protokolu pro zprávy jádra s journalctl je účinným způsobem, jak analyzovat informace o provozu jádra v systému Linux. Zprávy jádra mohou poskytovat informace o hardwarových problémech, konfliktech ovladačů nebo jiných systémových událostech.

Zprávy jádra, které lze najít ve výstupu dmesg, lze také filtrovat z deníku. Lze je zobrazit pomocí příznaků `-k or ``:

journalctl -k
bash

Ve výchozím nastavení se zobrazují zprávy jádra aktuálního procesu zavádění systému. Pomocí výše zmíněných příznaků výběru zavádění systému můžete filtrovat zprávy z alternativního zavádění systému. Pokud například chcete zobrazit zprávy jádra posledních pěti procesů zavádění systému, zadejte:

journalctl -k -b -5
bash

Změna zobrazení deníku v Journalctl

Přizpůsobení zobrazení v journalctl umožňuje uživatelům přesněji prohledávat protokoly a rychle extrahovat informace. Uživatelé mohou přizpůsobit zobrazení tak, aby zobrazovalo data protokolu za určité období nebo v reálném čase, což usnadňuje rychlou identifikaci systémových chyb a problémů.

Zkrácení nebo rozšíření výstupu

Zobrazení dat journalctl lze přizpůsobit zkrácením nebo rozšířením výstupu. Ve výchozím nastavení journalctl zobrazuje celou položku v pageru a spouští ji na pravé straně obrazovky. Výstup lze zkrátit pomocí volby --no-full:

journalctl --no-full
bash

Zobrazení můžete rozšířit pomocí příznaku -a:

journalctl -a
bash

Nastavte journalctl na standardní výstup

V journalctl se výstup protokolu ve výchozím nastavení zobrazuje pomocí stránkovače, jako je less. To umožňuje uživatelům prohlížet výstup postupně, což jim usnadňuje procházení dlouhých souborů protokolu. Existují však situace, kdy je nutné zobrazit standardní výstup protokolů. Postupujte takto:

journalctl --no-pager
bash

Nastavit výstupní formáty

journalctl také nabízí možnosti přizpůsobení výstupního formátu protokolů. K tomu můžete použít možnost -o s příslušným identifikátorem formátu. Chcete-li například vypsat položky protokolu ve formátu JSON, zadejte následující kód:

journalctl -b -u nginx -o json
bash

Zde 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 Journalctl lze použít následující formáty:

  • cat: Zobrazí pouze pole zprávy
  • export: Binární formát vhodný pro přenos nebo ukládání
  • json: Standardní JSON s jedním záznamem na řádek
  • json-pretty: JSON formátovaný pro lepší čitelnost
  • json-sse: Formátovaný výstup JSON, který umožňuje přidávání událostí odeslaných serverem
  • short: Standardní výstup ve stylu syslog
  • short-iso: Standardní formát pro zobrazení časových značek ISO-8601
  • short-monotonic: Standardní formát s monotónními časovými značkami
  • short-precise: Standardní formát s přesností na mikrosekundy
  • verbose: Zobrazuje všechna pole deníku dostupná pro příslušný záznam

Jak journalctl provádí aktivní monitorování procesů?

Během aktivního monitorování procesů pomocí journalctl se program příkazového řádku tail používá ke sledování protokolů v reálném čase a zobrazení nejnovějších záznamů. To usnadňuje monitorování systémových událostí v reálném čase a rychlou reakci na problémy.

Jak zobrazit aktuální protokoly

Možnost -n lze použít k zobrazení konkrétního počtu datových záznamů. Funguje přesně stejným způsobem jako tail -n. Chcete-li zobrazit posledních 10 záznamů, použijte následující příkaz:

journalctl -n
bash

Můžete také nastavit počet záznamů, např. na 20:

journalctl -n 20
bash
Přejít do hlavního menu