sistemd

Master journalctl razume sistemske dnevnike

Master journalctl razume sistemske dnevnike
Systemd je nova storitev upravljanja orodij. Prvotno ga je ustvaril Red Hat in omogoča boljše upravljanje storitev prek centraliziranega procesa, ki po potrebi spremlja in zažene storitve. Toda systemd vključuje tudi sistem zabojnikov, sistem cron, način za varno zagotavljanje začasnih imenikov storitvam in tudi sistem beleženja - tu se bomo osredotočili tukaj.

Razumevanje dnevnikov je pomembno: če kdaj padete na strežnik, ki ima napako ali je vdran, je na splošno vaš edini način, da razumete, kaj se je zgodilo, dnevniki. Glavna aplikacija, ki jo bomo uporabljali, je journalctl, od tod tudi ime članka. Zato pozorno poslušajte, kot na pravi dan, boste morda z veseljem vedeli, kako to deluje.

Kje so shranjeni sistemski dnevniki? In v kakšni obliki je shranjena?

Predpostavili bomo, da imate običajen sistem, ker je sistemd mogoče prilagoditi tako, da je na izjemnih mestih. Nekatere distribucije Linuxa, kot je Ubuntu 16.04 privzeto onemogočil trajno beleženje, kar preprečuje, da bi systemd pravilno opravil svoje delo. Če imate takšno distribucijo, uredite / etc / systemd / journald.conf, spremenite Storage = auto v Storage = persistent in na koncu znova zaženite.

Tako boste običajno našli datoteke sistemskih dnevnikov v / var / log / journal. Sistem dnevnika je sam po sebi storitev, imenovana system-journald.storitev.  Poskusimo našteti datoteke v tem imeniku:

# ls / var / log / journal / -R
/ var / log / journal /:
15e43c1734090ac7fbea6b40fcd99d31
 
/ var / log / journal / 15e43c1734090ac7fbea6b40fcd99d31:
sistem @ a39da368947bd2ba-231f9bfc18a7a356.revija ~
sistem @ 62ac1299826d036cb043d6c06a9493b7-0000000000000001-00067d6410099a19.revija
uporabnik-1000 @ b27e98812223a9bc-387e0521703f73d9.revija ~
user-1000 @ 2123bc076b58569fe1fb13e9dbc1b0e0-0000000000000001-0007fe36ac2810e0.revija
uporabnik-1000.revija
[veliko drugih datotek, kot so zgoraj ...]

Ker želim, da nadaljujete z branjem, sem moral skrajšati izhod, saj vsebuje veliko datotek (v mojem primeru več kot 60 datotek), žal zaradi tega! Mika, da bi ga morda odprl?

# head --bytes = 512 / var / log / journal / 15e43c1734090ac7fbea6b40fcd99d31 / [email protected]
b58569fe1fb13e9dbc1b0e0-0000000000000001-0007fe36ac2810e0.revija
?s, q?n / FLz???Ulz?l?]????
?_?b???z????o?y1KN ?jaz?eO??W?u?  ?=?x0?L?d?7??X4n #?e? d3l?
str??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 '?=??[[e-pošta zaščitena]
[e-pošta zaščitena]?_?>??3S???,lR?.?$?g?L???s?/ E??M1??q???

Hej, vidite, to v resnici ni videti kot običajne dnevniške datoteke, ki jih vidite pravilno? Ne skrbite, ta datoteka ni poškodovana, pravkar ste odkrili vidik systemd: systemd shranjuje datoteke v binarni obliki. Zato je čim manjši: strukturirani podatki, kot sta čas ali lokacija, so shranjeni naravnost v binarni obliki, ki običajno traja manj bajtov kot besedilo. Toda to ni edini razlog.

systemd ne shranjuje le vrstic dnevnika. Njegov namen je olajšati nadzor in raziskovanje hlodov. Za pomoč pri tej nalogi so dnevniška sporočila pravzaprav vrstica besedila, skupaj s podatki, kot so resnost dnevnika (opozorilo, napaka itd.).) ali celo polja, ki bi bila koristna samo za vašo aplikacijo (na primer zahtevan URL).

# journalctl --output = verbose --all
PREDNOST = 6
_UID = 0
_GID = 0
_CAP_EFFECTIVE = 3fffffffff
_BOOT_ID = ee4cc2ce7e8273aaffb5fc59c873ce7b
_MACHINE_ID = bc422e0feaab64bb7dd218c24e6830e5
_HOSTNAME = linux
SYSLOG_FACILITY = 3
SYSLOG_IDENTIFIER = systemd
ENOTA = dnf-makecache.storitev
_TRANSPORT = dnevnik
_PID = 1
_COMM = systemd
_EXE = / usr / lib / systemd / systemd
_CMDLINE = / usr / lib / systemd / systemd --switched-root --system - deserialize 76
_SYSTEMD_CGROUP = / init.Obseg
_SYSTEMD_UNIT = init.Obseg
_SYSTEMD_SLICE =-.rezina
_SELINUX_CONTEXT = system_u: system_r: init_t: s0
CODE_FILE = src / core / job.c
CODE_LINE = 795
CODE_FUNCTION = message_log_status_message
MESSAGE_ID = a76e08846f5f0971371dbb11126e62e1
SPOROČILO = Začel dnf makecache.
# journalctl --catalog --lines = 3000 --pager-end "_TRANSPORT = jedro" REZULTAT = končano
_SOURCE_REALTIME_TIMESTAMP = 1532886335471422

Povedal sem vam, da je veliko polj (tukaj je 25 polj ali 29 štetje časovnih žigov), vsi zgornji delčki so le za eno sporočilo dnevnika! Velika prednost je, da lahko zaženete iskanje s filtriranjem poljubnega polja v tem dnevniškem sporočilu. To vam resnično omogoča napredno filtriranje.

Eden najbolj očitnih filtrov, ki bi si ga želeli, je filtriranje po storitvi. Kot lahko vidite zgoraj, obstaja polje UNIT, tako da lahko preprosto filtrirate, da dobite samo dnevniška sporočila ene storitve. Več o tem vam povem kasneje.

Toda ta količina podatkov pomeni tudi nekaj drugega: v skoraj vseh primerih dnevniške datoteke ne boste nikoli odprli ročno in se ne boste nikoli dotaknili mape / var / log / journal. Journalctl boste uporabili za katero koli nalogo, povezano z beleženjem. Takšne stvari rotacije dnevnika ni, vse ureja čas sporočila dnevnika.

Tudi število polj bo odvisno od tega, kako dobra je integracija systemd v vašo aplikacijo. Več polj, kot jih vsebuje sporočilo dnevnika, boljše je. Za osnovne sistemske storitve je systemd že poskrbel za dobro integracijo, za druge aplikacije in storitve pa se kakovost integracije zelo razlikuje. Običajno bi se to moralo sčasoma izboljšati, ko se ljudje navadijo na sistem.

V redu, zdaj je čas, da odkrijemo lastnosti journalctla.

Najbolj uporabljeni ukazi za journalctl

Prvi ukaz, ki bi si ga morda želeli ogledati, je tisti, ki prikazuje dnevnike jedra Linuxa. Da, systemd ureja tudi shranjevanje dnevnikov jedra, tako da lahko dobite tudi dnevnike prejšnjih zagonov. Tu je ukaz:

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

Prikaže vam pozivnik, kjer si lahko ogledate zadnja sporočila. Do zadnjih 3.000 vrstic se lahko pomikate s puščičnimi tipkami (↑ / ↓) ali Page Up / Page Down. Oznaka -catalog ukazuje journalctl, naj prikaže kontekst okoli vrstic dnevnika, podobno kot ponovni zagon računalnika ali, v drugih okoliščinah, zaustavitev / zagon storitve. Vedno postavim to zastavico, ker je kontekst vedno pomemben, pomaga vedeti, v kateri situaciji se je pojavila vrstica dnevnika, zato lahko uganite, zakaj ste dobili to vrstico dnevnika.

Zdaj morda želite videti le vrstice dnevnika iz trenutnega zagona:

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

Upoštevajte, da argument -boot ukazne vrstice deluje v vseh situacijah, ne samo v dnevnikih jedra. Če želite začeti od začetka:

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

Ne vem, ali je to res za vas, vendar imam dovolj dnevnikov jedra! In kaj o splošnem pregledu vaše naprave?

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

Vau, v vašem sistemu se dogaja veliko stvari! Tu bi bilo v pomoč malo filtriranja. Eden najpogosteje uporabljenih filtrov je ujemanje z določeno storitvijo (na primer strežnikom SSH ali strežnikom HTTP), ime datoteke sistemske enote za storitev SSH pa je sshd.storitev, torej:

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

To je v redu, kajne? No, uporabno je le, če poznate ime storitve - toda v večini primerov imena te storitve ne poznate. Če ste v takšni situaciji, boste morda želeli seznam storitev, njihove opise in njihov status:

# systemctl list-units --type = storitev

V redu, ta problem je zdaj rešen. Včasih pa se prikaže sporočilo o napaki, ki ga prejmete iz zunanjega sistema, kot je vaše spletno mesto, ali iz aplikacije na namizju. Tako boste verjetno želeli poiskati določeno besedo ali stavek v dnevniškem sporočilu. Od systemd v237 je to zdaj mogoče.

V journalctl iskanje ne razlikuje med velikimi in malimi črkami, če je beseda, ki jo iščete, v malih črkah. Torej, če iščete besedo port, bo iskala tudi besedo port z velikimi črkami. Primer:

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

Zdaj, če iščete besedo, kot je CPU, bo iskal samo CPU z vsemi velikimi črkami, ne bo iskal procesorja.

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

Spomnite se sporočila o napaki iz zunanjega sistema? Na splošno ta sporočila vsebujejo časovni žig. Če želite filtrirati sporočilo dnevnika, boste morda želeli uporabiti ta časovni žig. journalctl vam lahko navede vsa sporočila dnevnika od določenega datuma in ure z argumentom -since:

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

Če je zunanji sistem oddaljen ali uporablja časovne žige UTC, boste želeli filtrirati na podlagi datuma in časa UTC in v terminalu prikazati časovne žige UTC, tako da vam ga ni treba pretvarjati v glavo, kar je običajno res zmedeno. Če želite to narediti, boste morali dodati UTC po časovnem nizu v argumentu -since. Nato boste morali dodati zastavico -utc. Tako na primer:

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

Upoštevajte, da lahko uporabite samo zastavico -utc, v tem primeru bo v bistvu prikazal vse datume in ure v časovnem pasu UTC.

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

Dnevnike je bolje upravljati z journalctl

Kot lahko vidite pri vseh prejšnjih ukazih, sistemsko dnevnik omogoča filtriranje in tako lažje odpravljanje napak, saj lahko z enim samim ukazom izberete vse vrstice dnevnika, journalctl. Nekateri ste verjetno vedeli že v starih časih, ko ste morali ročno odpreti vsako datoteko v / var / log, da ste imeli splošno predstavo o težavi in ​​o tem, kaj se je zgodilo. Z vsemi nasveti, ki ste se jih naučili tukaj, boste imeli trdna orodja za pregledovanje svojih dnevniških sporočil tako, kot si želite.

Najboljši emulatorji igralne konzole za Linux
V tem članku bo navedena priljubljena programska oprema za emulacijo igralne konzole, ki je na voljo za Linux. Emulacija je sloj združljivosti program...
Najboljši Linux Distros za igre na srečo v letu 2021
Operacijski sistem Linux je daleč od prvotnega, preprostega, strežniškega videza. Ta OS se je v zadnjih letih izjemno izboljšal in se je zdaj razvil v...
Kako zajeti in pretakati svojo igralno sejo v Linuxu
V preteklosti je bilo igranje iger le hobi, sčasoma pa je igralniška industrija zabeležila veliko rast glede tehnologije in števila igralcev. Občinstv...