Co je Journalctl a k čemu slouží?
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ářiRuntimeMaxUse: 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=50MbashHodnoty 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-journaldbashPo 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-usagebashZde je příklad toho, jak vypadá výstup:
Journals take up 8.0M on disk.bashOdstranit 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=1GbashAlternativně 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=1yearsbashCo 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.
- Aktuální spuštění: Pomocí
journalctl -bse zobrazí všechny položky protokolu, které byly shromážděny od posledního restartu. - Minulé spuštění: Pomocí volby
-bnásledované číslem zobrazíte záznamy protokolu pro konkrétní předchozí spuštění. Pokud například zadátejournalctl -b 1, zobrazí se předchozí spuštění. - Seznam všech dostupných procesů spouštění: Příkaz
journalctl --list-bootszobrazí 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=persistentbashFiltrovat 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"bashKombinace těchto dvou příkazů může také filtrovat za kratší časové období:
journalctl --since 09:00 --until "1 hour ago"bashAlternativně 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"bashjournalctl 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 yesterdaybashJak 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 errbashFiltrovat 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 apache2bashVyhledá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 todaybashjournalctl 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 todaybashFiltrovat 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=8088bashAlternativně 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
33bashZápisy v deníku lze filtrovat pomocí ID:
journalctl _UID=33 --since todaybashChcete-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 _GIDbashZde je příklad výstupu:
32
99
102
133
81
84
100
0
124
87bashFiltrovat 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/bashbashZobrazit 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 -kbashVe 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 -5bashZmě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-fullbashZobrazení můžete rozšířit pomocí příznaku -a:
journalctl -abashNastavte 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-pagerbashNastavit 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 jsonbashZde 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" :bashV 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 -nbashMůžete také nastavit počet záznamů, např. na 20:
journalctl -n 20bash