systemd

Master journalctl mõistab systemd logisid

Master journalctl mõistab systemd logisid
Systemd on uus teenuste haldamise tööriist. Algselt Red Hati loodud süsteem võimaldab teenuseid paremini hallata tsentraliseeritud protsessi kaudu, mis jälgib ja käivitab teenuseid vastavalt vajadusele. Kuid systemd sisaldab ka konteinerite süsteemi, croni süsteemi, viisi, kuidas turvaliselt teenustele ajutisi katalooge pakkuda, ja ka logimissüsteemi - sinna me siin keskendume.

Logidest aru saamine on oluline: kui kunagi langete serverisse, kus on viga või häkkimine, on teie ainus viis toimunust logide kaudu aru saada. Peamine rakendus, mida kavatseme kasutada, on journalctl ja sellest ka artikli nimi. Nii et kuula tähelepanelikult, sest õigel päeval võid olla õnnelik, kui tead, kuidas see töötab.

Kuhu on salvestatud systemd logid? Ja mis vormingus see on salvestatud?

Eeldame, et teil on tavaline süsteem, kuna systemd saab kohandada nii, et see oleks erakordne. Samuti on mõned Linuxi jaotused nagu Ubuntu 16.04 keelas vaikimisi püsiva logimise, mis takistab systemd-l oma tööd õigesti tegema. Kui teil on selline levitamine, muutke faili / etc / systemd / journald.conf-fail, muutke Storage = auto väärtuseks Storage = persistent ja lõpuks taaskäivitage.

Nii et tavaliselt leiab systemd failid kataloogist / var / log / journal. Ajakirjade süsteem on ise süsteem-journald nimeline teenus.teenus.  Proovime loetleda selles kataloogis olevad failid:

# ls / var / log / päevik / -R
/ var / log / journal /:
15e43c1734090ac7fbea6b40fcd99d31
 
/ var / log / journal / 15e43c1734090ac7fbea6b40fcd99d31:
system @ a39da368947bd2ba-231f9bfc18a7a356.päevik ~
süsteem @ 62ac1299826d036cb043d6c06a9493b7-000000000000000001-00067d6410099a19.ajakiri
kasutaja-1000 @ b27e98812223a9bc-387e0521703f73d9.päevik ~
kasutaja-1000 @ 2123bc076b58569fe1fb13e9dbc1b0e0-000000000000000001-0007fe36ac2810e0.ajakiri
kasutaja-1000.ajakiri
[palju muid faile, nagu ülaltoodud ...]

Kuna ma tahan, et te jätkaksite lugemist, pidin väljundit lühendama, kuna see sisaldab palju faile (minu näites rohkem kui 60 faili), vabandust selle pärast! Kiusatus ehk avada?

# head --bytes = 512 / var / log / journal / 15e43c1734090ac7fbea6b40fcd99d31 / [meiliga kaitstud]
b58569fe1fb13e9dbc1b0e0-00000000000000000001-0007fe36ac2810e0.ajakiri
?s, q?n / FLz???Ulz?l?]????
?_?b???z????o?y1KN ?i?eO??W?u?  ?=?x0?L?d?7??X4n #?e? d3l?
lk??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 = p?&?"   ?0
????*????_??  ???
5?????yk?G? ?6?|??u??w: # 12?Y??
3 TU;???"?jX??2?x '?=??[[meiliga kaitstud]
[meiliga kaitstud]?_?>??3S???,lR?.?$?g?L???s?/ E??M1??q???

Kuule, see ei tundu tegelikult tavaliste logifailidena, mida näete õigesti? Ärge muretsege, see fail pole rikutud, just avastasite SystemD aspekti: systemd salvestab faile binaarses vormingus. Sellepärast on see võimalikult väike: struktureeritud andmed, näiteks aeg või asukoht, salvestatakse otse binaarsesse, mis võtab tavaliselt vähem baiti kui tekst. Kuid see pole ainus põhjus.

systemd ei salvesta ainult logiridu. Selle eesmärk on muuta palkide jälgimine ja uurimine lihtsamaks. Selle ülesande hõlbustamiseks on logisõnumid tegelikult tekstirida, millele on lisatud sellised andmed nagu logi tõsidus (hoiatus, viga jne.).) või isegi väljad, mis oleksid kasulikud ainult teie rakendusele (näiteks nõutakse URL-i).

# journalctl - väljund = paljusõnaline - kõik
PRIORITEET = 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.teenus
_TRANSPORT = ajakiri
_PID = 1
_COMM = systemd
_EXE = / usr / lib / systemd / systemd
_CMDLINE = / usr / lib / systemd / systemd - lülitatud juur - süsteem - deserialiseeri 76
_SYSTEMD_CGROUP = / init.ulatus
_SYSTEMD_UNIT = init.ulatus
_SYSTEMD_SLICE =-.viil
_SELINUX_CONTEXT = system_u: system_r: init_t: s0
CODE_FILE = src / core / job.c
CODE_LINE = 795
CODE_FUNCTION = job_log_status_sõnum
MESSAGE_ID = a76e08846f5f0971371dbb11126e62e1
MESSAGE = alustatud dnf makecache.
# journalctl --catalog --lines = 3000 --pager-end "_TRANSPORT = kernel" TULEMUS = valmis
_SOURCE_REALTIME_TIMESTAMP = 1532886335471422

Olen teile öelnud, et on palju välju (siin on 25 välja või 29 loendavat ajatemplit), kõik ülaltoodud jupid on mõeldud ainult ühe logisõnumi jaoks! Suur eelis on see, et saate käivitada otsingu, filtreerides selle logisõnumi mis tahes välja. See võimaldab tõesti täpsemat filtreerimist.

Üks kõige ilmsematest filtritest, mida soovite, on filtreerimine teenuse järgi. Nagu ülal näete, on väli UNIT, et saaksite hõlpsalt filtreerida, et saada ainult logiteenuseid ühest teenusest. Räägin sellest hiljem lähemalt.

Kuid see andmemaht tähendab ka midagi muud: peaaegu alati ei ava te logifaili käsitsi ega puuduta kausta / var / log / journal. Kõiki logimisega seotud ülesandeid kasutate journalctl. Sellist logi pööramise asja pole, kõike haldab logisõnumi aeg.

Samuti sõltub väljade arv sellest, kui hea on süsteemi rakenduse integreerimine teie rakendusse. Mida rohkem välju logisõnum sisaldab, seda parem see on. Põhisüsteemiteenuste puhul hoolitses systemd juba hea integreerimise eest, kuid teiste rakenduste ja teenuste puhul on integratsiooni kvaliteet väga erinev. Tavaliselt peaks see aja jooksul paremaks minema, kuna inimesed harjuvad süsteemiga.

Okei, nüüd on aeg avastada journalctl funktsioonid.

Enim kasutatud käsud journalctl jaoks

Esimene käsk, mida võiksite vaadata, on see, mis näitab Linuxi tuuma logisid. Jah, systemd tegeleb ka kerneli logide salvestamisega, nii et saate ka eelmiste buutide logid. Siin on käsk:

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

See näitab teile piiparit, kus näete viimaseid sõnumeid. Nooleklahvide (↑ / ↓) või Page Up / Page Down abil saate kerida 3000 viimase reani. Lipp -catalog annab journalctl-le korralduse näidata konteksti logiridade ümber, nagu arvuti taaskäivitamine või muus kontekstis teenuse peatamine / käivitamine. Ma panen selle lipu alati, kuna kontekst on alati oluline, see aitab teada saada, millises olukorras logirida ilmus, nii et võite arvata, miks sa selle logirea said.

Nüüd soovite võib-olla näha ainult praeguse alglaadimise logiridu:

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

Pange tähele, et käsurea argument -boot töötab kõikides olukordades, mitte ainult tuuma logidega. Kui eelistate alustada otsast:

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

Ma ei tea, kas see kehtib ka teie kohta, kuid mul on piisavalt kernelilogisid! Ja mis siis, kui teil on oma masinast üldine ülevaade?

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

Wow, teie süsteemis toimub palju asju! Natuke filtreerimisest oleks siin abi. Üks enimkasutatavaid filtreid on konkreetse teenuse (näiteks teie SSH-serveri või HTTP-serveri) sobitamine, SSD-teenuse systemd üksuse failinimi on sshd.teenus, nii et:

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

See on lahe, kas pole? Noh, see on kasutatav ainult siis, kui teate teenuse nime - kuid paljudel juhtudel ei tea te selle teenuse nime. Sellises olukorras võite soovida teenuste loetelu, kirjeldusi ja olekut:

# systemctl list-unit --type = teenus

Olgu, see probleem on nüüd lahendatud. Kuid mõnikord on teil tõrketeade, mille saate välisest süsteemist, näiteks oma veebisaidilt, või töölaual olevast rakendusest. Nii et tõenäoliselt soovite logisõnumist otsida konkreetset sõna või lauset. Alates systemd v237 on see nüüd võimalik.

Journalctl-s on otsingutäht tundetu, kui otsitav sõna on kõik väiketähtedega. Nii et kui otsite sõnast port, otsib see ka suurtähtedega sõna port. Näide:

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

Kui otsite sellist sõna nagu protsessor, otsib see protsessorit ainult kõigi suurtähtedega, see ei otsi protsessorit.

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

Mäletate välise süsteemi tõrketeadet? Üldiselt sisaldavad need sõnumid ajatemplit. Logiteate filtreerimiseks võiksite kasutada seda ajatemplit. journalctl saab loetleda kõik logisõnumid alates kindlast kuupäevast ja kellaajast argumendiga -since:

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

Kui see väline süsteem on kaugjuhtimispult või kasutab UTC ajatemplid, peaksite filtreerima UTC kuupäeva ja kellaaja põhjal ning kuvama terminalis UTC ajatemplid, nii et te ei pea seda oma peas teisendama, mis kipub olema tõesti segane. Selleks peate lisama UTC pärast ajastringi argumendis -since. Seejärel peate lisama lipu -utc. Nii näiteks:

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

Pange tähele, et saate kasutada lippu -utc üksi, sellisel juhul kuvatakse selles põhimõtteliselt kõik kuupäevad ja kellaajad UTC ajavööndis.

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

Logisid saab paremini hallata journalctl abil

Nagu kõigi eelmiste käskude puhul näete, muudab systemd päevikute filtreerimine ja silumise lihtsamaks, kuna saate valida kõigi logiridade abil ühe käsuga journalctl. Mõned teist ilmselt teadsid iidsetest aegadest, kus peate kõik failid kataloogis / var / log käsitsi avama, et saada ülevaade probleemist ja juhtunust. Kõigi siin õpitud nõuannete põhjal on teil usaldusväärsed tööriistad, et vaadata oma logisõnumeid just nii, nagu soovite.

Microsoft Sculpt Touch juhtmeta hiirte ülevaade
Lugesin hiljuti Microsoft Sculpt Touch juhtmevaba hiir ja otsustas selle osta. Pärast mõnda aega kasutamist otsustasin jagada sellega oma kogemusi. Se...
Rakenduse AppyMouse ekraanipaneel ja hiirekursor Windowsi tahvelarvutitele
Tahvelarvutite kasutajad tunnevad hiirekursorit sageli puudust, eriti kui neil on kombeks sülearvuteid kasutada. Puutetundliku ekraaniga nutitelefonid...
Hiire keskmine nupp ei tööta Windows 10-s
The hiire keskmine nupp aitab teil sirvida pikki rohke andmega veebisaite ja ekraane. Kui see peatub, siis lõpuks kasutate kerimiseks klaviatuuri, mis...