Čítajte a analyzujte svoje denníky systému Linux pomocou Journalctl
To, že sa vám vo vašom systéme nezobrazujú chyby, neznamená, že všetko funguje dobre. Prečo si neprečítať a neanalyzovať denníky systému Linux, aby ste zistili, čo sa deje s vaším systémom? Neviete ako? Našťastie pre vás, Journalctl je na túto úlohu!
V tomto návode sa naučíte, ako pozorne sledovať, ako sa váš systém správa s nástrojom journalctl, čítaním a analýzou denníkových súborov denníka systemd.
Čítajte ďalej a udržujte svoj systém na vrchole!
Predpoklady
Tento tutoriál bude praktickou ukážkou. Ak chcete sledovať, uistite sa, že máte nasledujúce.
- Počítač so systémom Linux - Toto demo používa Ubuntu 20.04 LTS, ale môžete použiť akúkoľvek distribúciu.
- Účet iného typu než root s oprávneniami sudo.
Nastavenie správneho systémového času
Predtým, ako budete môcť používať Journalctl, budete musieť nastaviť systémový čas. Časové pečiatky zaznamenané v denníku systemd sú v UTC, takže musíte vybrať správne časové pásmo. Ak váš čas vyprší len o niekoľko sekúnd, niektoré položky denníka sa nemusia zobraziť správne, keď ich použijete neskôr.
1. Otvorte terminál a spustite príkaz timedatectl nižšie, aby ste získali zoznam dostupných časových pásiem.
timedatectl list-timezonesVyberte si a poznačte si jeden z nižšie uvedeného zoznamu, ktorý zodpovedá vášmu regiónu. Ak napríklad žijete v Amerike, vyberte časové pásmo, ktoré zodpovedá najbližšiemu mestu.
2. Potom spustite príkaz uvedený nižšie na nastavenie časového pásma (set-timezone). Nahraďte vaše pásmo názvom časového pásma, ktoré ste si predtým vybrali (prvý krok). Tento príkaz nastaví váš systémový čas na zvolené časové pásmo.
Odteraz bude každá položka denníka zaznamenávaná ako váš miestny čas.
sudo timedatectl set-timezone your-zone3. Nakoniec spustite nasledujúci príkaz a overte, či ste správne nastavili časové pásmo.
timedatectl statusAko je uvedené nižšie, aktuálny systémový dátum a čas by sa mal zhodovať s vami vybratým regiónom a časovým pásmom.
Zobrazenie všetkých denníkov
Teraz je nastavenie časového pásma z cesty, môžete začať prezerať denníky vo vašom systéme. Systemd System and Service Manager poskytuje centralizovanú správu log démonov, ktorá zhromažďuje logy z rôznych častí/nástrojov v systéme.
Ako si však prezeráte denníky? Pomôcka journalctl vám umožňuje zobraziť denníky vášho počítača. A prvá vec, ktorú zvyčajne chcete urobiť, je ukázať všetko, čo sa stalo od posledného spustenia.
Spustite príkaz journalctl nižšie, aby ste zobrazili všetky protokoly démona journald.
Pomocný program journalctl implementuje rozhranie príkazového riadka démona journald na zhromažďovanie a prezeranie žurnálu systemd. Pomôcka journalctl umožňuje používateľom preskúmať aktivitu a stav akejkoľvek jednotky riadenej systémom (služba, proces atď.).
sudo journalctl
Príkaz zobrazí celý denník zobrazený nižšie a je trochu ťažké ho prečítať. Najstaršie záznamy sú v hornej časti zoznamu, zatiaľ čo najnovšie záznamy sú v spodnej časti.
Pravdepodobne budete mať stovky alebo tisíce záznamov, ak denník systemd zaznamenával záznamy dostatočne dlho.
Na filtrovanie denníkov môžete použiť aj iné parametre, ale do týchto filtrov sa tu nedostanete, pretože táto téma presahuje rámec tohto návodu.
Keďže pravdepodobne chcete listovať v zozname selektívnejšie, boli by pekné šípky nahor/nadol. Stlačením K preskočíte o stránku nahor a stlačením J preskočíte o stránku nižšie. Stlačením tlačidla END prejdete na poslednú stranu.
Všimnite si, že časové pečiatky na začiatku každého záznamu sú váš miestny čas, pretože ste si predtým nastavili časové pásmo v časti „Nastavenie správneho systémového času“ (krok dva).
Urobte denník trvalý
Videli ste, ako zobraziť všetky protokoly, ale zvyčajne by ste ich chceli uchovávať dlhšie, aby ste mali viac šancí nájsť údaje o problémoch, ktoré sa vyskytujú len zriedka. Ako? Tým, že časopis bude trvalý.
Adresár /run/log/journal/ je predvoleným umiestnením údajov protokolu a predvolene nie je trvalý. Hneď ako reštartujete systém, všetky protokoly sú preč. Myšlienkou trvalého protokolovania je uchovávať všetky protokolové súbory, ale staršie protokoly sa archivujú, keď sa príliš zväčšia.
Aby bol žurnál trvalý aj medzi bootmi, upravíte súbor /etc/systemd/journald.conf a nakonfigurujete ho tak, aby používal trvalé úložisko.
1. Otvorte súbor /etc/systemd/journald.conf v preferovanom textovom editore a vyhľadajte direktívu Storage=auto, ako je uvedené nižšie.
2. Ďalej zmeňte hodnotu direktívy Storage z auto na persistent, potom uložte zmeny a zatvorte editor. Direktívu Storage ponechajte v jednom riadku a medzi direktívou a hodnotou žiadne medzery, inak konfigurácia nebude fungovať.
3. Spustite nasledujúci príkaz na reštartovanie služby systemd-journald, aby sa aktivovali všetky zmeny. Tento príkaz nevytlačí výstup, ale po dokončení tohto príkazu reštartujte počítač a otvorte ďalší terminál.
V tomto bode bude systemd ignorovať /run/log/journal a namiesto toho uloží údaje žurnálu do adresára /var/log/journal, takže váš žurnál bude trvalý medzi čižmy.
Keď spustíte službu
systemd-journald, automaticky vytvorí adresár /var/log/journal, ak neexistuje.
sudo systemctl restart systemd-journald4. Teraz spustite príkaz uvedený nižšie a skontrolujte stav systemd-journald.service.
sudo systemctl status systemd-journald.serviceAk vaša konfigurácia funguje, ako je uvedené nižšie, uvidíte aktívny (spustený) stav. Výstup nižšie potvrdzuje, že žurnál beží podľa plánu.
5. Spustite príkaz ls nižšie, aby ste zistili, či adresár /var/log/journal existuje.
ls /var/log/journalUvidíte nasledujúci výstup, ktorý je UUID trvalého žurnálu. Toto UUID nemá žiadny konkrétny význam a je to len náhodný jedinečný reťazec vygenerovaný počas procesu zavádzania. Tento reťazec je identifikátor, ktorý môžete použiť na odkazovanie na údaje v /var/log/journal.
Poznamenajte si UUID, pretože ho budete používať na zoznam denníkov denníkov (6. krok).
6. Nakoniec spustite príkaz uvedený nižšie a vypíšte denníky denníkov. Nezabudnite nahradiť myUUID svojím predtým uvedeným UUID (5. krok).
ls /var/log/journal/myUUIDPodobne nižšie uvidíte denník z posledného spustenia. A v tomto bode teraz máte trvalý systém prihlasovania!
Výpis záznamov denníka z aktuálneho spustenia
Naučili ste sa, ako zobraziť všetky záznamy denníka. Možno však radšej odfiltrujete konkrétne typy protokolov. Ak áno, možno budete chcieť zobraziť iba položky protokolu jadra.
Nástroj journalctl má výkonnú syntax filtrovania, ktorá vám umožňuje zobraziť špecifické typy záznamov denníka. Alebo dokonca zobraziť súvisiace informácie, ako je ID procesu (PID) alebo názov jednotky pôvodnej služby.
Existujú rôzne spôsoby, ako odfiltrovať denníky, ale možno vás zaujíma iba zobrazenie denníkov z vášho aktuálneho spustenia. Ak áno, postačí základný príkaz journalctl.
Spustite príkaz journalctl nižšie a vypíšte všetky položky žurnálu z vášho aktuálneho zavedenia (-b) týkajúce sa vášho aktuálneho systému/prostredia. Príznak -b hovorí príkazu journalctl, aby zobrazil protokoly uložené žurnálom od posledného zavedenia systému.
journalctl -b
Výpis záznamov o minulých topánkach
Pri používaní journalctl na riešenie problémov možno budete musieť zobraziť záznamy denníka konkrétneho predchádzajúceho zavedenia. Možno máte službu, ktorá sa spustí v jednom bootovaní, ale zlyhá v inom. V takom prípade musíte izolovať záznam protokolu z druhého zavádzania, aby ste videli, čo sa pokazilo.
1. Spustite príkaz uvedený nižšie, aby ste zobrazili zoznam predchádzajúcich spustení (-list-boots).
journalctl --list-bootsAko je uvedené nižšie, keďže ste v predchádzajúcej časti nakonfigurovali trvalé protokolovanie, journalctl zobrazí všetky predchádzajúce spustenia.
- Každý riadok v zozname označuje záznam denníka spustenia z minulosti. Prvý stĺpec je odsadenie štartu, ktorý môžete použiť na označenie každého záznamu. Posuny sú zobrazené ako čísla (-1, 0).
- Druhý stĺpec, ID zavádzania, môžete použiť aj ako absolútny odkaz na položku zavádzania.
2. Ďalej spustite príkaz journalctl -b -1, aby sa zobrazili položky žurnálu zo zavedenia 1 (predchádzajúce zavedenie). Môžete však zobraziť aj záznamy žurnálu z iných bootov zmenou čísla bootovania (t.j. boot 2, boot 3…)
journalctl -b -13. Nakoniec spustite príkaz uvedený nižšie, aby ste zobrazili položky žurnálu z rovnakého zavedenia, ale odkazovalo sa naň jeho ID zavádzania (boot_id). Nezabudnite nahradiť boot_id ID zavádzania, ktoré ste si poznamenali v prvom kroku.
journalctl -b boot_idVýpis protokolov na základe časových okien
Videli ste, ako zobraziť všetky protokoly z predchádzajúcich spustení, ale čo ak potrebujete zobraziť konkrétne protokoly podľa času? Pridaním možností --since a --until filtrujú záznamy denníka na základe časových okien.
Spustite príkaz journalctl nižšie, aby ste našli všetky položky denníka vygenerované pred 24 hodinami od konkrétneho dátumu a času (--since "2022-02-04 12:40:49 " ).
journalctl --since "2022-02-04 12:40:49”
Možno nemáte záujem špecifikovať dátum a čas. Ak áno, použite namiesto toho relatívne hodnoty a doby trvania. Napríklad „2 minúty“, „30 m“, „1 h“ a dokonca aj dni ako „včera“ alebo „teraz atď.“.
Spustite príkaz uvedený nižšie, aby ste zobrazili všetky položky denníka pred 24 hodinami od aktuálneho dátumu a času ( ”včera ”).
journalctl --since "yesterday"
Čo keby bola vaša služba SSH spustená dnes od 10:10 a pokračovala, kým nebola pred hodinou prerušená? Pripojte obe možnosti --since a --until k príkazu journalctl, aby ste zistili, čo sa pokazilo.
Spustite príkaz nižšie a nájdite denníky vygenerované od 10:10 dnes až do pred 1 hodinou.
journalctl --since 10:10 --until "1 hour ago"
Filtrovanie protokolov na základe jednotky pôvodného procesu
Hľadanie protokolov generovaných od a do určitého dátumu a času je užitočné pri riešení problémov, ale stále môžete získať veľa záznamov vo výstupe. Ako ďalej filtrujete denníky?
Napríklad chcete filtrovať položky žurnálu z jednotky webového servera NGINX, ktorej spustenie pri zavádzaní zlyhalo. Na zobrazenie denníkov použite príkaz journalctl s voľbou -unit a názvom jednotky služby.
Spustite príkaz uvedený nižšie a vypíšte všetky položky denníka na základe jednotky pôvodného procesu (-u) (nginx.service). Tento typ filtrovania je užitočný na to, aby ste poznali PID procesov alebo služieb súvisiacich s konkrétnou chybou alebo varovaním.
journalctl -u nginx.service
Možno dávate prednosť aktívnemu zobrazovaniu akýchkoľvek zmien hneď, ako sa vyskytnú, napríklad počas služby odstraňovania problémov, a potrebujete zobraziť protokoly, keď ich načítava journald. Ak áno, spustite príkaz uvedený nižšie a vypíšte alebo sledujte (-f) všetky zmeny, keď sa vyskytnú.
journalctl -f
Doteraz ste videli, že journalctl je flexibilný a má veľa možností na filtrovanie a zobrazovanie denníkov. V tomto návode nie je možné zobraziť všetky druhy filtrov a časových intervalov, ale môžete spustiť príkaz
man journalctla zobraziť ďalšie možnosti, ktoré nástroj journalctl ponúka.
Prispôsobenie výstupného formátu
V predvolenom nastavení journalctl zobrazuje položky protokolu vo formáte podobnom pageru a farbí text terminálu na výstupe. Pravdepodobne však budete chcieť vydávať svoje protokoly v štandardizovanom, viac analyzovateľnom formáte. V takom prípade môžete použiť akékoľvek nástroje na manipuláciu s textom.
Spustite nižšie uvedený príkaz na potlačenie stránkovania a farbenia. Nástroj journalctl vám umožňuje určiť, čo sa má zobraziť na stdout pomocou výstupnej direktívy v konfiguračnom súbore.
journalctl --no-pager
Ak však uprednostňujete špecifikáciu výstupného formátu, pridajte do príkazu journalctl voľbu -o. Nasledujúci príklad používa výstupný formát JSON, ale môžete použiť akékoľvek iné možnosti dostupné v journalctl.
Príkaz nižšie uvádza zoznam položiek žurnálu z aktuálneho zavedenia (-b) vygenerovaných pre službu NGINX (nginx) a vypíše zoznam vo formáte JSON (-o json).
journalctl -b -u nginx -o json
Aj keď môžete použiť aj vlastný výstupný formát,
journalctlposkytuje niekoľko užitočných preddefinovaných formátov, ako sú JSON, CSV a Syslog. Každý z týchto formátov má svoje výhody, ale mali by ste si pozrieť stránky nástrojov na manipuláciu s textom, kde nájdete ďalšie informácie o tom, ako s textom narábajú.
Záver
V tomto návode ste sa naučili, ako používať príkaz journalctl na zobrazenie denníkov denníka systemd. Pred použitím ktoréhokoľvek z týchto príkazov by ste však mali najprv vybrať príslušné voľby podpríkazu, aby ste určili, čo chcete zobraziť.
V tomto bode môžete teraz rýchlo nájsť a presne určiť konkrétne informácie vo vašich systémových protokoloch prostredníctvom journalctl. Teraz ste vybavení potrebnými znalosťami, tak prečo nepreskočiť na správu linuxových služieb pomocou systemctl a journalctl?




















