sistemski

Master journalctl razumije sistemske zapisnike

Master journalctl razumije sistemske zapisnike
Systemd je nova usluga upravljanja alatima. U početku stvoren od strane Red Hat-a, omogućuje bolje upravljanje uslugama putem centraliziranog procesa koji nadgleda i pokreće usluge po potrebi. Ali systemd također uključuje sustav kontejnera, cron sustav, način pružanja privremenih direktorija uslugama na siguran način i sustav za evidentiranje - tu ćemo se ovdje usredotočiti.

Razumijevanje dnevnika je važno: ako ikad padnete na poslužitelj koji ima bug ili je hakiran, općenito je jedini način da shvatite što se dogodilo putem dnevnika. Glavna aplikacija koju ćemo koristiti je journalctl pa otuda i naziv članka. Stoga pažljivo slušajte kao u pravi dan, možda ćete biti sretni kad znate kako to funkcionira.

Gdje su pohranjeni sistemski dnevnici? I u kojem je formatu pohranjen?

Pretpostavit ćemo da imate normalan sustav, jer se systemd može prilagoditi da bude na iznimnim mjestima. Kao i neke Linux distribucije poput Ubuntu 16.04 onemogućio je trajno bilježenje prema zadanim postavkama, što sprječava systemd da pravilno radi svoj posao. Ako imate takvu distribuciju, uredite / etc / systemd / journald.conf datoteku, promijenite Storage = auto u Storage = persistent i na kraju ponovno pokrenite.

Tako ćete normalno pronaći datoteke dnevnika systemd u / var / log / journal. Sustav dnevnika sam je po sebi usluga koja se naziva system-journald.servis.  Pokušajmo navesti datoteke u ovom direktoriju:

# ls / var / log / journal / -R
/ var / log / journal /:
15e43c1734090ac7fbea6b40fcd99d31
 
/ var / log / journal / 15e43c1734090ac7fbea6b40fcd99d31:
sustav @ a39da368947bd2ba-231f9bfc18a7a356.časopis ~
sustav @ 62ac1299826d036cb043d6c06a9493b7-0000000000000001-00067d6410099a19.časopis
korisnik-1000 @ b27e98812223a9bc-387e0521703f73d9.časopis ~
user-1000 @ 2123bc076b58569fe1fb13e9dbc1b0e0-0000000000000001-0007fe36ac2810e0.časopis
korisnik-1000.časopis
[puno drugih datoteka poput onih gore ...]

Budući da želim da nastavite čitati, morao sam skratiti izlaz jer sadrži mnogo datoteka (u mom primjeru više od 60 datoteka), žao mi je zbog toga! U iskušenju da možda otvorim jedan?

# head --bytes = 512 / var / log / journal / 15e43c1734090ac7fbea6b40fcd99d31 / [e-mail zaštićen]
b58569fe1fb13e9dbc1b0e0-0000000000000001-0007fe36ac2810e0.časopis
?s, q?n / FLz???Ulz?l?]????
?_?b???z????o?y1KN ?ja?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-mail zaštićen]
[e-pošta zaštićena]?_?>??3S???,lR?.?$?g?L???s?/ E??M1??q???

Hej, vidiš, to zapravo ne izgleda kao uobičajene datoteke dnevnika koje dobro vidiš? Ne brinite, ova datoteka nije oštećena, upravo ste otkrili aspekt systemd: systemd pohranjuje datoteke u binarnom formatu. Zato je što je moguće manji: strukturirani podaci poput vremena ili mjesta pohranjuju se ravno u binarnom obliku, što obično traje manje bajtova nego tekst. Ali to nije jedini razlog.

systemd ne pohranjuje samo redove dnevnika. Namjera mu je olakšati nadzor i istraživanje trupaca. Kao pomoć u ovom zadatku, poruke dnevnika zapravo su redak teksta popraćen podacima kao što su težina dnevnika (upozorenje, pogreška itd.), ili čak polja koja bi bila korisna samo vašoj aplikaciji (na primjer, zahtijeva se URL).

# journalctl --output = opširno - sve
PRIORITET = 6
_UID = 0
_GID = 0
_CAP_EFFECTIVE = 3fffffffff
_BOOT_ID = ee4cc2ce7e8273aaffb5fc59c873ce7b
_MACHINE_ID = bc422e0feaab64bb7dd218c24e6830e5
_HOSTNAME = linux
SYSLOG_FACILITY = 3
SYSLOG_IDENTIFIER = systemd
JEDINICA = dnf-makecache.servis
_TRANSPORT = časopis
_PID = 1
_COMM = systemd
_EXE = / usr / lib / systemd / systemd
_CMDLINE = / usr / lib / systemd / systemd --switched-root --system - deserialize 76
_SYSTEMD_CGROUP = / init.opseg
_SYSTEMD_UNIT = init.opseg
_SYSTEMD_SLICE =-.kriška
_SELINUX_CONTEXT = system_u: system_r: init_t: s0
CODE_FILE = src / core / job.c
CODE_LINE = 795
CODE_FUNCTION = poruka_datoteke_posla_poslova
PORUKA_ID = a76e08846f5f0971371dbb11126e62e1
PORUKA = Pokrenut dnf makecache.
# journalctl --catalog --lines = 3000 --pager-end "_TRANSPORT = kernel" REZULTAT = gotovo
_SOURCE_REALTIME_TIMESTAMP = 1532886335471422

Rekao sam vam da postoji puno polja (ovdje postoji 25 polja ili 29 vremenskih oznaka), svi gornji isječci samo su za jednu poruku dnevnika! Velika je prednost što možete pokrenuti pretraživanje filtriranjem bilo kojeg polja u ovoj poruci dnevnika. To vam stvarno omogućuje napredno filtriranje.

Jedan od najočitijih filtara koji biste željeli je filtriranje prema usluzi. Kao što vidite gore, postoji polje JEDINICA tako da možete jednostavno filtrirati da biste dobili samo poruke dnevnika s jedne usluge. O tome ću vam reći kasnije.

Ali ova količina podataka znači i nešto drugo: u gotovo svim slučajevima datoteku dnevnika nikada nećete otvoriti ručno i nikada nećete dodirnuti mapu / var / log / journal. Upotrijebit ćete journalctl za bilo koji zadatak povezan s bilježenjem. Ne postoji takva stvar rotacije dnevnika, svime upravlja vrijeme poruke dnevnika.

Također, broj polja ovisit će o tome koliko je dobra integracija systemd u vašoj aplikaciji. Što više polja sadrži zapisnik, to je bolje. Za osnovne usluge sustava, systemd se već pobrinuo za dobru integraciju, ali za ostale programe i usluge, kvaliteta integracije uvelike varira. To bi s vremenom trebalo postati bolje jer se ljudi naviknu na sustav.

U redu, sada je vrijeme da otkrijemo karakteristike journalctla.

Najčešće korištene naredbe za journalctl

Prva naredba koju biste možda htjeli pogledati je ona koja prikazuje zapise Linux jezgre. Da, systemd također obrađuje pohranu dnevnika jezgre, tako da možete dobiti i zapisnike prethodnih čizama. Evo naredbe:

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

Prikazuje vam dojavljivač na kojem možete vidjeti posljednje poruke. Možete se pomicati do posljednjih 3.000 redaka pomoću tipki sa strelicama (↑ / ↓) ili Page Up / Page Down. Oznaka -catalog upućuje journalctl da prikazuje kontekst oko redaka dnevnika, slično poput ponovnog pokretanja računala ili, u ostalim kontekstima, zaustavljanja / pokretanja usluge. Uvijek stavim ovu zastavicu jer je kontekst uvijek važan, pomaže znati u kojoj se situaciji pojavio redak dnevnika, tako da možete pogoditi zašto ste dobili taj red dnevnika.

Sada, možda želite vidjeti samo retke dnevnika iz trenutnog pokretanja:

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

Imajte na umu da argument -boot naredbenog retka radi u svim situacijama, ne samo s dnevnicima kernela. Ako više volite početi od početka:

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

Ne znam je li to slučaj s vama, ali imam dovoljno dnevnika jezgre! A što je s općim pregledom vašeg stroja?

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

Vau, puno se stvari događa na vašem sustavu! Ovdje bi bilo korisno malo filtriranja. Jedan od najčešće korištenih filtara je podudaranje određene usluge (poput vašeg SSH poslužitelja ili HTTP poslužitelja), naziv datoteke systemd jedinice za SSH uslugu je sshd.usluga, pa:

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

To je u redu, zar ne?? Pa, korisno je samo ako znate naziv usluge - ali u puno slučajeva ne znate naziv te usluge. Ako ste u takvoj situaciji, možda ćete trebati popis usluga, njihove opise i njihov status:

# systemctl list-units --type = usluga

U redu, ovaj je problem sada riješen. Ali ponekad imate poruku o pogrešci koju dobijete od vanjskog sustava poput vlastite web stranice ili iz aplikacije na radnoj površini. Stoga ćete vjerojatno htjeti pretražiti određenu riječ ili rečenicu u poruci dnevnika. Od systemd v237, to je sada moguće.

U journalctl pretraga ne razlikuje velika i mala slova ako je riječ koju pretražujete malim slovima. Dakle, ako pretražujete riječ port, pretraživat će i riječ port velikim slovima. Primjer:

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

Ako pretražite riječ poput CPU, ona će pretraživati ​​samo CPU sa velikim slovima, neće pretraživati ​​procesor.

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

Sjećate se poruke pogreške iz vanjskog sustava? Općenito, ove poruke sadrže vremensku oznaku. Da biste filtrirali poruku dnevnika, možda ćete htjeti upotrijebiti tu vremensku oznaku. journalctl vam može navesti sve poruke dnevnika od određenog datuma i vremena s argumentom -since:

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

Ako je taj vanjski sustav udaljen ili koristi vremenske oznake UTC, morat ćete filtrirati na temelju UTC-datuma i vremena i prikazati na terminalu vremenske oznake UTC, tako da ga ne morate pretvoriti u svojoj glavi, što obično izgleda stvarno zbunjujuće. Da biste to učinili, morat ćete dodati UTC nakon vremenskog niza u argumentu -since. Tada ćete morati dodati zastavicu -utc. Tako, na primjer:

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

Imajte na umu da možete koristiti samo zastavicu -utc, u ovom će slučaju u osnovi prikazivati ​​sve datume i vremena u UTC vremenskoj zoni.

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

Dnevnicima je bolje upravljati pomoću journalctl

Kao što možete vidjeti sa svim prethodnim naredbama, systemd vođenje dnevnika olakšava filtriranje i olakšava uklanjanje pogrešaka jer možete odabrati kroz sve redove dnevnika pomoću jedne naredbe, journalctl. Neki od vas vjerojatno su znali davna vremena kada ste morali ručno otvarati svaku datoteku u / var / log da biste imali opću ideju o problemu i o onome što se dogodilo. Uz sve savjete koje ste ovdje naučili, imat ćete solidne alate za gledanje poruka dnevnika onako kako VI to želite.

Instalirajte najnoviju strategiju igre OpenRA na Ubuntu Linux
OpenRA je Libre / Free Real Time strateški pokretač igre koji stvara rane Westwoodove igre poput klasične Command & Conquer: Red Alert. Distribuirani ...
Instalirajte najnoviji Dolphin Emulator za Gamecube i Wii na Linux
Dolphin Emulator omogućuje vam igranje odabranih Gamecube i Wii igara na Linux osobnim računalima (PC). Dolphin Emulator je slobodno dostupan i emula...
Kako koristiti GameConqueror Cheat Engine u Linuxu
Članak pokriva vodič o korištenju GameConqueror varalice u Linuxu. Mnogi korisnici koji igraju igre na sustavu Windows često koriste aplikaciju "Cheat...