Jak používat journalctl ke čtení systémových protokolů Linuxu

Systémové protokolování Linuxu se změnilo se zavedením systemd. Naučte se používat příkaz journalctl ke čtení a filtrování zpráv systémového protokolu.

Centralizované protokolování

Není divu, že systémový a servisní manažer systemd zavedl významnou změnu ve způsobu shromažďování systémových protokolů. Protokoly bývaly umístěny na různých místech v systému souborů podle služby nebo démona, který je vytvářel. Všechny ale měly jedno společné. Byly to prosté textové soubory.

S systemd jsou všechny systémové, bootovací a kernel log soubory shromažďovány a spravovány centrálním specializovaným logovacím řešením. Formát, ve kterém jsou uloženy, je binární. Jedna věc, kterou to usnadňuje, je možnost extrahovat data v různých formátech, jako např JSON, jak uvidíme.

může také usnadnit křížové odkazy na související informace, které by byly dříve zaznamenány v samostatných souborech protokolu. Vzhledem k tomu, že data jsou nyní uložena v jediném deníku, lze vybrat data z několika zdrojů zájmu a zobrazit je v jediném propleteném seznamu záznamů.

journalctl je nástroj používá k práci s časopisem.

journalctl bez ozdůbek

Journalctl můžete vyvolat bez parametrů příkazového řádku:

journalctl

journalctl zobrazí celý žurnál s nejstaršími záznamy na začátku seznamu. Seznam se zobrazí méně, což vám umožní méně stránky a vyhledávání pomocí obvyklých navigačních funkcí. Můžete také použít klávesy Šipka doleva a Šipka doprava k posouvání do stran a čtení širokých položek protokolu.

Stisknutím klávesy End přeskočíte přímo na konec seznamu a na nejnovější záznamy protokolu.

Stiskněte Ctrl+C pro ukončení.

Ačkoli journalctl lze volat bez použití sudo, zajistíte, že uvidíte všechny detaily v protokolu, pokud používáte sudo.

sudo journalctl

Pokud potřebujete, můžete pomocí volby –no-pager nastavit, aby journalctl posílal svůj výstup do okna terminálu místo na méně.

sudo journalctl --no-pager

Výstup rychle projde oknem terminálu a vrátíte se do příkazového řádku.

Chcete-li omezit počet řádků, které journalctl vrací, použijte volbu -n (řádky). Požádejme o deset řádků výstupu:

sudo journalctl -n 10

Následující aktualizace deníku

Chcete-li, aby journalctl zobrazoval nejnovější záznamy, jakmile dorazí do deníku, použijte volbu -f (následovat).

sudo journalctl -f

Nejnovější záznam má časové razítko 07:09:07. Jak probíhá nová aktivita, nové položky jsou připojeny ke spodní části displeje. Aktualizace téměř v reálném čase – skvělé!

V 07:09:59 aplikace nazvaná geek-app vložila do deníku záznam s nápisem „Nová zpráva od HTG“.

Změna formátu zobrazení

Protože je žurnál binární soubor, data v něm musí být přeložena nebo analyzována do textu, než se vám zobrazí. Pomocí různých analyzátorů lze ze stejných binárních zdrojových dat vytvořit různé výstupní formáty. Existuje několik různých formátů, které může journalctl používat.

Výchozím výstupem je krátký formát, který je velmi podobný klasickému formátu systémového protokolu. Chcete-li explicitně požádat o krátký formát, použijte volbu -o (výstup) s modifikátorem short.

sudo journalctl -n 10 -o short-full

Zleva doprava jsou pole:

  Jak hrát Galactic Civilizations III na Linuxu

Čas vytvoření zprávy v místním čase.
Název hostitele.
Název procesu. Toto je proces, který vygeneroval zprávu.
Zpráva protokolu.

Chcete-li získat úplné datum a časové razítko, použijte modifikátor short-full:

sudo journalctl -n 10 -o short-full

Formáty data a času v tomto výstupu jsou formáty, ve kterých musíte zadat data a časy, když vybíráte zprávy protokolu podle období, jak brzy uvidíme.

Chcete-li zobrazit všechna metadata, která doprovázejí každou zprávu protokolu, použijte podrobný modifikátor.

sudo journalctl -n 10 -o verbose

Tam je mnoho možných oborů, ale jen zřídka jsou ve zprávě přítomna všechna pole.

Jednou oblastí, kterou stojí za to diskutovat, je pole Priorita. V tomto příkladu má hodnotu 6. Hodnota představuje důležitost zprávy:

0: Pohotovost. Systém je nepoužitelný.
1: Upozornění. Byl označen stav, který by měl být okamžitě opraven.
2: Kritický. To zahrnuje pády, výpadky jádra a významná selhání primárních aplikací.
3: Chyba. Byla hlášena chyba, ale není považována za závažnou.
4: Varování. Upozorňuje na podmínku, která se může stát chybou, pokud ji ignorujete.
5: Upozornění. Používá se k hlášení událostí, které jsou neobvyklé, ale ne chyb.
6: Informace. Pravidelné provozní zprávy. Tyto nevyžadují akci.
7: Ladění. Zprávy vkládané do aplikací, aby se jim usnadnilo jejich ladění.

Pokud chcete, aby byl výstup prezentován jako správně vytvořený Zápis objektů JavaScript (JSON), použijte modifikátor json:

sudo journalctl -n 10 -o json

Každá zpráva je správně zabalena jako správně vytvořený objekt JSON a zobrazí se jedna zpráva na řádek výstupu.

Chcete-li mít výstup JSON pěkně potištěné, použijte modifikátor json-pretty.

sudo journalctl -n 10 -o json-pretty

Každý objekt JSON je rozdělen na několik řádků, přičemž každý pár název-hodnota je na novém řádku.

Chcete-li zobrazit pouze zprávy záznamu protokolu, bez časových razítek nebo jiných metadat, použijte modifikátor cat:

sudo journalctl -n 10 -o cat

Tento formát zobrazení může ztížit identifikaci, který proces vyvolal událost protokolu, ačkoli některé zprávy obsahují vodítko.

Výběr zpráv protokolu podle časového období

Chcete-li omezit výstup z journalctl na časové období, které vás zajímá, použijte volby -S (od) a -U (do).

Chcete-li zobrazit položky protokolu od určitého času a data, použijte tento příkaz:

sudo journalctl -S "2020-91-12 07:00:00"

sudo journalctl -S

Displej obsahuje pouze zprávy, které dorazily po datu a čase v příkazu.

Výstup ze sudo journalctl -S

Chcete-li definovat časové období, za které chcete vykazovat, použijte společně možnosti -S (od) a -U (do). Tento příkaz se dívá na zprávy protokolu z 15minutového časového období.:

sudo journalctl -S "2020-91-12 07:00:00" -U "2020-91-12 07:15:00"

sudo journalctl -S

Toto je skvělé kombinované použití, pokud víte, že se ve vašem systému stalo něco zvláštního a zhruba kdy se to stalo.

výstup ze sudo journalctl -S

Použití relativních časových období

Při výběru časových období můžete použít relativní adresování. To znamená, že můžete říkat věci jako „ukaž mi všechny události od jednoho dne až do současnosti“. To je přesně to, co tento příkaz znamená. „d“ znamená „den“ a „-1“ znamená jeden den v minulosti.

sudo journalctl -S -1d

Zprávy protokolu jsou uvedeny od včerejšího 00:00:00 až do „nyní“.

  Jak změnit výchozí editor crontab

Pokud chcete prozkoumat něco, co se stalo v nedávné minulosti, můžete určit relativní časové období měřené v hodinách. Zde kontrolujeme zprávy protokolu za poslední hodinu:

sudo journalctl -S -1h

Zobrazí se vám zprávy za poslední hodinu. Můžete také použít „m“ pro nastavení relativních časových úseků měřených v minutách a „w“ pro týdny.

journalctl rozumí dnešku, včerejšku a zítřku. Tyto modifikátory poskytují praktický způsob, jak určit společná časová období. Chcete-li zobrazit všechny události, které se staly včera, použijte tento příkaz:

sudo journalctl -S yesterday

Všechny události deníku, které se staly včera, až do půlnoci 00:00:00, jsou načteny a zobrazeny pro vás.

Chcete-li zobrazit všechny dosud přijaté zprávy protokolu, použijte tento příkaz:

sudo journalctl -S today

Zobrazí se vše od 00:00:00 až do okamžiku vydání příkazu.

Můžete kombinovat různé modifikátory časového období. Chcete-li zobrazit vše od doby před dvěma dny až do začátku dneška, použijte tento příkaz:

sudo journalctl -S -2d -U today

Načte a zobrazí se vše od předvčerejška až do dneška.

Výběr zpráv protokolu podle datových polí

Můžete vyhledávat zprávy protokolu které odpovídají široké škále oborů časopisů. Tato vyhledávání se snaží najít shodu v metadatech připojených ke každé zprávě. Doporučuje se, abyste viz seznam polí a vyberte si ty, které pro vás budou nejužitečnější.

Mějte na paměti, že zda aplikace vyplní každé pole či nikoli, je zcela na autorech aplikace. Nemůžete zaručit, že budou vyplněna všechna pole.

Všechny modifikátory pole žurnálu se používají stejným způsobem. Několik jich použijeme v níže uvedených příkladech. Chcete-li vyhledat zprávy protokolu z konkrétní aplikace, použijte modifikátor _COMM (příkaz). Pokud také použijete volbu -f (následovat), journalctl bude sledovat nové zprávy z této aplikace, jakmile dorazí.

sudo journalctl -f _COMM=geek-app

Záznamy protokolu můžete vyhledávat pomocí ID procesu procesu, který vygeneroval zprávu protokolu. Pomocí příkazu ps vyhledejte ID procesu démona nebo aplikace, kterou chcete hledat.

sudo journalctl _PID=751

Na stroji použitém k výzkumu tohoto článku SSH démon je proces 751.

Můžete také hledat podle uživatelské ID. Toto je uživatelské ID osoby, která spustila aplikaci nebo příkaz, nebo která vlastní proces.

sudo journalctl _UID=1000

Všechny zprávy spojené s jakýmkoli jiným uživatelským ID jsou odfiltrovány. Zobrazují se pouze zprávy související s uživatelem 1000:

Dalším způsobem, jak hledat zprávy protokolu související s konkrétní aplikací, je poskytnout cestu ke spustitelnému souboru.

sudo journalctl /usr/bin/anacron

Celý anacron jsou načteny a zobrazeny zprávy protokolu plánovače.

Abychom usnadnili vyhledávání, můžeme požádat journalctl, aby vypsal všechny hodnoty, které obsahuje, pro kterékoli z polí deníku.

Chcete-li zobrazit ID uživatele, pro které journalctl zaznamenal zprávy protokolu, použijte volbu -F (pole) a předejte identifikátor pole _UID.

journalctl -F _UID

Udělejme to znovu a podívejme se na to ID skupiny (GID):

journalctl -F _GID

Můžete to udělat s kterýmkoli z identifikátory pole deníku.

  Jak automaticky změnit tapetu na Linuxu

Výpis zpráv jádra

Existuje vestavěný způsob, jak rychle izolovat zprávy jádra. Nemusíte je sami vyhledávat a izolovat. Volba -k (kernel) odstraní všechny ostatní zprávy a poskytne vám okamžitý pohled na položky protokolu jádra.

sudo journalctl -k

Zvýraznění odráží důležitost zprávy podle hodnot v poli Priorita.

Kontrola zaváděcích zpráv

Pokud máte problém související se zaváděním, který chcete prozkoumat, journalctl vám pomůže. Možná jste přidali nový hardware a ten nereaguje, nebo dříve funkční hardwarová komponenta již po vaší poslední aktualizaci systému nefunguje.

Chcete-li zobrazit položky protokolu týkající se vašeho posledního spuštění, použijte volbu -b (boot):

journalctl -b

Zobrazí se vám záznamy protokolu posledního spuštění.

Když říkáme „poslední spuštění“, máme na mysli proces spouštění, který přivedl váš počítač k životu pro vaši aktuální relaci přihlášeného uživatele. Chcete-li zobrazit předchozí bootování, můžete pomocí čísla sdělit journalctl, o který boot máte zájem. Chcete-li zobrazit třetí předchozí boot, použijte tento příkaz:

journalctl -b 3

Obecně platí, že pokud jste měli problém a museli jste restartovat počítač, zajímá vás předchozí zaváděcí sekvence. Toto je běžný příkazový formulář.

Je snadné se splést se sledem bot. Abychom vám pomohli, můžeme požádat journalctl o výpis bootů, které zaznamenal ve svém deníku, pomocí volby –list-boots.

journalctl --list-boots

Můžete identifikovat spouštění, pro které chcete vidět zprávy, podle datumu a času a pak pomocí čísla v levém sloupci získat zprávy protokolu pro danou zaváděcí sekvenci. Můžete také vybrat 32bitový spouštěcí identifikátor a předat jej journalctl.

sudo journalctl -b 1f00248226ed4ab9a1abac86e0d540d7

Jsou načteny a zobrazeny zprávy protokolu z požadované zaváděcí sekvence.

Správa místa na pevném disku deníku

Žurnál a všechny jeho protokolové zprávy jsou samozřejmě uloženy na vašem pevném disku. To znamená, že budou zabírat místo na pevném disku. Chcete-li zjistit, kolik místa žurnál zabral, použijte volbu –disk-usage.

journalctl --disk-usage

U dnešních pevných disků není 152 MB vůbec mnoho místa, ale pro demonstrační účely to ještě zkrátíme. Můžeme to udělat dvěma způsoby. První je nastavit limit velikosti, na který chcete deník zmenšit. Samozřejmě znovu vyroste, ale můžeme ho nyní prořezat, připravený na nový růst.

Použijeme nádherně nazvanou možnost –velikost vakua a předáme velikost, na kterou bychom chtěli deník zmenšit. Požádáme o 100 MB. Způsob, jak na to myslet, je, že žádáme journalctl, aby „zahodil, co můžete, ale neklesejte pod 100 MB“.

journalctl --vacuum-size=100M

Dalším způsobem, jak zkrátit velikost deníku, je použít volbu –vacuum-time. Tato volba říká journalctl, aby zahodil zprávy, které jsou starší než období, které zadáte na příkazovém řádku. V časovém období můžete použít dny, týdny, měsíce a roky.

Pojďme vyřadit všechny zprávy starší než jeden týden:

journalctl --vacuum-time=1weeks

Data vs. informace

Data nejsou užitečná, pokud se k nim nedostanete a nevyužijete je. Pak se to stane užitečnou informací. Příkaz journalctl je flexibilní a sofistikovaný nástroj, který vám umožňuje získat informace, které vás zajímají, různými způsoby.

Ve zprávách protokolu, které potřebujete, můžete použít téměř jakýkoli úryvek informací, které potřebujete.