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ář.