Overgangen til systemd har medført betydelige endringer i måten Linux håndterer systemlogging. Denne artikkelen utforsker hvordan du kan bruke `journalctl`-kommandoen for å lese og filtrere systemloggmeldinger.
Sentralisert loggføring
Med systemd, system- og tjenestebehandleren, har det skjedd en markant endring i hvordan systemlogger blir innsamlet. Tidligere var logger spredt rundt i filsystemet, avhengig av hvilken tjeneste eller demon som hadde generert dem. Felles for dem alle var at de bestod av ren tekst.
Systemd samler og administrerer nå alle system-, oppstarts- og kjerneloggfiler via en sentral, dedikert løsning. Det binære formatet som brukes for lagring, gir fleksibilitet til å trekke ut data i ulike formater, som for eksempel JSON, noe vi skal demonstrere.
Denne sentraliseringen forenkler også kryssreferanser mellom relatert informasjon som tidligere ville vært splittet i separate logger. Med alle data samlet i en enkelt journal, kan informasjon fra ulike kilder kombineres og vises i en sammenhengende liste.
`journalctl` er verktøyet som brukes for å interagere med journalen.
Grunnleggende bruk av journalctl
Du kan kjøre `journalctl` uten å spesifisere noen kommandolinjeparametere:
journalctl
Dette viser hele journalen, med de eldste innleggene først. Listen vises gjennom en mindre pager, som lar deg navigere ved hjelp av standardfunksjoner. Du kan også bruke venstre- og høyre piltast for å rulle sidelengs for å lese brede logginnlegg.
Ved å trykke på «End»-tasten, hopper du direkte til bunnen av listen og de nyeste logginnleggene.
Avslutt ved å trykke Ctrl+C.
Selv om `journalctl` kan kjøres uten `sudo`, er det anbefalt å bruke `sudo` for å sikre at du ser alle detaljene i loggen.
sudo journalctl
For å sende utdataene direkte til terminalen i stedet for gjennom `less`, kan du bruke alternativet `–no-pager`.
sudo journalctl --no-pager
Dette fører til at utdataene ruller raskt forbi i terminalvinduet, før du returnerer til ledeteksten.
For å begrense antall linjer som returneres, bruk `-n` (linjer). La oss be om de ti siste linjene:
sudo journalctl -n 10
Følge sanntidsoppdateringer
For å vise nye logginnlegg i det de dukker opp i journalen, bruk alternativet `-f` (følg).
sudo journalctl -f
Det nyeste innlegget har tidsstemplet 07:09:07. Når ny aktivitet skjer, legges nye innlegg til nederst på skjermen, nesten som sanntidsoppdateringer!
Klokken 07:09:59 la en applikasjon kalt `geek-app` et logginnlegg til journalen med meldingen «Ny melding fra HTG.»
Endre visningsformat
Siden journalen er en binær fil, må dataene oversettes eller analyseres til tekst før de kan vises. Ulike parsere kan skape forskjellige utdataformater basert på de samme binære dataene. `journalctl` tilbyr flere formater for dette.
Standardutdataene er det korte formatet, som ligner på det klassiske systemloggformatet. For å eksplisitt be om det korte formatet, bruk `-o` (utdata) med `short`-modifikatoren:
sudo journalctl -n 10 -o short
Feltene er (fra venstre mot høyre):
Tidspunktet meldingen ble generert (lokal tid).
Vertsnavnet.
Prosessnavnet (prosessen som genererte meldingen).
Selve loggmeldingen.
For et fullstendig dato- og tidsstempel, bruk `short-full`-modifikatoren:
sudo journalctl -n 10 -o short-full
Dato- og klokkeslettformatet i denne utdataen er formatet du må bruke når du filtrerer loggmeldinger etter tidsperiode, som vi snart skal se.
For å se alle metadataene som er knyttet til hvert logginnlegg, bruk `verbose`-modifikatoren:
sudo journalctl -n 10 -o verbose
Det finnes mange mulige felt, men det er sjelden at alle er til stede i et enkelt innlegg.
Feltet Prioritet er verdt å nevne. I eksemplet her har det verdien `6`. Verdien representerer viktigheten av meldingen:
0: Nødsituasjon. Systemet er ubrukelig.
1: Varsel. En tilstand som bør korrigeres umiddelbart.
2: Kritisk. Omfatter krasj, coredumps og betydelige feil i primære applikasjoner.
3: Feil. En feil er rapportert, men anses ikke som alvorlig.
4: Advarsel. Gjør deg oppmerksom på en tilstand som kan eskalere til en feil hvis den ignoreres.
5: Merknad. Brukes for å rapportere uvanlige hendelser, men ikke feil.
6: Informasjon. Vanlige driftsmeldinger som ikke krever handling.
7: Feilsøking. Meldinger for å forenkle feilsøking av applikasjoner.
For å vise utdataene som korrekt formatert JavaScript Object Notation (JSON), bruk `json`-modifikatoren:
sudo journalctl -n 10 -o json
Hvert innlegg pakkes inn som et velformet JSON-objekt, med ett objekt per utdatalinje.
For å få JSON-utdataene pent formatert, bruk `json-pretty`-modifikatoren.
sudo journalctl -n 10 -o json-pretty
Hvert JSON-objekt deles over flere linjer, med hvert nøkkel-verdi-par på en ny linje.
For kun å vise loggmeldingene, uten tidsstempler eller andre metadata, bruk `cat`-modifikatoren:
sudo journalctl -n 10 -o cat
Dette formatet kan gjøre det vanskelig å identifisere hvilken prosess som forårsaket logghendelsen, selv om noen meldinger gir en antydning.
Filtrere loggmeldinger etter tidsperiode
For å begrense `journalctl`-utdataene til en spesifikk tidsperiode, bruk alternativene `-S` (siden) og `-U` (til).
For å se alle logginnlegg siden en bestemt tid og dato, bruk denne kommandoen:
sudo journalctl -S "2020-01-12 07:00:00"
Visningen inneholder bare meldinger som er kommet etter tidspunktet i kommandoen.
For å definere en tidsperiode, bruk både `-S` (siden) og `-U` (til) sammen. Denne kommandoen ser på loggmeldinger i en 15-minutters periode:
sudo journalctl -S "2020-01-12 07:00:00" -U "2020-01-12 07:15:00"
Dette er en nyttig kombinasjon hvis du vet at noe uvanlig skjedde på systemet ditt, og omtrent når.
Bruke relative tidsperioder
Du kan bruke relativ adressering når du velger tidsperioder. Dette betyr at du kan angi «vis meg alle hendelser fra en dag siden og frem til nå.» Dette er akkurat det denne kommandoen gjør. «d» står for «dag», og «-1» betyr en dag tilbake i tid:
sudo journalctl -S -1d
Loggmeldingene listes fra 00:00:00 i går, frem til «nå».
For å se på noe som har skjedd nylig, kan du angi en relativ tidsperiode i timer. Her ser vi på loggmeldinger fra den siste timen:
sudo journalctl -S -1h
Meldinger fra den siste timen vises. Du kan også bruke «m» for minutter og «w» for uker.
`journalctl` forstår begrepene «i dag», «i går» og «i morgen». Disse gir praktiske måter å spesifisere vanlige tidsperioder. For å se alle hendelser som skjedde i går, bruk:
sudo journalctl -S yesterday
Alle journalhendelser fra i går, frem til midnatt 00:00:00, hentes og vises.
For å se alle loggmeldinger som er mottatt i dag så langt, bruk:
sudo journalctl -S today
Alt fra 00:00:00 til tidspunktet kommandoen kjøres, vises.
Du kan blande forskjellige tidsperiodemodifikatorer. For å se alt fra to dager siden til starten av i dag, bruk:
sudo journalctl -S -2d -U today
Alt fra i forgårs til i dag hentes og vises.
Filtrere loggmeldinger etter datafelt
Du kan søke etter loggmeldinger som samsvarer med et bredt spekter av journalfelt. Disse søkene prøver å finne treff i metadataene som følger med hvert innlegg. Det anbefales at du gjennomgår listen over felt og velger de som er mest relevante for deg.
Husk at hvorvidt et program fyller ut alle feltene, er opp til utviklerne. Du kan ikke garantere at hvert felt vil være fylt ut.
Alle journalfeltmodifikatorene brukes på samme måte. Vi vil bruke noen i eksemplene nedenfor. For å lete etter loggmeldinger fra en spesifikk applikasjon, bruk `_COMM` (kommando)-modifikatoren. Hvis du også bruker alternativet `-f` (følg), vil `journalctl` spore nye meldinger fra applikasjonen etterhvert som de kommer:
sudo journalctl -f _COMM=geek-app
Du kan søke etter logginnlegg ved å bruke prosess-IDen (PID) til prosessen som genererte loggmeldingen. Bruk `ps`-kommandoen for å finne PIDen til demonen eller applikasjonen du vil søke etter.
sudo journalctl _PID=751
På maskinen som ble brukt til denne artikkelen, er SSH-demonen prosess 751.
Du kan også søke etter bruker-ID (UID). 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-IDer filtreres bort. Bare meldinger relatert til bruker 1000 vises:
En annen måte å søke etter meldinger knyttet til en spesifikk applikasjon, er å angi stien til den kjørbare filen:
sudo journalctl /usr/bin/anacron
Alle loggmeldinger fra anacron-planleggeren hentes og vises.
For å forenkle søk, kan vi be `journalctl` om å liste alle verdiene som er registrert for de forskjellige journalfeltene.
For å vise bruker-IDene som `journalctl` har registrert loggmeldinger for, bruk alternativet `-F` (felt), og send feltidentifikatoren `_UID`:
journalctl -F _UID
La oss gjenta dette med gruppe-IDer (GIDer):
journalctl -F _GID
Dette kan gjøres med hvilken som helst av journalfeltidentifikatorene.
Vise kjernemeldinger
Det finnes en innebygd funksjon for å isolere kjernemeldinger raskt. Du trenger ikke å søke og filtrere dem ut manuelt. Alternativet `-k` (kjerne) fjerner alle andre meldinger og gir deg en umiddelbar visning av kjernelogginnleggene.
sudo journalctl -k
Uthevingen viser viktigheten av meldingen, i henhold til verdiene i Prioritet-feltet.
Vise oppstartsmeldinger
Dersom du har et oppstartsrelatert problem du ønsker å undersøke, har `journalctl` deg dekket. Det kan være at du har lagt til ny maskinvare, som ikke svarer, eller en maskinvarekomponent som sluttet å fungere etter en systemoppdatering.
For å se logginnlegg knyttet til den siste oppstarten, bruk alternativet `-b` (boot):
journalctl -b
Logginnlegg fra den siste oppstarten vises.
Med «siste oppstart» mener vi den prosessen som brakte datamaskinen opp til den nåværende økten. For å se tidligere oppstarter, kan du bruke et tall for å fortelle `journalctl` hvilken oppstart du er interessert i. For å se den tredje siste oppstarten, bruk:
journalctl -b 3
<img loading=»lazy» decoding=»async» src=»https://tipsbilk.net/wp-content/uploads/2022/02/1645209195_105_Hvordan-