systemd

Master journalctl rozumie systémovým protokolom

Master journalctl rozumie systémovým protokolom
Systemd je nový nástroj na správu služieb. Pôvodne ju vytvoril Red Hat a umožňuje lepšiu správu služieb prostredníctvom centralizovaného procesu, ktorý podľa potreby sleduje a spúšťa služby. Ale systemd obsahuje aj kontajnerový systém, cron systém, spôsob bezpečného poskytovania dočasných adresárov službám a tiež systém protokolovania - na to sa tu zameriame.

Porozumenie protokolom je dôležité: ak niekedy spadnete na server, ktorý má chybu alebo je napadnutý hackerom, zvyčajne jediný spôsob, ako pochopiť, čo sa stalo, je pomocou protokolov. Hlavná aplikácia, ktorú použijeme, je journalctl, odtiaľ názov článku. Počúvajte teda pozorne ako v pravý deň, možno budete radi, že viete, ako to funguje.

Kde sú uložené systemd protokoly? A v akom formáte je uložený?

Budeme predpokladať, že máte normálny systém, pretože systemd je možné prispôsobiť tak, aby bol na výnimočných miestach. Rovnako aj niektoré distribúcie systému Linux, napríklad Ubuntu 16.04 v predvolenom nastavení zakázané trvalé protokolovanie, ktoré systému systemd bráni robiť svoju prácu správne. Ak máte takúto distribúciu, upravte / etc / systemd / journald.conf súbor, zmeňte Storage = auto na Storage = persistent a nakoniec reštartujte.

Normálne teda nájdete súbory systemd v / var / log / journal. Samotný systém denníka je služba s názvom system-journald.služby.  Pokúsme sa uviesť zoznam súborov v tomto adresári:

# ls / var / log / journal / -R
/ var / log / journal /:
15e43c1734090ac7fbea6b40fcd99d31
 
/ var / log / journal / 15e43c1734090ac7fbea6b40fcd99d31:
system @ a39da368947bd2ba-231f9bfc18a7a356.časopis ~
system @ 62ac1299826d036cb043d6c06a9493b7-0000000000000001-00067d6410099a19.denník
user-1000 @ b27e98812223a9bc-387e0521703f73d9.časopis ~
user-1000 @ 2123bc076b58569fe1fb13e9dbc1b0e0-0000000000000001-0007fe36ac2810e0.denník
používateľ-1 000.denník
[veľa ďalších súborov, ako sú tie vyššie ...]

Pretože chcem, aby ste čítali ďalej, musel som výstup skrátiť, pretože obsahuje veľa súborov (v mojom príklade viac ako 60 súborov), je mi to ľúto! Možno v pokušení otvoriť jednu?

# head --bytes = 512 / var / log / journal / 15e43c1734090ac7fbea6b40fcd99d31 / [chránené e-mailom]
b58569fe1fb13e9dbc1b0e0-0000000000000001-0007fe36ac2810e0.denník
?s, q?n / FLz???Ulz?l?]????
?_?b???z????o?y1KN ?i?eO??Ž?u?  ?=?x0?Ľ?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ánené e-mailom]
[chránené e-mailom]?_?>??3S???,lR?.?$?g?Ľ???s?/ E??M1??q???

Hej, pozri, to naozaj nevyzerá ako bežné súbory denníka, ktoré vidíš správne? Nebojte sa, tento súbor nie je poškodený, práve ste objavili aspekt systemd: systemd ukladá súbory v binárnom formáte. Preto je to čo najmenšie: štruktúrované údaje, ako napríklad čas alebo umiestnenie, sú uložené priamo v binárnom formáte, ktorý zvyčajne zaberá menej bajtov ako text. Ale to nie je jediný dôvod.

systemd neukladá iba riadky denníka. Jeho zámerom je uľahčiť monitorovanie a prieskum protokolov. Na uľahčenie vykonania tejto úlohy sú správy denníka v skutočnosti riadok textu sprevádzaný údajmi, ako je závažnosť protokolu (varovanie, chyba atď.).), alebo dokonca polia, ktoré by boli užitočné iba pre vašu aplikáciu (napríklad požadovaná adresa URL).

# journalctl --output = verbose --all
PRIORITA = 6
_UID = 0
_GID = 0
_CAP_EFFECTIVE = 3fffffffff
_BOOT_ID = ee4cc2ce7e8273aaffb5fc59c873ce7b
_MACHINE_ID = bc422e0feaab64bb7dd218c24e6830e5
_HOSTNAME = linux
SYSLOG_FACILITY = 3
SYSLOG_IDENTIFIER = systemd
JEDNOTKA = dnf-makecache.služby
_TRANSPORT = denník
_PID = 1
_COMM = systemd
_EXE = / usr / lib / systemd / systemd
_CMDLINE = / usr / lib / systemd / systemd --switched-root --system --deserialize 76
_SYSTEMD_CGROUP = / init.rozsah
_SYSTEMD_UNIT = init.rozsah
_SYSTEMD_SLICE =-.plátok
_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 = Spustené dnf makecache.
# journalctl --catalog --lines = 3000 --pager-end "_TRANSPORT = jadro" VÝSLEDOK = hotovo
_SOURCE_REALTIME_TIMESTAMP = 1532886335471422

Povedal som vám, že existuje veľa polí (tu je 25 polí alebo 29 počítajúcich časových značiek), celý úryvok uvedený vyššie je iba pre jednu správu protokolu! Veľkou výhodou je, že môžete spustiť vyhľadávanie filtráciou podľa ktoréhokoľvek poľa v tejto protokolovej správe. Toto skutočne umožňuje pokročilé filtrovanie.

Jedným z najzrejmejších filtrov, ktoré by ste chceli, je filtrovanie podľa služby. Ako vidíte vyššie, existuje pole JEDNOTKA, takže môžete ľahko filtrovať a dostávať iba logovacie správy z jednej služby. O tom vám poviem neskôr.

Ale toto množstvo údajov znamená aj niečo iné: takmer vo všetkých prípadoch nikdy neotvoríte súbor protokolu manuálne a nikdy sa nedotknete priečinka / var / log / journal. Použijete journalctl na každú úlohu súvisiacu s prihlásením. Neexistuje taká rotácia protokolov, všetko sa spravuje podľa času správy.

Počet polí tiež bude závisieť od toho, aká dobrá je integrácia systému systemd do vašej aplikácie. Čím viac polí správa protokolu obsahuje, tým je kvalitnejšia. Pre služby základného systému sa systemd už postaral o dobrú integráciu, ale pre ďalšie aplikácie a služby sa kvalita integrácie veľmi líši. Normálne by sa to malo časom zlepšiť, keď si ľudia zvyknú na systemd.

Dobre, teraz je čas spoznať funkcie časopisu.

Najpoužívanejšie príkazy pre journalctl

Prvý príkaz, ktorý by ste sa možno mali pozrieť, je príkaz zobrazujúci protokoly jadra Linuxu. Áno, systemd zvláda aj ukladanie protokolov jadra, takže môžete získať protokoly aj predchádzajúcich bootov. Tu je príkaz:

# journalctl --catalog --lines = 3000 --pager-end "_TRANSPORT = jadro"

Ukáže vám pager, kde môžete vidieť posledné správy. Na posledných 3 000 riadkov sa môžete posúvať pomocou klávesov so šípkami (↑ / ↓) alebo Page Up / Page Down. Príznak -catalog dáva pokynu journalctl, aby zobrazoval kontext okolo riadkov protokolu, podobne ako reštartovanie počítača alebo v iných kontextoch zastavenie / spustenie služby. Tento príznak vždy dávam, pretože na kontexte vždy záleží, pomáha zistiť, v ktorej situácii sa riadok denníka objavil, takže môžete hádať, prečo ste dostali tento riadok denníka.

Teraz možno budete chcieť vidieť iba riadky protokolu z aktuálneho bootovania:

# journalctl --catalog --lines = 35000 --pager-end --boot "_TRANSPORT = jadro"

Všimnite si, že argument príkazového riadku -boot funguje vo všetkých situáciách, nielen s protokolmi jadra. Ak chcete začať od začiatku:

# journalctl --catalog --boot "_TRANSPORT = jadro"

Neviem, či je to váš prípad, ale jadrových protokolov mám dosť! A čo všeobecný prehľad o vašom stroji?

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

Páni, vo vašom systéme sa deje veľa vecí! Tu by bolo užitočné trochu filtrovania. Jedným z najpoužívanejších filtrov je zhoda s konkrétnou službou (napríklad váš server SSH alebo server HTTP), názov systémovej jednotky pre službu SSH je sshd.služba, takže:

# journalctl --catalog --lines = 3000 --pager-end --unit = sshd.služby

To je v pohode, však?? Použiteľné je to, iba ak poznáte názov služby - ale v mnohých prípadoch nepoznáte názov tejto služby. Ak sa nachádzate v takejto situácii, môžete potrebovať zoznam služieb, ich popisy a stav:

# systemctl list-units --type = service

Dobre, tento problém je teraz vyriešený. Niekedy sa vám však zobrazí chybové hlásenie, ktoré dostanete z externého systému, napríklad z vlastnej webovej stránky, alebo z aplikácie na ploche. Pravdepodobne teda budete chcieť v protokolovej správe vyhľadať konkrétne slovo alebo vetu. Od verzie systemd v237 je to teraz možné.

V journalctl nerozlišujú veľké a malé písmená, ak hľadané slovo obsahuje všetky malé písmená. Ak teda hľadáte slovo port, bude prehľadávať slovo port aj s veľkými písmenami. Príklad:

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

Ak teraz hľadáte slovo ako CPU, bude prehľadávať iba CPU so všetkými veľkými písmenami, nebude prehľadávať cpu.

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

Chybové hlásenie z externého systému si pamätáte? Spravidla tieto správy obsahujú časovú pečiatku. Na filtrovanie správy v denníku môžete použiť túto časovú pečiatku. journalctl vám môže zobraziť všetky správy protokolu od konkrétneho dátumu a času pomocou argumentu -since:

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

Ak je tento externý systém vzdialený alebo používa časové značky UTC, budete chcieť filtrovať na základe dátumu a času UTC a zobraziť v termináli časové značky UTC, aby ste si ich nemuseli prevádzať vo svojej hlave, čo býva naozaj mätúce. Ak to chcete urobiť, budete musieť za časový reťazec in -since pridať UTC. Potom budete musieť pridať príznak -utc. Napríklad:

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

Upozorňujeme, že môžete použiť samotný príznak -utc, v takom prípade v zásade zobrazí všetky dátumy a časy v časovom pásme UTC.

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

Denníky sa lepšie spravujú pomocou journalctl

Ako môžete vidieť u všetkých predchádzajúcich príkazov, systemd journaling uľahčuje filtrovanie a ladenie, pretože môžete vyberať všetky riadky protokolu pomocou jediného príkazu journalctl. Niektorí z vás pravdepodobne vedeli v staroveku, kde ste museli ručne otvoriť každý súbor v priečinku / var / log, aby ste mali všeobecnú predstavu o probléme a o tom, čo sa stalo. Vďaka všetkým tipom, ktoré ste sa tu naučili, budete vlastniť solídne nástroje, pomocou ktorých budete môcť svoje správy v denníku sledovať tak, ako to VY CHCETE.

Hry Ako nainštalovať League Of Legends na Ubuntu 14.04
Ako nainštalovať League Of Legends na Ubuntu 14.04
Ak ste fanúšikom League of Legends, potom je to pre vás príležitosť otestovať spustenie League of Legends. Upozorňujeme, že program PlayOnLinux podpor...
Hry Nainštalujte si najnovšiu strategickú hru OpenRA na Ubuntu Linux
Nainštalujte si najnovšiu strategickú hru OpenRA na Ubuntu Linux
OpenRA je herný engine Libre / Free Real Time Strategy, ktorý obnovuje rané hry z Westwoodu, ako napríklad klasické Command & Conquer: Red Alert. Dist...
Hry Nainštalujte si najnovší Dolphin Emulator pre Gamecube a Wii na Linuxe
Nainštalujte si najnovší Dolphin Emulator pre Gamecube a Wii na Linuxe
Emulátor Dolphin vám umožní hrať vybrané hry Gamecube a Wii na osobných počítačoch Linux (PC). Emulátor Dolphin, ktorý je voľne dostupným emulátorom ...