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 auto až trvalé , 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?