GNU/Linux >> Znalost Linux >  >> Linux

Příručka pro začátečníky k analýze protokolů v Linuxu pomocí příkazu journalctl

systemd je výchozí na většině hlavních distribucí Linuxu. Jednou z hlavních funkcí systemd je způsob, jakým shromažďuje protokoly a nástroje, které poskytuje pro analýzu těchto protokolů.

V tradičním systému SysVinit máte syslog, který ukládá protokoly v prostých textových souborech. Čtení a analýza těchto souborů vyžaduje použití příkazů find, grep, cut a mnoha dalších.

systemd shromažďuje protokoly z více zdrojů než syslogs, uchovává protokoly žurnálu v binárním formátu a poskytuje vám nástroj příkazového řádku pro čtení, analýzu a manipulaci s protokoly. Toto je efektivnější než syslogs.

Co je journald? Co je journalctl?

journald je démon ze systemd, který shromažďuje protokoly z různých zdrojů protokolů, jako je syslog.

journalctl je nástroj příkazového řádku, který vám umožňuje pracovat s protokoly žurnálu.

S journalctl můžete číst protokoly, sledovat protokoly v reálném čase, filtrovat protokoly na základě času, služby, závažnosti a dalších parametrů.

V tomto tutoriálu vám ukážu, jak používat journalctl to pro čtení, monitorování a analýzu protokolů v Linuxu.

Zkontrolujte, zda jsou ve vašem systému povoleny protokoly deníků

Některé distribuce Linuxu, zvláště ty pro stolní počítače, ve výchozím nastavení nepovolují protokoly žurnálu.

Výchozí umístění žurnálovaných protokolů je /var/log/journal adresář. Měli byste se ujistit, že tento adresář existuje. Pokud ne, vytvořte si jej sami.

Dále se v souboru /etc/systemd/journald.conf ujistěte, že hodnota Storage je nastaveno buď na auto nebo persistent .

Soubor journald.conf zobrazuje výchozí hodnoty. Takže i když je před položkami znak #, znamená to, že se používají výchozí nastavení. Pokud chcete něco změnit, odstraňte # z tohoto řádku.

Použití příkazů journalctl

Dovolte mi ukázat vám některé z nejzákladnějších, ale užitečných příkladů příkazu journalctl.

Čtěte a prohledávejte protokoly pomocí journalctl

Stačí zadat journalctl v terminálu zobrazí deníky v chronologickém pořadí.

journalctl

journalctl používá less dole, aby se vám zobrazily protokoly. Což znamená, že k pohybu v protokolech můžete používat stejné klávesy jako pomocí příkazu less.

Pokud si to nepamatujete, zde je rychlé připomenutí:

Klíč Popis
Šipka Posunout o jeden řádek
Vesmír Přesunout o stránku dolů
b Posunout o stránku nahoru
g Přejděte na první řádek
G Přejít na poslední řádek
100 g Přejít na 100. řádek
/string Vyhledat řetězec z aktuální pozice
n/N Přejít na další nebo předchozí shodu vyhledávání
q Ukončete protokoly

Pokud nechcete, aby se protokoly zobrazovaly v méně podobném režimu zobrazení, můžete použít --no-pager vlajka. Tím se zobrazí celé protokoly přímo na obrazovce.

journalctl --no-pager

To není příliš užitečné a pokud máte velké množství protokolů, zaplaví vaši obrazovku.

Zobrazit protokoly v obráceném chronologickém pořadí

Jak jste si všimli, protokoly jsou zobrazeny v chronologickém pořadí. To znamená, že nejstarší uložené protokoly jsou zobrazeny jako první.

Pokud chcete nejprve vidět poslední protokoly, můžete zobrazit protokoly deníku v opačném pořadí pomocí volby -r :

journalctl -r

Stále používá méně příkazový pohled. Takže stiskněte q pro ukončení režimu prohlížení protokolu.

Zobrazit pouze N posledních řádků deníků

Místo zobrazení všech protokolů můžete zvolit zobrazení pouze určitého počtu řádků z protokolu pomocí -n možnost.

Například příkaz níže zobrazí posledních 25 řádků protokolů:

journalctl -n 25

Zobrazit deníky v reálném čase

Zobrazení posledních protokolů je jedna věc, pokud chcete vidět protokoly v reálném čase, můžete použít -f možnost příkazu journalctl:

journalctl -f

Stejně jako volba -f příkazu tail zobrazí protokoly v reálném čase v režimu sledování.

Použijte Ctrl+C pro ukončení zobrazení v reálném čase.

Zobrazit protokoly v čase UTC

Standardně se žurnálové protokoly zobrazují v místním čase vašeho systému. Pokud je čas vašeho systému nastaven na jiný čas než UTC a chcete vidět protokoly v UTC, můžete to udělat pomocí --utc vlajka.

journalctl --utc

Zobrazit pouze zprávy jádra s -k

Žurnál systemd shromažďuje protokoly z různých zdrojů. Pokud chcete pouze vidět protokoly linuxového jádra, můžete použít volbu -k .

journalctl -k

Tip:K zobrazení všech protokolů deníku použijte sudo

Systemd se stará o to, jaké protokoly má zobrazit kterému uživateli.

Může zobrazit některé protokoly, ale ne všechny, pokud jste běžný uživatel:

[email protected]:~$ journalctl -u ssh
Hint: You are currently not seeing messages from other users and the system.
      Users in groups 'adm', 'systemd-journal' can see all messages.
      Pass -q to turn off this notice.
-- Logs begin at Mon 2020-06-22 12:05:47 UTC, end at Tue 2020-07-14 11:59:29 UTC. --
-- No entries --

Pokud chcete mít přístup ke všem protokolům, měli byste použít sudo, pokud jste uživatelem sudo:

sudo journalctl -u ssh

Zobrazit zprávy z konkrétní spouštěcí relace

To je vynikající vlastnost jounraldu. Příkaz journalctl vám umožňuje přistupovat k protokolům patřícím ke konkrétní zaváděcí relaci pomocí volby -b .

Všechny spouštěcí relace můžete vypsat pomocí --list-boots vlajka.

journalctl --list-boots

Výstup zobrazí spouštěcí relace s časem spouštění a celým číslem přiřazeným spouštěcím relacím:

  -5 513008ead8464c23aab732a2feed5277 Sun 2020-07-12 20:43:38 IST—Sun 2020-07-12 22:40:02 IST
  -4 caff16e3f46a4479b5287fb9e294f610 Mon 2020-07-13 07:36:04 IST—Mon 2020-07-13 19:13:44 IST
  -3 5665f41cc50a4dec9955efacc2596d68 Mon 2020-07-13 20:30:55 IST—Mon 2020-07-13 22:20:34 IST
  -2 c7d17407b0bd476a930af503f64b6006 Tue 2020-07-14 07:58:41 IST—Tue 2020-07-14 18:50:04 IST
  -1 7ab5e04518ec455abe0e2c86fdaa46fa Tue 2020-07-14 21:19:27 IST—Tue 2020-07-14 22:42:11 IST
   0 91856e86d4ee4e828717913deb288568 Wed 2020-07-15 08:11:51 IST—Wed 2020-07-15 17:14:10 IST

Boot session 0 je aktuální boot session. Boot session -1 je poslední spuštěná relace atd.

journalctl -b -2

Představte si, že byste to zkusili udělat ve starém systému syslog!

Nemůžete získat pouze spouštěcí protokoly jako ty, které vidíte v /var/log/boot.log . Zaváděcí protokoly jsou však vždy na začátku protokolů, pokud jste v zobrazení relace spouštění.

Filtrovat protokoly žurnálu pro konkrétní službu systemd

Filtrování je silnou stránkou deníkových protokolů. Protokoly můžete filtrovat na základě služeb systemd.

journalctl -u service_name

Pokud například chcete vidět protokoly generované SSH, můžete to použít takto:

journalctl -u ssh

Samozřejmě budete potřebovat znát název služby systemd.

Filtrovat protokoly pro určitý časový interval

Toto je další příklad schopnosti filtrování řetězců protokolů žurnálu. Protokoly můžete filtrovat za určité časové období a existují různé způsoby, jak to udělat.

K filtrování protokolů můžete použít přirozený jazyk. Pojmy jako včera, dnes a zítra jsou uznávány.

journalctl --since=yesterday --until=now

Můžete také zadat datum nebo kombinaci data a času:

journalctl --since "2020-07-10"

Můžete také zadat časové období s daty a časem:

journalctl --since "2020-07-10 15:10:00" --until "2020-07-12"

Čas začíná v 00:00:00 a určuje den a datum.

Můžete také použít relativní čas jako -1h20min k určení 1 hodiny 20 minut v minulosti.

Filtrovat protokoly na základě UID, GID a PID

Pokud ladíte problém, možná budete chtít zkontrolovat protokoly určitého procesu pomocí jeho PID.

Protokoly žurnálu lze také filtrovat podle ID uživatele (UID), ID skupiny (GID) a ID procesu (PID). Níže je uveden příklad:

journalctl _PID=1234

Tip:Zkombinujte více než jednu možnost pro lépe přizpůsobené zobrazení protokolu

Chcete-li zobrazit požadované protokoly, můžete kombinovat několik možností.

Pokud například chcete vidět pouze protokoly SSH ze včerejška v časových razítkách UTC, můžete použít:

sudo journalctl -u ssh --since=yesterday --utc

Dalším běžným použitím je filtrování protokolů na základě spouštěcích relací. Pokud chcete vidět pouze protokoly SSH v aktuální relaci, můžete použít:

sudo journalctl -u ssh -b0

Možnosti jsou nekonečné a můžete je kombinovat podle svých potřeb.

Použití journalctl -xe k zobrazení posledních několika protokolů

Často narazíte na lidi, kteří navrhují použít journalctl -xe příkaz.

  • -e :Přejít na konec deníků
  • -x :Zobrazit další informace o položkách protokolu (pokud jsou k dispozici)

Některé položky protokolu obsahují další informace, které se při normálním zobrazení protokolu nezobrazují. Pomocí -x možnost může takové informace zobrazit.

Co vidíte jako jeden řádek takto:

Jul 09 16:33:40 itsfoss systemd[1]: Started Run anacron jobs.

Mohlo by zobrazit více informací takto:

Jul 09 16:33:40 itsfoss systemd[1]: Started Run anacron jobs.
-- Subject: A start job for unit anacron.service has finished successfully
-- Defined-By: systemd
-- Support: http://www.ubuntu.com/support
-- 
-- A start job for unit anacron.service has finished successfully.
-- 
-- The job identifier is 3702.

Další informace pomáhají vysvětlit kontext chyby nebo události protokolu a možná řešení.

Zobrazit pouze chyby v protokolech s journalctl

Chcete-li zobrazit všechny chyby v aktuální relaci, můžete použít:

journalctl -p 3 -xb
  • -p 3 :filtrovat protokoly pro prioritu 3 (což je chyba)
  • -x :poskytuje další informace o protokolu (pokud jsou k dispozici)
  • b :od posledního spuštění (což je aktuální relace)

Můžete také použít jinou úroveň priority k získání protokolů ladění, varování nebo dokonce kritických úrovní. Tato tabulka uvádí všechny úrovně priority.

Priorita Kód
0 emerg
1 upozornění
2 krit
3 chyba
4 varování
5 upozornění
6 informace
7 ladění

Můžete také zobrazit protokoly pro různé stupně závažnosti. Pokud například chcete vidět všechny protokoly varování, upozornění a informací z aktuální relace, můžete použít:

journalctl -p 4..6 -b0

Mohli jste také použít warning..info ve výše uvedeném příkazu namísto 4..6 .

Zkontrolujte, kolik místa na disku zabírají protokoly

Journald shromažďuje protokoly z různých zdrojů a ukládá protokoly různých úrovní včetně protokolů ladění. Věřte mi, i když uchovávání protokolů pomáhá při analýze a auditování, může zabírat značné množství místa na disku.

Pomocí tohoto příkazu journalctl můžete zkontrolovat, kolik místa na disku zabírají žurnálové protokoly:

journalctl --disk-usage

Když uvidíte výstup, můžete zažít překvapení (nebo šok):

[email protected]:~$ journalctl --disk-usage 
Archived and active journals take up 2.8G in the file system.

2,8 GB? To je hodně. Možná budete chtít vymazat deníky.

Užijte si analýzu protokolů pomocí příkazu journalctl

Existuje mnohem více možností a použití příkazu journalctl a nemohu je všechny pokrýt. Doporučuji přečíst si jeho manuálovou stránku, pokud o ní chcete více podrobností.

Věřím, že jsem vám dal dost na to, abyste používali příkaz journalctl pro pravidelnou analýzu protokolů. Doufám, že se vám tento podrobný návod na journald líbí.

Pokud máte návrhy nebo dotazy, neváhejte zanechat komentář.


Linux
  1. Linux Tee Command s příklady

  2. Příkaz linuxové hlavy s příklady

  3. Základy Linuxu:Průvodce pro začátečníky k úpravám textu pomocí vim

  1. Průvodce pro začátečníky oprávněními pro Linux

  2. wc Linux Command s příklady

  3. JQ Command v Linuxu s příklady

  1. Linux řazení příkazů s příklady

  2. Echo Command v Linuxu (s příklady)

  3. man Command v Linuxu s příklady