Hvordan bruke journalctl til å lese Linux-systemlogger

Linux-systemlogging endret seg med introduksjonen av systemd. Lær hvordan du bruker journalctl-kommandoen til å lese og filtrere systemloggmeldinger.

Sentralisert logging

Systemd system- og serviceleder introduserte en betydelig endring i måten systemlogger samles på. Logger pleide å være plassert på forskjellige steder i filsystemet i henhold til tjenesten eller demonen som opprettet dem. Men de hadde alle en ting til felles. De var ren tekstfiler.

Med systemd samles og administreres alle system-, oppstarts- og kjerneloggfiler av en sentral, dedikert loggløsning. Formatet de er lagret i er binært. En ting dette letter er å kunne trekke ut dataene i forskjellige formater, som f.eks JSONsom vi skal se.

det kan også gjøre det enklere å kryssreferanser relatert informasjon som tidligere ville vært registrert i separate loggfiler. Fordi dataene nå holdes i en enkelt journal, kan data fra flere interessekilder velges og vises i en enkelt sammenvevd liste med oppføringer.

journalctl er verktøyet pleide å jobbe med journalen.

journalctl uten dikkedarer

Du kan påkalle journalctl uten kommandolinjeparametere:

journalctl

journalctl viser hele journalen, med de eldste oppføringene øverst på listen. Listen vises i mindre, slik at du kan søke og søke ved å bruke de vanlige navigasjonsfunksjonene med mindre. Du kan også bruke venstre- og høyrepiltastene til å bla sidelengs for å lese brede loggoppføringer.

Ved å trykke på Avslutt-tasten hopper du rett til bunnen av listen, og de nyeste loggoppføringene.

Trykk Ctrl+C for å avslutte.

Selv om journalctl kan kalles uten å bruke sudo, du vil sikre at du ser alle detaljene i loggen hvis du bruker sudo.

sudo journalctl

Hvis du trenger det, kan du få journalctl til å sende utdataene til terminalvinduet i stedet for til mindre, ved å bruke alternativet –no-pager.

sudo journalctl --no-pager

Utdataene ruller raskt gjennom terminalvinduet, og du kommer tilbake til ledeteksten.

For å begrense antall linjer som journalctl returnerer, bruk alternativet -n (linjer). La oss be om ti linjer med utdata:

sudo journalctl -n 10

Etter journaloppdateringer

For å få journalctl til å vise de nyeste oppføringene når de kommer til journalen, bruk alternativet -f (følg).

sudo journalctl -f

Den nyeste oppføringen har et tidsstempel på 07:09:07. Etter hvert som ny aktivitet finner sted, legges de nye oppføringene til nederst på skjermen. Nesten sanntidsoppdateringer – kult!

Klokken 07:09:59 injiserte en applikasjon kalt geek-app en loggoppføring i journalen som sa «Ny melding fra HTG.»

Endre visningsformatet

Fordi journalen er en binær fil, må dataene i den oversettes eller analyseres til tekst før de kan vises for deg. Med forskjellige parsere kan forskjellige utdataformater opprettes fra de samme binære kildedataene. Det er flere forskjellige formater som journalctl kan bruke.

Standardutgangen er det korte formatet, som er veldig likt det klassiske systemloggformatet. For å eksplisitt be om det korte formatet, bruk alternativet -o (utdata) med den korte modifikatoren.

sudo journalctl -n 10 -o short-full

Fra venstre til høyre er feltene:

  Hvordan spille Nioh 2 på Linux

Tidspunktet meldingen ble opprettet, i lokal tid.
Vertsnavnet.
Prosessnavnet. Dette er prosessen som genererte meldingen.
Loggmeldingen.

For å få et fullstendig dato- og tidsstempel, bruk kort-full-modifikatoren:

sudo journalctl -n 10 -o short-full

Dato- og klokkeslettformatene i denne utgangen er formatet der du må oppgi datoer og klokkeslett når du velger loggmeldinger etter periode, som vi skal se snart.

For å se alle metadataene som følger med hver loggmelding, bruk den detaljerte modifikatoren.

sudo journalctl -n 10 -o verbose

Der er mange mulige feltmen det er sjelden at alle felt finnes i en melding.

Et felt som er verdt å diskutere er feltet Prioritet. I dette eksemplet har den en verdi på 6. Verdien representerer viktigheten av meldingen:

0: Nødsituasjon. Systemet er ubrukelig.
1: Varsel. En tilstand er merket som bør rettes opp umiddelbart.
2: Kritisk. Dette dekker krasj, coredumps og betydelige feil i primærapplikasjoner.
3: Feil. Det er meldt om en feil, men den anses ikke som alvorlig.
4: Advarsel. Gjør deg oppmerksom på en tilstand som, hvis den ignoreres, kan bli en feil.
5: Legg merke til. Brukes til å rapportere hendelser som er uvanlige, men ikke feil.
6: Informasjon. Regelmessige driftsmeldinger. Disse krever ikke handling.
7: Feilsøking. Meldinger lagt inn i applikasjoner for å gjøre det enklere for dem å feilsøke dem.

Hvis du vil at utgangen skal presenteres som riktig utformet JavaScript-objektnotasjon (JSON)-objekter, bruk json-modifikatoren:

sudo journalctl -n 10 -o json

Hver melding er riktig pakket inn som et velformet JSON-objekt, og vises én melding per utdatalinje.

For å ha JSON-utgangen pent tryktbruk json-pretty-modifikatoren.

sudo journalctl -n 10 -o json-pretty

Hvert JSON-objekt er delt over flere linjer, med hvert navn-verdi-par på en ny linje.

For bare å se loggoppføringsmeldingene, uten tidsstempler eller andre metadata, bruk kattemodifikatoren:

sudo journalctl -n 10 -o cat

Dette visningsformatet kan gjøre det vanskelig å identifisere hvilken prosess som forårsaket logghendelsen, selv om noen meldinger inneholder en anelse.

Velge loggmeldinger etter tidsperiode

For å begrense utdata fra journalctl til en tidsperiode du er interessert i, bruk alternativene -S (siden) og -U (til).

For å se loggoppføringene siden en bestemt tid og dato, bruk denne kommandoen:

sudo journalctl -S "2020-91-12 07:00:00"

sudo journalctl -S

Displayet inneholder kun meldinger som har kommet etter dato og klokkeslett i kommandoen.

Utdata fra sudo journalctl -S

For å definere en tidsperiode du ønsker å rapportere på, bruk både -S (siden) og -U (til) alternativene sammen. Denne kommandoen ser på loggmeldinger fra en 15-minutters tidsperiode.:

sudo journalctl -S "2020-91-12 07:00:00" -U "2020-91-12 07:15:00"

sudo journalctl -S

Dette er en flott kombinasjon hvis du vet at noe rart skjedde på systemet ditt, og omtrent når det skjedde.

utgang fra sudo journalctl -S

Bruke relative tidsperioder

Du kan bruke relativ adressering når du velger tidsperioder. Det betyr at du kan si ting som «vis meg alle hendelser fra en dag siden til nå.» Dette er akkurat hva denne kommandoen betyr. «d» står for «dag», og «-1» betyr en dag i fortiden.

sudo journalctl -S -1d

Loggmeldingene er oppført fra 00:00:00 i går, frem til «nå».

  Slik ser du Netflix på Linux-skrivebordet med Electronplayer

Hvis du ønsker å undersøke noe som har skjedd i den siste tiden, kan du angi en relativ tidsperiode målt i timer. Her gjennomgår vi loggmeldinger fra den siste timen:

sudo journalctl -S -1h

Meldingene fra den siste timen vises for deg. Du kan også bruke «m» for å angi relative tidsperioder målt i minutter, og «w» for uker.

journalctl forstår i dag, i går og i morgen. Disse modifikatorene gir en praktisk måte å spesifisere vanlige tidsperioder. For å se alle hendelsene som skjedde i går, bruk denne kommandoen:

sudo journalctl -S yesterday

Alle journallogghendelser som skjedde i går, frem til midnatt 00:00:00, hentes og vises for deg.

For å se alle loggmeldingene som er mottatt i dag så langt, bruk denne kommandoen:

sudo journalctl -S today

Alt fra 00:00:00 frem til tidspunktet kommandoen gis vises.

Du kan blande de forskjellige tidsperiodemodifikatorene. For å se alt fra to dager siden og frem til starten av i dag, bruk denne kommandoen:

sudo journalctl -S -2d -U today

Alt fra i forgårs til i dag hentes og vises.

Velge loggmeldinger etter datafelt

Du kan søke etter loggmeldinger som matcher et bredt spekter av journalfelt. Disse søkene prøver å finne treff i metadataene vedlagt hver melding. Det anbefales at du se listen over felt og velg de som vil være mest nyttige for deg.

Husk at om en søknad fyller ut hvert felt eller ikke er helt opp til forfatterne av søknaden. Du kan ikke garantere at hvert felt blir fylt ut.

Alle journalfeltmodifikatorene brukes på samme måte. Vi vil bruke noen i eksemplene nedenfor. For å se etter loggmeldinger fra en bestemt applikasjon, bruk _COMM (kommando)-modifikatoren. Hvis du også bruker alternativet -f (følg), vil journalctl spore nye meldinger fra denne applikasjonen etter hvert som de kommer.

sudo journalctl -f _COMM=geek-app

Du kan søke etter loggoppføringer ved å bruke prosess-ID av prosessen som genererte loggmeldingen. Bruk ps-kommandoen for å finne prosess-ID-en til demonen eller applikasjonen du skal søke etter.

sudo journalctl _PID=751

På maskinen som ble brukt til å undersøke denne artikkelen SSH daemon er prosess 751.

Du kan også søke etter bruker-ID. Dette er bruker-IDen til personen som startet applikasjonen eller kommandoen, eller som eier prosessen.

sudo journalctl _UID=1000

Alle meldinger knyttet til andre bruker-ID-er blir filtrert ut. Bare meldinger relatert til bruker 1000 vises:

En annen måte å søke etter loggmeldinger relatert til en spesifikk applikasjon er å angi banen til den kjørbare filen.

sudo journalctl /usr/bin/anacron

Hele anakronen planlegger loggmeldinger hentes og vises.

For å gjøre søket enklere, kan vi be journalctl om å liste opp alle verdiene den har, for alle journalfeltene.

For å se bruker-ID-ene som journalctl har registrert loggmeldinger for, bruk alternativet -F (felt), og send _UID-feltidentifikatoren.

journalctl -F _UID

La oss gjøre det igjen og se på gruppe-IDer (GID-er):

journalctl -F _GID

Du kan gjøre dette med hvilken som helst av journalfeltidentifikatorer.

Oppføring av kjernemeldinger

Det er en innebygd måte å isolere kjernemeldinger raskt. Du trenger ikke å søke og isolere dem selv. Alternativet -k (kjerne) fjerner alle andre meldinger og gir deg en umiddelbar visning av kjerneloggoppføringene.

sudo journalctl -k

Uthevingen gjenspeiler viktigheten av meldingen, i henhold til verdiene i feltet Prioritet.

  Hvordan spille Elite Dangerous på Linux

Gjennomgang av oppstartsmeldinger

Hvis du har et problem knyttet til oppstart som du ønsker å undersøke, har journalctl deg dekket. Kanskje du har lagt til ny maskinvare, og den svarer ikke, eller en tidligere fungerende maskinvarekomponent fungerer ikke lenger etter siste systemoppgradering.

For å se loggoppføringene relatert til den siste oppstarten, bruk alternativet -b (boot):

journalctl -b

Loggoppføringene for siste oppstart vises for deg.

Når vi sier «siste oppstart», mener vi oppstartsprosessen som brakte datamaskinen til live for den nåværende påloggede økten. For å se tidligere oppstarter kan du bruke et tall for å fortelle journalctl hvilken oppstart du er interessert i. For å se den tredje forrige oppstarten, bruk denne kommandoen:

journalctl -b 3

Generelt, hvis du har hatt et problem og måtte starte maskinen på nytt, er det en tidligere oppstartssekvens du er interessert i. Så dette er et vanlig kommandoskjema.

Det er lett å bli blandet med sekvensen av støvler. For å hjelpe kan vi be journalctl om å liste opp støvlene som den har registrert i journalen, ved å bruke –list-boots-alternativet.

journalctl --list-boots

Du kan identifisere oppstarten du ønsker å se meldinger for fra dato- og tidsstempelet, og deretter bruke nummeret i venstre kolonne for å få loggmeldingene for den oppstartssekvensen. Du kan også velge 32-biters oppstartsidentifikator og sende den til journalctl.

sudo journalctl -b 1f00248226ed4ab9a1abac86e0d540d7

Loggmeldingene fra oppstartssekvensen vi ba om, hentes og vises.

Administrere journalharddiskplass

Selvfølgelig lagres journalen og alle loggmeldingene på harddisken din. Det betyr at de tar opp plass på harddisken. For å se hvor mye plass som har tatt opp av journalen, bruk alternativet –diskbruk.

journalctl --disk-usage

Med dagens harddisker er 152 MB ikke mye plass i det hele tatt, men for demonstrasjonsformål vil vi likevel trimme det tilbake. Det er to måter vi kan gjøre dette på. Den første er å sette en størrelsesgrense som du ønsker at journalen skal reduseres tilbake til. Den vil selvfølgelig vokse igjen, men vi kan beskjære den nå klar for den nye veksten.

Vi bruker den fantastiske tittelen –vakuum-størrelse alternativet, og sender inn størrelsen vi ønsker at journalen skal reduseres til. Vi ber om 100 MB. Måten å tenke på dette på er at vi ber journalctl om å «kaste alt du kan, men ikke gå lavere enn 100 MB.»

journalctl --vacuum-size=100M

Den andre måten å kutte ned journalstørrelsen på er å bruke alternativet –vakuum-tid. Dette alternativet forteller journalctl å forkaste meldinger som er eldre enn perioden du oppgir på kommandolinjen. Du kan bruke dager, uker, måneder og år i tidsperioden.

La oss luke ut alle meldinger som er eldre enn én uke:

journalctl --vacuum-time=1weeks

Data vs. informasjon

Data er ikke nyttig med mindre du kan få tak i det og bruke det. Da blir det nyttig informasjon. journalctl-kommandoen er et fleksibelt og sofistikert verktøy som lar deg komme til den aktuelle informasjonen på en rekke måter.

Du kan bruke omtrent hvilken som helst informasjonsbit du har for å komme inn i loggmeldingene du trenger.