GNU/Linux >> Znalost Linux >  >> Linux

Čtěte a analyzujte své systémové protokoly Linux pomocí Journalctl

To, že se vám ve vašem systému nezobrazují chyby, neznamená, že vše funguje dobře. Proč si nepřečíst a neanalyzovat protokoly systému Linux, abyste viděli, co se děje s vaším systémem? Nevíte jak? Naštěstí pro vás, Journalctl je na tento úkol!

V tomto tutoriálu se naučíte, jak bedlivě sledovat, jak se váš systém chová s nástrojem journalctl čtením a analýzou souborů deníku žurnálu systemd.

Čtěte dál a udržujte svůj systém v nejlepším stavu!

Předpoklady

Tento tutoriál bude praktickou ukázkou. Pokud je chcete sledovat, ujistěte se, že máte následující.

  • Počítač se systémem Linux – Tato ukázka používá Ubuntu 20.04 LTS, ale můžete použít jakoukoli distribuci.
  • Účet bez oprávnění root s právy sudo.

Nastavení správného systémového času

Než budete moci používat Journalctl, budete muset nastavit svůj systémový čas. Časová razítka zaznamenaná v deníku systemd jsou v UTC, takže musíte vybrat správné časové pásmo. Pokud váš čas vyprší jen o několik sekund, některé položky protokolu se při pozdějším použití nemusí zobrazit správně.

1. Otevřete svůj terminál a spusťte timedatectl příkazem níže získáte seznam dostupných časových pásem.

timedatectl list-timezones

Vyberte si a poznamenejte si jeden z níže uvedeného seznamu, který odpovídá vaší oblasti. Pokud například žijete v Americe, vyberte časové pásmo, které odpovídá nejbližšímu městu.

2. Dále spusťte níže uvedený příkaz a nastavte své časové pásmo (set-timezone ). Nahraďte your-zone s názvem časového pásma, které jste předtím vybrali (krok jedna). Tento příkaz nastaví váš systémový čas na vámi zvolené časové pásmo.

Od této chvíle bude každý záznam protokolu zaznamenán jako váš místní čas.

sudo timedatectl set-timezone your-zone

3. Nakonec spusťte následující příkaz, abyste ověřili, že jste správně nastavili časové pásmo.

timedatectl status

Jak je uvedeno níže, aktuální systémové datum a čas by měly odpovídat vybrané oblasti a časovému pásmu.

Zobrazení všech protokolů

Nyní je nastavení časového pásma z cesty, můžete začít prohlížet protokoly ve vašem systému. Systemd System and Service Manager poskytuje centralizovanou správu log démonů, kteří shromažďují logy z různých částí/nástrojů v systému.

Ale jak si prohlížíte protokoly? Obslužný program journalctl vám umožňuje zobrazit protokoly vašeho počítače. A první věc, kterou obvykle chcete udělat, je ukázat vše, co se stalo od posledního spuštění.

Spusťte journalctl příkaz níže k zobrazení všech protokolů démona journald.

Obslužný program journalctl implementuje rozhraní příkazového řádku démona journald pro shromažďování a prohlížení žurnálu systemd. Obslužný program journalctl umožňuje uživatelům prozkoumat aktivitu a stav jakékoli jednotky spravované systémem (služba, proces atd.).

 sudo journalctl 

Příkaz zobrazí celý žurnál zobrazený níže a je trochu obtížně čitelný. Nejstarší protokoly jsou v horní části seznamu, zatímco nejnovější protokoly jsou dole.

Pravděpodobně budete mít stovky nebo tisíce záznamů, pokud deník systemd zaznamenával záznamy dostatečně dlouho.

K filtrování protokolů můžete použít i jiné parametry, ale do těchto filtrů se zde nedostanete, protože toto téma přesahuje tento tutoriál.

Vzhledem k tomu, že pravděpodobně chcete procházet seznam selektivněji, byly by pěkné šipky nahoru/dolů. Stiskněte K pro skok o stránku nahoru a J skočit o stránku dolů. Stiskněte END pro skok na poslední stránku.

Všimněte si, že časová razítka na začátku každého záznamu je váš místní čas, protože jste své časové pásmo dříve nastavili v části „Nastavení správného systémového času“ (krok dva).

Zajištění trvalého trvání deníku

Viděli jste, jak zobrazit všechny protokoly, ale obvykle byste si protokoly chtěli ponechat delší dobu, abyste měli více šancí najít data o problémech, ke kterým dochází jen zřídka. Jak? Tím, že deník bude trvalý.

/run/log/journal/ adresář je výchozí umístění dat protokolu a ve výchozím nastavení není trvalý. Jakmile restartujete systém, všechny protokoly jsou pryč. Myšlenkou trvalého protokolování je uchovávat všechny soubory protokolů, ale starší protokoly se archivují, když se příliš zvětší.

Aby byl žurnál trvalý i mezi booty, upravte /etc/systemd/journald.conf soubor a nakonfigurujte jej tak, aby používal trvalé úložiště.

1. Otevřete soubor /etc/systemd/journald.conf soubor pomocí preferovaného textového editoru a vyhledejte Storage=auto direktivu, jak je uvedeno níže.

2. Dále změňte Úložiště hodnotu direktivy z autotrvalé , poté uložte změny a zavřete editor. Ponechte úložiště direktiva na jednom řádku a žádné mezery mezi direktivou a hodnotou, jinak konfigurace nebude fungovat.

3. Spuštěním následujícího příkazu restartujte systemd-journald aktivovat všechny změny. Tento příkaz nevytiskne výstup, ale po dokončení tohoto příkazu restartujte počítač a otevřete další terminál.

V tomto okamžiku bude systemd ignorovat/run/log/journal a místo toho ukládat data deníku do /var/log/journal adresář, takže váš deník se stane trvalým mezi zaváděním.

Když spustíte systemd-journald automaticky vytvoří adresář /var/log/journal, pokud neexistuje.

sudo systemctl restart systemd-journald

4. Nyní spusťte níže uvedený příkaz a zkontrolujte stav systemd-journald.service .

sudo systemctl status systemd-journald.service

Pokud vaše konfigurace funguje, uvidíte aktivní (spuštěný) stav, jak je uvedeno níže. Níže uvedený výstup potvrzuje, že žurnál běží podle plánu.

5. Spusťte ls níže, abyste zjistili, zda /var/log/journal adresář existuje.

ls /var/log/journal

Uvidíte následující výstup, což je UUID trvalého žurnálu. Toto UUID nemá žádný konkrétní význam a je to pouze náhodný jedinečný řetězec generovaný během procesu spouštění. Tento řetězec je identifikátor, který můžete použít k odkazování na data v /var/log/journal .

Poznamenejte si UUID, protože jej budete používat k výpisu deníků (krok šest).

6. Nakonec spusťte níže uvedený příkaz pro výpis žurnálů protokolu. Nezapomeňte nahradit myUUID s vaším dříve uvedeným UUID (krok 5).

ls /var/log/journal/myUUID

Podobně níže uvidíte deník z posledního spuštění. A v tomto bodě nyní máte trvalý systém protokolování!

Výpis záznamů deníku z aktuálního spouštění

Naučili jste se, jak zobrazit všechny položky protokolu. Možná ale dáváte přednost filtrování konkrétních typů protokolů. Pokud ano, možná budete chtít zobrazit pouze položky protokolu jádra.

Nástroj journalctl má výkonnou syntaxi filtrování, která umožňuje zobrazit konkrétní typy položek protokolu. Nebo dokonce zobrazit související informace, jako je ID procesu (PID) nebo název jednotky původní služby.

Existují různé způsoby, jak odfiltrovat protokoly, ale možná vás zajímá pouze prohlížení deníků z vašeho aktuálního bootu. Pokud ano, základní journalctl příkaz udělá trik.

Spusťte journalctl příkaz níže k zobrazení seznamu všech záznamů žurnálu z vašeho aktuálního zavedení (-b ) související s vaším aktuálním systémem/prostředím. -b příznak říká journalctl příkaz k zobrazení protokolů uložených žurnálem od posledního spuštění systému.

journalctl -b

Výpis protokolů minulých spouštění

Při použití journalctl pro odstraňování problémů může být také nutné zobrazit položky protokolu konkrétního minulého spuštění. Možná máte službu, která se spustí v jednom spuštění, ale selže v jiném. V takovém případě musíte izolovat záznam protokolu z druhého spouštění, abyste viděli, co se pokazilo.

1. Spuštěním níže uvedeného příkazu zobrazíte seznam minulých bootů (–list-boots).

journalctl --list-boots

Jak je ukázáno níže, protože jste v předchozí části nakonfigurovali trvalé protokolování, journalctl zobrazí všechna minulá spuštění.

  • Každý řádek v seznamu označuje minulou položku protokolu spouštění. První sloupec je offset spouštění, který můžete použít k odkazování na každou položku. Posuny se zobrazují jako čísla (-1, 0 ).
  • Druhý sloupec, ID spouštění, můžete také použít jako absolutní odkaz na položku spouštění.

2. Dále spusťte journalctl -b -1 příkaz k zobrazení záznamů žurnálu z boot 1 (předchozí boot). Ale můžete také zobrazit položky deníku z jiných bootů změnou čísla bootování (tj. boot 2, boot 3…)

journalctl -b -1

3. Nakonec spusťte níže uvedený příkaz a zobrazte položky žurnálu ze stejného spouštění, ale odkazované jeho ID spouštění (boot_id ). Nezapomeňte nahradit boot_id s ID spouštění, které jste si poznamenali v prvním kroku.

journalctl -b boot_id

Výpis protokolů podle časového okna

Viděli jste, jak zobrazit všechny protokoly z minulých bootů, ale co když potřebujete zobrazit konkrétní protokoly podle času? Přidání --since a --until volby filtrují záznamy deníku na základě časových oken.

Spusťte journalctl příkaz níže k nalezení všech záznamů deníku vygenerovaných před 24 hodinami od určitého data a času (--since "2022-02-04 12:40:49” ).

journalctl --since "2022-02-04 12:40:49”

Možná vám nejde o určení data a času. Pokud ano, použijte místo toho relativní hodnoty a doby trvání. Například „2 minuty“, „30 m“, „1 h“ a dokonce i dny jako „včera“ nebo „teď a tak dále“.

Spuštěním níže uvedeného příkazu zobrazíte všechny položky deníku před 24 hodinami od aktuálního data a času (”yesterday” ).

journalctl --since "yesterday"

Co kdyby vaše služba SSH běžela dnes od 10:10 a pokračovala, dokud nebyla před hodinou přerušena? Připojte obě --since a --until možnosti na journalctl příkaz, abyste zjistili, co se pokazilo.

Spusťte níže uvedený příkaz a vyhledejte protokoly generované z 10:10 dnes do 1 hour ago .

journalctl --since 10:10 --until "1 hour ago"

Filtrování protokolů na základě jednotky původního procesu

Hledání protokolů generovaných od a do určitého data a času je užitečné při odstraňování problémů, ale přesto můžete ve výstupu získat mnoho záznamů. Jak dále filtrujete protokoly?

Chcete například filtrovat záznamy žurnálu z jednotky webového serveru NGINX, které se nepodařilo spustit při zavádění. Použijte journalctl příkaz s -unit možnost a název jednotky služby pro zobrazení protokolů.

Spuštěním níže uvedeného příkazu vypíšete všechny položky deníku na základě jednotky původního procesu (-u ) (nginx.service ). Tento typ filtrování je užitečný, pokud chcete znát PID procesů nebo služeb souvisejících s konkrétní chybou nebo varováním.

journalctl -u nginx.service

Možná dáváte přednost aktivnímu zobrazování jakýchkoli změn, jakmile k nim dojde, například při odstraňování problémů, a potřebujete prohlížet protokoly, když je načítá journald. Pokud ano, spusťte níže uvedený příkaz pro seznam nebo následování (-f ) všechny změny, jak k nim dojde.

journalctl -f

Zatím jste viděli, že journalctl je flexibilní a má mnoho možností pro filtrování a zobrazování protokolů. V tomto tutoriálu není možné zobrazit všechny druhy filtrů a časových intervalů, ale můžete spustit man journalctl zobrazíte další možnosti, které nabízí nástroj journalctl.

Přizpůsobení výstupního formátu

Ve výchozím nastavení journalctl zobrazuje položky protokolu ve formátu podobném pageru a obarvuje text terminálu na výstupu. Pravděpodobně však budete chtít vydávat své protokoly ve standardizovaném, lépe analyzovatelném formátu. V takovém případě můžete použít jakékoli nástroje pro manipulaci s textem.

Spuštěním níže uvedeného příkazu potlačíte stránkování a vybarvování. Nástroj journalctl vám umožňuje určit, co se má zobrazit na stdout pomocí výstupní direktivy v konfiguračním souboru.

journalctl --no-pager

Pokud však dáváte přednost specifikaci výstupního formátu, přidejte -o volba k příkazu journalctl. Následující příklad používá výstupní formát JSON, ale můžete použít jakékoli další možnosti dostupné v journalctl.

Níže uvedený příkaz uvádí záznamy žurnálu z aktuálního spouštění (-b ) generované pro službu NGINX (nginx ) a výstup seznamu ve formátu JSON (-o json ).

journalctl -b -u nginx -o json

Můžete také použít vlastní výstupní formát journalctl poskytuje několik užitečných předdefinovaných, jako jsou JSON, CSV a Syslog. Každý z těchto formátů má své výhody, ale měli byste se podívat na stránky nástrojů pro manipulaci s textem, kde najdete další informace o tom, jak zacházejí s textem.

Závěr

V tomto tutoriálu jste se naučili používat journalctl k zobrazení protokolů žurnálu systemd. Než však použijete některý z těchto příkazů, měli byste nejprve vybrat vhodné možnosti dílčího příkazu, abyste určili, co chcete zobrazit.

V tomto okamžiku můžete nyní rychle najít a určit konkrétní informace ve vašich systémových protokolech prostřednictvím journalctl . Nyní jste vybaveni potřebnými znalostmi, tak proč nepřeskočit na správu služeb Linuxu pomocí systemctl a journalctl?


Linux
  1. Monitorujte svůj systém Linux ve svém terminálu pomocí procps-ng

  2. Ovládejte čas a datum svého počítače pomocí systemd

  3. Jak na to:Správa systémových protokolů pomocí Journalctl

  1. Zabezpečení Linuxu:Chraňte své systémy pomocí fail2ban

  2. Jak zobrazit datum a čas restartu systému Linux

  3. Nastavte systémové datum a čas pomocí C++ v Linuxu

  1. Obnovte svůj systém pomocí režimu jednoho uživatele v Linux Mint / Linux Mint 12

  2. Zjistěte více o svém systému Linux pomocí inxi

  3. Jak používat journalctl k analýze protokolů v Linuxu