Úvod
Systemd zaznamenává všechny linuxové zprávy z jádra a systémových procesů. Příkaz journalctl umožňuje prohlížení a úpravu protokolů systemd, což z něj činí výkonný nástroj pro ladění služeb a procesů.
Tato příručka na příkladech ukazuje, jak číst, ovládat a udržovat systémové protokoly pomocí journalctl.
Předpoklady
- Přístup do příkazového řádku/okna terminálu.
- Textový editor (např. nano) pro úpravu konfiguračního souboru.
- Uživatel s právy sudo (viz, jak přidat uživatele do sudoers).
Co je Systemd?
Systemd je správce služeb a systému Linuxu. Zatímco uživatelé nevyvolávají systemd přímo, manažer obsahuje mnoho nástrojů a démonů, které lze spouštět individuálně pro různé systémové procesy.
Jednou z nejvýkonnějších funkcí systému jsou funkce protokolování. Systemd poskytuje centralizované řešení pro protokolování všech procesů jádra a uživatelů prostřednictvím protokolů známých jako žurnály .
žurnál démon shromažďuje všechny zprávy, které systém vydává, a poté vytváří žurnál bez ohledu na program nebo proces. Démon shromažďuje data ze všech dostupných systémových prostředků a ukládá je v binárním formátu.
Poznámka: Binární formát umožňuje manipulaci s výstupem tak, aby vyhovoval vašim potřebám, a poskytuje větší flexibilitu než tradiční soubory protokolu Linux.
syntaxe journalctl
journalctl
příkaz se dotazuje a manipuluje s daty deníku shromážděnými žurnálem démon. Tento nástroj je nezbytný pro systémové administrátory a doplňuje další linuxové protokolovací nástroje a softwarová řešení serveru Syslog.
Syntaxe příkazu je:
journalctl <options> <matches>
Bez jakýchkoli parametrů, journalctl
příkaz vypíše celý obsah žurnálu počínaje nejstarším záznamem. <match>
je jeden nebo více argumentů oddělených mezerami pro filtrování výstupních polí. Formát je "FIELD=VALUE"
.
Možnosti deníku
Níže uvedená tabulka shrnuje běžné journalctl
možnosti:
Možnost | Popis |
---|---|
-a --all | Zobrazit všechna pole, včetně netisknutelných znaků. |
-f --follow | Zobrazuje nejnovější záznamy a průběžně tiskne nové. |
--no-full | Zkrátí výstup. |
-e --pager-end | Přeskočí na konec pageru. |
-n <number> --lines=<number> | Zobrazuje nejnovější položky omezené na <number> událostí. Bez argumentu je výchozí hodnota deset (10). |
-o <format> --output=<format> | Zobrazí položky deníku v požadovaném <format> . |
--utc | Zobrazuje čas ve formátu UTC (Coordinated Universal Time). |
-x --catalog | Přidá vysvětlující text do zprávy protokolu, pokud je k dispozici. |
-q --quiet | Potlačuje informativní zprávy ve výstupu. |
-b [<ID> or <+-offset>] --boot[=<ID> or <+-offset>] | Zobrazuje protokoly z konkrétního spouštění. Vynecháte-li argument, zobrazí se aktuální zaváděcí protokoly. |
-k --dmesg | Zobrazuje pouze zprávy jádra. |
--list-boots | Zobrazuje tabulku čísel spouštění a jejich ID. |
-g <regex> --grep=<regex> | Filtruje výstup podle syntaxe regulárního výrazu grep. |
-S <date> , -U <date> --since=<date> , --until=<date> | Zobrazuje záznamy novější nebo starší než zadané datum. |
-u <unit|pattern> --unit=<unit|pattern> | Zobrazit protokoly pro zadanou systémovou jednotku nebo jakoukoli jednotku odpovídající <pattern> . |
--disk-usage | Vypočítá a zobrazí celkovou velikost deníku na disku. |
--vaccuum-size=<size> | Omezuje velikost archivovaného souboru deníku na |
--vaccuum-time=<time> | Omezí archivované časopisy na novější než |
--no-pager | Zakáže pager a zobrazí se jako standardní výstup. |
Zkontrolujte journalctl
manuálovou stránku pomocí příkazu man pro úplný seznam možností.
Jak číst systemd
Následující část popisuje, jak číst protokoly systemd a jak používat různé možnosti zobrazení pro journalctl
příkaz. Výstup je pro každý počítač jiný, protože záznamy pro každý systém jsou jedinečné.
Zobrazit všechny záznamy deníku
Chcete-li zobrazit všechny položky deníku, použijte journalctl
příkaz bez jakýchkoli voleb:
journalctl
První řádek z výstupu ukazuje časový rozsah dat protokolu. Sloupce obsahují následující údaje v pořadí zleva doprava:
- Datum a čas.
- Hostitel.
- Zdroj protokolu.
- Zprávu protokolu.
Data deníku obsahují mnoho záznamů. Použijte klávesy se šipkami (podobně jako u příkazu less) pro navigaci.
Opusťte deník stisknutím q .
Zobrazit nejnovější záznamy
journalctl
příkaz zobrazuje ve výchozím nastavení nejstarší položky. Chcete-li přejít na konec pageru a zobrazit nejnovější záznamy, použijte -e
možnost:
journalctl -e
Výstup zobrazuje posledních 1000 záznamů, aby se ušetřilo místo.
Chcete-li řídit, kolik řádků se zobrazí na výstupu, použijte -n
možnost následovaná počtem řádků. Chcete-li například zobrazit pět posledních záznamů deníku, použijte:
journalctl -n 5
-e
možnost je zbytečná a předpokládá se -n
volba. Pokud toto číslo vynecháte, ve výchozím nastavení se zobrazí deset nejnovějších záznamů.
Omezit protokoly na konkrétní spouštěcí systém
Chcete-li omezit protokoly na aktuální spuštění, použijte -b
tag bez parametrů:
journalctl -b
Bez jakýchkoli parametrů příkaz zobrazí aktuální spouštěcí protokoly.
Přejděte na konkrétní boot přidáním parametru offset. Například zobrazit předchozí protokoly spouštění pomocí:
journalctl -b -1
Případně zobrazit nejstarší dostupný protokol spouštění pomocí:
journalctl -b +1
Alternativní způsob, jak zobrazit konkrétní boot, je použít boot ID. Načtěte ID spouštění pomocí --list-boots
s:
journalctl --list-boots
První sloupec zobrazuje záporné číslo offsetu, zatímco druhý sloupec načítá ID bootování . Zkopírujte ID a přidejte jej jako parametr do příkazu, například:
journalctl -b cc07702b00884ec59312ece62604cac8
Výstup omezuje zobrazení protokolu na zadanou instanci ID.
Zobrazení protokolů v určitém časovém okně
Filtrujte deník zadáním časového limitu. Dvě možnosti omezení od nebo do zadaného času jsou:
journalctl -S <datetime>
journalctl -U <datetime>
Použijte možnosti jednotlivě nebo je zkombinujte a vytvořte časové okno.
Příkaz očekává jeden z následujících formátů data a času:
- Konkrétní datum a čas, například
2022-04-30 09:20:00
. Při vynechání parametru času je výchozí hodnota00:00:00
. - Řetězce, například
"yesterday"
,"today"
,"2 hours ago"
nebo"now"
.
Níže je uveden příklad journalctl
příkaz s konkrétním časovým oknem:
journalctl -S 2022-04-02 -U 2022-04-22
Příkaz vytvoří časové okno od 2. dubna 2022 do 22. dubna 2022. Výstup zobrazuje časopisy, které spadají do tohoto časového rámce.
Případně použijte vzor řetězce, například:
journalctl -S "50 minutes ago"
Výstup zobrazuje protokoly od zadaného času až po aktuální čas.
Zobrazení protokolů podle konkrétní systémové jednotky
Filtrujte protokoly podle konkrétní systémové jednotky pomocí -u
tag a poskytnutí názvu jednotky. Chcete-li například filtrovat pouze záznamy servisní jednotky Jenkins, spusťte:
journalctl -u jenkins
Výstup zobrazuje záznamy žurnálu související s konkrétní jednotkou systemd (v tomto případě Jenkins).
Poznámka: Chcete-li zobrazit všechny aktuálně aktivní systémové jednotky, použijte:
systemctl list-units
Zobrazit zprávy jádra
Chcete-li zobrazit pouze zprávy protokolu žurnálu jádra, použijte -k
možnost:
journalctl -k
Výstup zobrazuje zprávy jádra pouze z aktuálního spouštění s použitím -b
štítek. Chcete-li najít protokoly jádra z jiné spouštěcí relace, přidejte -b
tag a vyhledejte konkrétní boot.
Sledovat protokoly
Použijte -f
nebo --follow
pro průběžný tisk nejnovějších protokolů:
journalctl -f
Výstup vytiskne protokoly tak, jak se generují v reálném čase. Tato možnost umožňuje sledování protokolů pomocí journalctl
jak přikládají.
Chcete-li prohlížeč opustit, stiskněte CTRL +C .
Filtrovat zprávy protokolu podle priority
Filtrujte zprávy protokolu podle priority pomocí následujícího příkazu:
journalctl -p <number or text priority>
Existují následující priority:
- Nouzová situace –
0
neboemerg
- Upozornění –
1
neboalert
- Kritické –
2
nebocrit
- Chyba –
3
neboerr
- Upozornění –
4
nebowarning
- Oznámení –
5
nebonotice
- Informovat –
6
neboinfo
- Ladění –
7
nebodebug
Nižší číslo označuje zprávy s nejvyšší prioritou. Zadáním jednoúrovňové priority se také zobrazí všechny protokoly s nižší prioritou (kritičtější).
Chcete-li například zobrazit upozornění, použijte:
journalctl -p 1
Nebo alternativně:
journalctl -p alert
Výstup zobrazuje pouze zprávy na úrovni výstrahy a důležitější (pokud existují).
Filtrovat zprávy protokolu podle konkrétního uživatele
Chcete-li zobrazit protokoly uživatele, načtěte ID uživatele (UID) pomocí:
id <user>
Chcete-li načíst ID pro aktuálního uživatele, vynechejte <user>
. Výstup zobrazuje hodnotu UID pro daného uživatele. Pomocí pole žurnálu UID můžete filtrovat zprávy protokolu na základě konkrétního uživatele:
journalctl _UID=<UID>
Výstup filtruje protokol žurnálu na základě zadaného ID uživatele.
Poznámka: Úplný seznam polí naleznete na systemd.journal-fields
manuálová stránka:
man systemd.journal-fields
Jak upravit systémový protokolový výstup
Základním aspektem práce s protokoly jako správce systému je formátování výstupů protokolů. Systemd nabízí mnoho metod pro manipulaci s vizuálním výsledkem a načtení dat v požadovaném formátu.
Níže jsou uvedeny některé standardní možnosti úprav výstupu a příklady.
Výstup na standardní výstup
journalctl
příkaz zobrazí výstup pomocí pageru. Deaktivujte pager pomocí:
journalctl --no-pager
Výsledný výstup je ve standardním výstupu (stdout). Tuto možnost použijte při analýze dat protokolu pomocí nástrojů pro úpravu textu nebo skriptů Bash.
Zkrácení nebo rozšíření výstupu
journalctl
pager zobrazuje ve výstupu události rozšířeného deníku. Stisknutím vpravo a klávesy se šipkami doleva pomáhá orientovat se v textu, který neodpovídá velikosti obrazovky.
Pro omezení zkraťte journalctl
výstup, použijte --no-full
možnost:
journalctl --no-full
Výstup omezuje řádky na velikost obrazovky a přidává tři tečky (...
) pro označení zkráceného zobrazení.
Výstupní formáty
journalctl
příkaz nabízí různé možnosti výstupních formátů. Syntaxe výstupního formátu je:
journalctl -o <output format>
Některé z dostupných formátů zahrnují:
cat
- Zobrazí pouze pole zprávy.export
- Výstupy v binárním formátu, vhodném pro zálohování.short
- Generuje výstup podobný klasickým souborům Syslog.short-precise
- Zobrazuje čas v mikrosekundách.json
- Formátuje záznamy deníku do jednořádkových záznamů JSON.json-pretty
- Formátuje do struktur JSON ve více řádcích.
Chcete-li například zobrazit pomocí json-pretty
formát, použijte:
journalctl -o json-pretty
Různé formáty umožňují používat data protokolu v databázích, souborech skriptů nebo je analyzovat pomocí monitorovacího softwaru.
Údržba protokolu
Ukládání dat protokolu je nákladné a zabírá místo. Níže je uvedeno několik tipů a triků, jak zjistit využití disku, udržovat datové soubory protokolu a uvolnit místo používané starými soubory protokolu.
Zobrazení využití disku
Chcete-li zkontrolovat využití disku žurnálu, spusťte následující příkaz:
journalctl --disk-usage
Výstup zobrazuje celkové obsazené místo na disku podle archivovaných a aktivních žurnálů.
Smazat staré protokoly
Odstraňte staré archivy protokolů nastavením požadovaného limitu velikosti. Příkaz vyžaduje sudo k odstranění souborů /var/log/journal .
Například nastavte velikost na 1M pomocí:
sudo journalctl --vacuum-size=1M
Zadejte heslo sudo a stiskněte Enter . Výstup vytiskne názvy a velikosti souborů a poslední řádek ukazuje množství uvolněné paměti.
Případně odstraňte archivované protokoly podle času. Všechny soubory starší než nastavený čas se odstraní a uvolní se paměť. Chcete-li například odstranit soubory starší než dva měsíce, spusťte:
sudo journalctl --vacuum-time=2months
Časové přípony jsou s
, m
, h
, days
, months
, weeks
nebo years
.
Omezit deník
Konfigurační soubor žurnálu umožňuje nastavit limity a řídit, kolik žurnálovaných dat zabírá na disku. Chcete-li soubor upravit, spusťte:
sudo nano /etc/systemd/journald.conf
Soubor obsahuje ukázková konfigurační pole. Následující parametry se zabývají velikostí žurnálu a limity paměti:
SystemMaxUse
- Maximální trvalé úložiště používané žurnálem.SystemKeepFree
- Množství volného místa, které žurnál ponechává při přidávání záznamů do trvalého úložiště.SystemMaxFileSize
- Nastavuje maximální velikost souborů deníku v trvalém úložišti.RuntimeMaxUse
- Maximální volatilní úložný prostor na disku.RuntimeKeepFree
- Množství volného místa pro další použití při zápisu do nestálého úložiště.RuntimeMaxFileSize
- Nastavuje maximální velikost souborů žurnálu v nestálém úložišti.
Ovládací prvky velikosti souboru cílí na archivované soubory, aby dosáhly limitů. Odkomentujte řádky a nastavte limity, abyste získali lepší kontrolu nad zdroji skladování a spotřeby stroje.
Závěr
Tato příručka ukázala, jak prohlížet, ovládat a spravovat protokoly žurnálu systemd prostřednictvím příkladů. journalctl
command je cenný nástroj, který pomáhá odstraňovat problémy se službami Linuxu a odhalovat systémové chyby.