systemd

Master journalctl rozumí systémovým protokolům

Master journalctl rozumí systémovým protokolům
Systemd je nový nástroj pro správu služeb. Původně vytvořený společností Red Hat umožňuje lepší správu služeb prostřednictvím centralizovaného procesu, který podle potřeby sleduje a spouští služby. Ale systemd zahrnuje také kontejnerový systém, cron systém, způsob bezpečného poskytování dočasných adresářů službám a také systém protokolování - na to se zde zaměříme.

Porozumění protokolům je důležité: pokud někdy spadnete na server, který má chybu nebo je hacknut, obvykle jediným způsobem, jak pochopit, co se stalo, je pomocí protokolů. Hlavní aplikací, kterou použijeme, je journalctl, odtud název článku. Poslouchejte tedy pozorně jako ve správný den, možná budete rádi, když víte, jak to funguje.

Kde jsou uloženy systemd protokoly? A v jakém formátu je uložen?

Budeme předpokládat, že máte normální systém, protože systemd lze přizpůsobit tak, aby byl na výjimečných místech. Také některé distribuce Linuxu, jako je Ubuntu 16.04 ve výchozím nastavení zakázáno trvalé protokolování, které systému systemd brání ve správné práci. Pokud máte takovou distribuci, upravte / etc / systemd / journald.conf soubor, změňte Storage = auto na Storage = persistent a nakonec restartujte.

Normálně tedy soubory systemd najdete v / var / log / journal. Systém žurnálování je sám o sobě službou zvanou system-journald.servis.  Zkusme vypsat soubory v tomto adresáři:

# ls / var / log / journal / -R
/ var / log / journal /:
15e43c1734090ac7fbea6b40fcd99d31
 
/ var / log / journal / 15e43c1734090ac7fbea6b40fcd99d31:
system @ a39da368947bd2ba-231f9bfc18a7a356.deník ~
system @ 62ac1299826d036cb043d6c06a9493b7-0000000000000001-00067d6410099a19.časopis
user-1000 @ b27e98812223a9bc-387e0521703f73d9.deník ~
user-1000 @ 2123bc076b58569fe1fb13e9dbc1b0e0-0000000000000001-0007fe36ac2810e0.časopis
uživatel-1000.časopis
[spousta dalších souborů, jako jsou ty výše ...]

Protože chci, abyste dál četli, musel jsem výstup zkrátit, protože obsahuje mnoho souborů (v mém příkladu více než 60 souborů), omlouvám se! Možná v pokušení otevřít jednu?

# head --bytes = 512 / var / log / journal / 15e43c1734090ac7fbea6b40fcd99d31 / [chráněno e-mailem]
b58569fe1fb13e9dbc1b0e0-0000000000000001-0007fe36ac2810e0.časopis
?s, q?n / FLz???Ulz?l?]????
?_?b???z????Ó?y1KN ?i?eO??Ž?u?  ?=?x0?L?d?7??X4n #?E? d3l?
p??o | MFO:?!qs?.tK??R?\??1?| 5  ????$?G??#?S??;??B7???????t???Y????mN?q????ZQ
?Yv?E?????BD?C?? wF??d |
?2?? 7???????[??Un?= 8????C?2 = str?&?"   ?0
????*????_??  ???
5?????yk?G? ?6?|??u??w: # 12?Y??
3 TU;???''?jX??2?X'?=??[[chráněno e-mailem]
[chráněno e-mailem]?_?>??3S???,lR?.?$?G?L???s?/E??M1??q???

Hej, podívej, to opravdu nevypadá jako obvyklé log soubory, které vidíš správně? Nebojte se, tento soubor není poškozený, právě jste objevili aspekt systemd: systemd ukládá soubory v binárním formátu. Proto je to co nejmenší: strukturovaná data, jako je čas nebo umístění, jsou uložena přímo v binárním formátu, což obvykle trvá méně než bajty než text. Ale to není jediný důvod.

systemd neukládá pouze řádky protokolu. Jeho záměrem je usnadnit monitorování a průzkum protokolů. Abychom tomuto úkolu pomohli, jsou zprávy protokolu ve skutečnosti řádek textu doprovázený daty, jako je závažnost protokolu (varování, chyba atd.), nebo dokonce pole, která by byla užitečná pouze pro vaši aplikaci (například požadovaná adresa URL).

# journalctl --output = verbose - vše
PRIORITA = 6
_UID = 0
_GID = 0
_CAP_EFFECTIVE = 3fffffffff
_BOOT_ID = ee4cc2ce7e8273aaffb5fc59c873ce7b
_MACHINE_ID = bc422e0feaab64bb7dd218c24e6830e5
_HOSTNAME = linux
SYSLOG_FACILITY = 3
SYSLOG_IDENTIFIER = systemd
UNIT = dnf-makecache.servis
_TRANSPORT = deník
_PID = 1
_COMM = systemd
_EXE = / usr / lib / systemd / systemd
_CMDLINE = / usr / lib / systemd / systemd --switched-root --system --deserializovat 76
_SYSTEMD_CGROUP = / init.rozsah
_SYSTEMD_UNIT = init.rozsah
_SYSTEMD_SLICE =-.plátek
_SELINUX_CONTEXT = system_u: system_r: init_t: s0
CODE_FILE = src / core / job.C
CODE_LINE = 795
CODE_FUNCTION = job_log_status_message
MESSAGE_ID = a76e08846f5f0971371dbb11126e62e1
MESSAGE = Spuštěno dnf makecache.
# journalctl --catalog --lines = 3000 --pager-end "_TRANSPORT = jádro" VÝSLEDEK = hotovo
_SOURCE_REALTIME_TIMESTAMP = 1532886335471422

Řekl jsem vám, že je tu spousta polí (tady je 25 polí nebo 29 počítajících časových značek), veškerý výše uvedený úryvek je pouze pro jednu zprávu protokolu! Velkou výhodou je, že můžete spustit vyhledávání filtrováním libovolného pole v této zprávě protokolu. To opravdu umožňuje pokročilé filtrování.

Jedním z nejzřejmějších filtrů, které byste chtěli, je filtrování podle služby. Jak vidíte výše, existuje pole JEDNOTKA, takže můžete snadno filtrovat a získat pouze protokolové zprávy z jedné služby. O tom vám řeknu později.

Ale toto množství dat znamená také něco jiného: téměř ve všech případech nikdy neotevřete soubor protokolu ručně a nikdy se nedotknete složky / var / log / journal. Journalctl použijete pro jakoukoli úlohu související s protokolováním. Neexistuje žádná taková věc rotace protokolu, vše je spravováno časem protokolu.

Počet polí bude také záviset na tom, jak dobrá je integrace systemd do vaší aplikace. Čím více polí zpráva protokolu obsahuje, tím lepší je. U služeb základního systému se systemd již postaral o dobrou integraci, ale u jiných aplikací a služeb se kvalita integrace značně liší. Normálně by se to mělo časem zlepšit, jak si lidé zvyknou na systemd.

Dobře, teď je čas objevit funkce časopisu.

Nejpoužívanější příkazy pro journalctl

První příkaz, na který byste se měli podívat, je ten, který zobrazuje protokoly jádra Linuxu. Ano, systemd také zpracovává úložiště protokolů jádra, takže můžete získat i protokoly předchozích bot. Zde je příkaz:

# journalctl --catalog --lines = 3000 --pager-end "_TRANSPORT = jádro"

Ukáže vám pager, kde můžete vidět poslední zprávy. Pomocí kláves se šipkami (↑ / ↓) nebo Page Up / Page Down můžete posouvat nahoru na posledních 3 000 řádků. Příznak -catalog instruuje journalctl, aby zobrazoval kontext kolem řádků protokolu, podobně jako restartování počítače nebo v jiných kontextech zastavení / spuštění služby. Vždy dávám tento příznak, protože vždy záleží na kontextu, pomáhá zjistit, v jaké situaci se řádek protokolu objevil, takže můžete hádat, proč jste dostali tento řádek protokolu.

Nyní možná chcete vidět pouze řádky protokolu z aktuálního bootování:

# journalctl --catalog --lines = 35000 --pager-end --boot "_TRANSPORT = jádro"

Všimněte si, že argument příkazového řádku -boot funguje ve všech situacích, nejen s protokoly jádra. Pokud dáváte přednost začátku od začátku:

# journalctl --catalog --boot "_TRANSPORT = jádro"

Nevím, jestli je to váš případ, ale mám dost jaderných protokolů! A co mít obecný přehled o vašem stroji?

# journalctl --catalog --lines = 3000 --pager-end

Páni, ve vašem systému se děje spousta věcí! Trochu filtrování by zde bylo užitečné. Jedním z nejpoužívanějších filtrů je shoda s konkrétní službou (jako je váš server SSH nebo server HTTP), název systémové jednotky pro službu SSH je sshd.služba, takže:

# journalctl --catalog --lines = 3000 --pager-end --unit = sshd.servis

To je skvělé, že?? Je použitelný, pouze pokud znáte název služby - ale v mnoha případech neznáte název této služby. Pokud se nacházíte v takové situaci, můžete potřebovat seznam služeb, jejich popisy a stav:

# systemctl list-units --type = service

Dobře, tento problém je nyní vyřešen. Někdy se však zobrazí chybová zpráva, kterou dostanete z externího systému, jako je váš vlastní web, nebo z aplikace na ploše. Pravděpodobně tedy budete chtít ve zprávě protokolu vyhledat konkrétní slovo nebo větu. Od systemd v237 je to nyní možné.

V journalctl se při hledání nerozlišují malá a velká písmena, pokud hledané slovo obsahuje všechna malá písmena. Pokud tedy prohledáváte slovo port, prohledá také slovo port s velkými písmeny. Příklad:

# journalctl --catalog --lines = 3000 --pager-end --grep = "port"

Nyní, pokud hledáte slovo jako CPU, bude vyhledávat pouze CPU se všemi velkými písmeny, nebude hledat CPU.

# journalctl --catalog --lines = 3000 --pager-end --grep = "CPU"

Pamatujete si chybovou zprávu z externího systému? Obecně tyto zprávy obsahují časové razítko. Chcete-li filtrovat zprávu protokolu, můžete použít toto časové razítko. journalctl vám může zobrazit všechny zprávy protokolu od určitého data a času s argumentem -since:

# journalctl --catalog --since = "2018-07-30 09:30:00"

Pokud je tento externí systém vzdálený nebo používá časová razítka UTC, budete chtít filtrovat na základě data a času UTC a zobrazit v terminálu časová razítka UTC, takže si je nemusíte převádět ve své hlavě, což bývá opravdu matoucí. Chcete-li tak učinit, budete muset přidat UTC za časový řetězec v argumentu -since. Poté budete muset přidat příznak -utc. Například:

# journalctl --catalog --since = "2018-07-30 10:45:00 UTC" --utc

Všimněte si, že můžete použít samotný příznak -utc, v tomto případě v zásadě zobrazí všechna data a časy v časovém pásmu UTC.

# journalctl --catalog --lines = 3000 --pager-end --utc

Protokoly jsou lépe spravovány pomocí journalctl

Jak můžete vidět u všech předchozích příkazů, systemd journaling usnadňuje filtrování a ladění, protože můžete vybírat všechny řádky protokolu pomocí jediného příkazu journalctl. Někteří z vás pravděpodobně věděli ve starověku, kdy jste museli ručně otevřít každý soubor v / var / log, abyste měli obecnou představu o problému a o tom, co se stalo. Se všemi tipy, které jste se zde naučili, budete vlastnit solidní nástroje pro prohlížení vašich zpráv protokolu tak, jak to VY chcete.

Hry Nainstalujte si nejnovější Dolphin Emulator pro Gamecube a Wii na Linuxu
Nainstalujte si nejnovější Dolphin Emulator pro Gamecube a Wii na Linuxu
Emulátor Dolphin vám umožní hrát vybrané hry Gamecube a Wii na osobních počítačích se systémem Linux (PC). Jako volně dostupný herní emulátor s otevř...
Hry Jak používat GameConqueror Cheat Engine v Linuxu
Jak používat GameConqueror Cheat Engine v Linuxu
Tento článek popisuje průvodce používáním cheatovacího modulu GameConqueror v systému Linux. Mnoho uživatelů, kteří hrají hry v systému Windows, často...
Hry Nejlepší emulátory herních konzolí pro Linux
Nejlepší emulátory herních konzolí pro Linux
Tento článek uvádí seznam populárního softwaru pro emulaci herních konzolí, který je k dispozici pro Linux. Emulace je vrstva softwarové kompatibility...