systemd

Masterjournal forstår systemlogger

Masterjournal forstår systemlogger
Systemd er det nye verktøyet for administrering av tjenester. Opprettet opprinnelig av Red Hat, lar det bedre administrere tjenester via en sentralisert prosess som overvåker og lanserer tjenester etter behov. Men systemd inkluderer også et containersystem, et cron-system, en måte å tilby midlertidige kataloger til tjenester på en sikker måte og også et loggesystem - det er her vi skal fokusere her.

Å forstå logger er viktig: hvis du noen gang faller på en server som har en feil eller er hacket, er den eneste måten å forstå hva som skjedde, via logger. Hovedapplikasjonen vi skal bruke er journalctl derav navnet på artikkelen. Så lytt nøye som på riktig dag, kanskje du blir glad for å vite hvordan det fungerer.

Hvor er lagrede systemlogger? Og hvilket format det er lagret i?

Vi antar at du har et normalt system, fordi systemd kan tilpasses for å være på eksepsjonelle steder. I tillegg noen Linux-distribusjoner som Ubuntu 16.04 deaktivert vedvarende loggføring som standard, noe som forhindrer systemd å gjøre jobben sin riktig. Hvis du har en slik distribusjon, kan du redigere / etc / systemd / journald.conf-fil, endre Lagring = automatisk til Lagring = vedvarende og til slutt, start på nytt.

Så du finner normalt systemd-loggfilene i / var / log / journal. Journalsystemet er i seg selv en tjeneste som kalles system-journald.service.  La oss prøve å liste opp filene i denne katalogen:

# ls / var / log / journal / -R
/ var / log / journal /:
15e43c1734090ac7fbea6b40fcd99d31
 
/ var / log / journal / 15e43c1734090ac7fbea6b40fcd99d31:
system @ a39da368947bd2ba-231f9bfc18a7a356.journal ~
system @ 62ac1299826d036cb043d6c06a9493b7-0000000000000001-00067d6410099a19.tidsskrift
bruker-1000 @ b27e98812223a9bc-387e0521703f73d9.journal ~
bruker-1000 @ 2123bc076b58569fe1fb13e9dbc1b0e0-0000000000000001-0007fe36ac2810e0.tidsskrift
bruker-1000.tidsskrift
[mange andre filer som de ovenfor ...]

Fordi jeg vil at du skal fortsette å lese, måtte jeg forkorte utdataene da det inneholder mange filer (i mitt eksempel mer enn 60 filer), beklager det! Fristet til å åpne en kanskje?

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

Hei, ser det ikke ut som de vanlige loggfilene du ser riktig? Ikke bekymre deg, denne filen er ikke ødelagt, du oppdaget nettopp et aspekt av systemd: systemd lagrer filer i binært format. Derfor er det så lite som mulig: strukturerte data som tid eller sted lagres rett i binær, noe som vanligvis tar mindre byte enn tekst. Men det er ikke den eneste grunnen.

systemd lagrer ikke bare logglinjer. Hensikten er å gjøre loggovervåking og leting enklere. For å hjelpe deg med denne oppgaven, er loggmeldinger faktisk en tekstlinje ledsaget av data som logg alvorlighetsgrad (advarsel, feil osv.), eller til og med felt som bare vil være nyttige for applikasjonen din (URL for eksempel forespurt).

# journalctl --output = verbose --all
PRIORITET = 6
_UID = 0
_GID = 0
_CAP_EFFECTIVE = 3fffffffff
_BOOT_ID = ee4cc2ce7e8273aaffb5fc59c873ce7b
_MACHINE_ID = bc422e0feaab64bb7dd218c24e6830e5
_HOSTNAME = linux
SYSLOG_FACILITY = 3
SYSLOG_IDENTIFIER = systemd
ENHET = dnf-makecache.service
_TRANSPORT = journal
_PID = 1
_COMM = systemd
_EXE = / usr / lib / systemd / systemd
_CMDLINE = / usr / lib / systemd / systemd - switched-root --system - deserialize 76
_SYSTEMD_CGROUP = / init.omfang
_SYSTEMD_UNIT = init.omfang
_SYSTEMD_SLICE =-.skjære
_SELINUX_CONTEXT = system_u: system_r: init_t: s0
CODE_FILE = src / kjerne / jobb.c
CODE_LINE = 795
CODE_FUNCTION = jobb_log_status_melding
MESSAGE_ID = a76e08846f5f0971371dbb11126e62e1
MESSAGE = Startet dnf makecache.
# journalctl --catalog --lines = 3000 - side-end "_TRANSPORT = kjerne" RESULTAT = ferdig
_SOURCE_REALTIME_TIMESTAMP = 1532886335471422

Jeg har fortalt deg at det er mange felt (her er det 25 felt, eller 29 teller tidsstempler), alt utdraget ovenfor er bare for en enkelt loggmelding! Den store fordelen er at du kan kjøre et søk ved å filtrere på hvilket som helst felt i denne loggmeldingen. Dette gjør at du virkelig kan avansert filtrering.

Et av de mest åpenbare filterene du ønsker er å filtrere etter tjenesten. Som du kan se ovenfor, er det et UNIT-felt, slik at du enkelt kan filtrere for bare å få loggmeldinger fra en tjeneste. Jeg forteller deg mer om det senere.

Men denne datamengden betyr også noe annet: i nesten alle tilfeller vil du aldri åpne en loggfil manuelt, og du vil aldri berøre mappen / var / log / journal. Du bruker journalctl for alle oppgaver knyttet til logging. Det er ingen slik loggrotasjons ting, alt administreres av loggmeldingstid.

I tillegg vil antall felt avhenge av hvor god integrasjonen av systemd er i applikasjonen din. Jo flere felt en loggmelding inneholder, jo bedre er den. For basissystemtjenester hadde systemd allerede tatt seg av å gjøre en god integrering, men for andre applikasjoner og tjenester varierer kvaliteten på integrasjonen mye. Normalt skal dette bli bedre etter hvert som folk blir vant til systemd.

Ok, nå er det på tide å oppdage journalctls funksjoner.

Mest brukte kommandoer for journalctl

Den første kommandoen du kanskje vil se på, er den som viser Linux-kjernens logger. Ja, systemd håndterer også lagring av kjerneloggene, slik at du også kan få loggene til tidligere støvler. Her er kommandoen:

# journalctl --catalog --lines = 3000 - personsøker-slutt "_TRANSPORT = kjerne"

Den viser deg en personsøker der du kan se de siste meldingene. Du kan bla opp til de siste 3000 linjene ved hjelp av piltastene (↑ / ↓) eller Side opp / Side ned. Flagget -catalog instruerer journalctl om å vise kontekst rundt logglinjer, omtrent som datamaskiner starter på nytt, eller i andre sammenhenger, en tjeneste som stopper / starter. Jeg setter alltid dette flagget som kontekst alltid betyr noe, det hjelper å vite i hvilken situasjon logglinjen dukket opp, slik at du kan gjette hvorfor du fikk denne logglinjen.

Nå, kanskje du bare vil se logglinjene fra gjeldende oppstart:

# journalctl --catalog --lines = 35000 - personsøker-slutt - boot "_TRANSPORT = kjerne"

Merk at -boot kommandolinjeargumentet fungerer i alle situasjoner, ikke bare med kjerneloggene. Hvis du foretrekker å starte fra begynnelsen:

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

Jeg vet ikke om det er tilfelle for deg, men jeg har nok med kjernelogger! Og hva med å ha en generell oversikt over maskinen din?

# journalctl --catalog --lines = 3000 - side-slutt

Wow, det skjer mange ting på systemet ditt! Litt filtrering vil være nyttig her. Et av de mest brukte filtrene er å matche en bestemt tjeneste (som SSH-serveren eller HTTP-serveren din). Systemd-enhetens filnavn for SSH-tjenesten er sshd.service, så:

# journalctl --catalog --lines = 3000 - side-end - enhet = sshd.service

Det er kult, ikke sant? Det er bare brukbart hvis du vet navnet på tjenesten - men i mange tilfeller vet du ikke navnet på tjenesten. Hvis du er i en slik situasjon, vil du kanskje ha en liste over tjenestene, deres beskrivelser og status:

# systemctl list-units --type = service

Ok, dette problemet er nå løst. Men noen ganger har du en feilmelding du får fra et eksternt system som ditt eget nettsted eller fra et program på skrivebordet. Så du vil sannsynligvis ønske å søke i et bestemt ord eller en bestemt setning i loggmeldingen. Siden systemd v237 er det nå mulig.

I journalctl er søket små og store bokstaver hvis ordet du søker i små bokstaver. Så hvis du søker i ordporten, vil den også søke i ordporten med store bokstaver. Et eksempel:

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

Nå, hvis du søker i et ord som CPU, vil det bare søke i CPU med alle store bokstaver, det vil ikke søke i CPU.

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

Du husker feilmeldingen fra det eksterne systemet? Vanligvis inneholder disse meldingene en tidsstempel. For å filtrere loggmeldingen, kan det være lurt å bruke den tidsstemplet. journalctl kan vise deg alle loggmeldinger siden en bestemt dato og klokkeslett med argumentet -since:

# journalctl --catalog --since = "30.07.2018 09:30:00"

Hvis det eksterne systemet er eksternt eller bruker UTC-tidsstempler, vil du filtrere basert på en UTC-dato og klokkeslett og vise UTC-tidsstemplene i terminalen, slik at du ikke trenger å konvertere det i hodet ditt, det har en tendens til å være virkelig forvirrende. For å gjøre dette må du legge til UTC etter tidsstrengen i -siden argumentet. Du må da legge til -utc-flagget. Så for eksempel:

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

Merk at du kan bruke -utc-flagget alene, i dette tilfellet vil det i utgangspunktet vise alle datoer og klokkeslett i UTC-tidssone.

# journalctl --catalog --lines = 3000 - sider-slutt --utc

Logger administreres bedre med journalctl

Som du kan se med alle tidligere kommandoer, gjør systemd journalføring filtrering og så feilsøking lettere som du kan velge gjennom alle logglinjer ved hjelp av en enkelt kommando, journalctl. Noen av dere visste antagelig gamle tider der man måtte åpne hver fil i / var / logg manuelt for å få en generell ide om problemet og om hva som skjedde. Med alle tipsene du lærte her, vil du eie solide verktøy for å se på loggmeldingene dine slik du vil ha det.

Mus Midterste museknapp fungerer ikke i Windows 10
Midterste museknapp fungerer ikke i Windows 10
De midtre museknapp hjelper deg med å bla gjennom lange websider og skjermer med mye data. Hvis det stopper, vil du ende opp med å bruke tastaturet ti...
Mus Hvordan endre venstre og høyre museknapp på Windows 10 PC
Hvordan endre venstre og høyre museknapp på Windows 10 PC
Det er ganske vanlig at alle datamusenheter er ergonomisk designet for høyrehendte brukere. Men det er tilgjengelige musenheter som er spesielt design...
Mus Etterlig museklikk ved å sveve med Clickless Mouse i Windows 10
Etterlig museklikk ved å sveve med Clickless Mouse i Windows 10
Bruk av mus eller tastatur i feil stilling for overdreven bruk kan føre til mange helseproblemer, inkludert belastning, karpaltunnelsyndrom og mer. I ...