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.
Table of Contents
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:
Č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"
Displej obsahuje pouze zprávy, které dorazily po datu a čase v příkazu.
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"
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.
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í“.
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.
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.