Sådan bruger du journalctl til at læse Linux-systemlogfiler

Linux-systemlogning ændrede sig med introduktionen af ​​systemd. Lær, hvordan du bruger journalctl-kommandoen til at læse og filtrere systemlogmeddelelser.

Centraliseret logning

Ikke fremmed for kontroverser, systemd system- og servicemanager introducerede en væsentlig ændring i den måde, systemlogfiler indsamles på. Logs plejede at være placeret forskellige steder i filsystemet i henhold til den tjeneste eller dæmon, der oprettede dem. Men de havde alle én ting til fælles. De var almindelige tekstfiler.

Med systemd samles og administreres alle system-, boot- og kernelogfiler af en central, dedikeret logningsløsning. Formatet, de er gemt i, er binært. En ting dette letter er at kunne udtrække data i forskellige formater, som f.eks JSON, som vi skal se.

det kan også gøre det lettere at krydshenvise relateret information, som tidligere ville være blevet registreret i separate logfiler. Fordi dataene nu opbevares i en enkelt journal, kan data fra flere interessekilder vælges og vises i en enkelt sammenvævet liste af poster.

journalctl er værktøjet plejede at arbejde med journalen.

journalctl uden dikkedarer

Du kan påkalde journalctl uden kommandolinjeparametre:

journalctl

journalctl viser hele journalen med de ældste poster øverst på listen. Listen vises i mindre, så du kan bladre og søge ved at bruge de sædvanlige navigationsfunktioner med mindre. Du kan også bruge venstre pil og højre piletasterne til at rulle sidelæns for at læse brede logposter.

Hvis du trykker på Afslut-tasten, hoppes direkte til bunden af ​​listen, og de nyeste logposter.

Tryk på Ctrl+C for at afslutte.

Selvom journalctl kan kaldes uden at bruge sudo, du vil sikre dig, at du ser alle detaljerne i loggen, hvis du bruger sudo.

sudo journalctl

Hvis du har brug for det, kan du få journalctl til at sende sit output til terminalvinduet i stedet for til mindre ved at bruge –no-pager-indstillingen.

sudo journalctl --no-pager

Outputtet ruller hurtigt gennem terminalvinduet, og du vender tilbage til kommandoprompten.

For at begrænse antallet af linjer, som journalctl returnerer, skal du bruge -n (linjer). Lad os bede om ti linjers output:

sudo journalctl -n 10

Efter journalopdateringer

For at få journalctl til at vise de nyeste posteringer, når de ankommer til kladden, skal du bruge -f (følg) muligheden.

sudo journalctl -f

Den nyeste post har et tidsstempel på 07:09:07. Efterhånden som ny aktivitet finder sted, tilføjes de nye poster nederst på displayet. Nærmest realtidsopdateringer – fedt!

Klokken 07:09:59 injicerede en applikation kaldet geek-app en logpost i journalen, der sagde “Ny besked fra HTG.”

Ændring af visningsformat

Fordi journalen er en binær fil, skal dataene i den oversættes eller parses til tekst, før de kan vises for dig. Med forskellige parsere kan forskellige outputformater oprettes ud fra de samme binære kildedata. Der er flere forskellige formater, som journalctl kan bruge.

Standardoutputtet er det korte format, som minder meget om det klassiske systemlogformat. For eksplicit at anmode om det korte format, brug -o (output)-indstillingen med den korte modifikator.

sudo journalctl -n 10 -o short-full

Fra venstre mod højre er felterne:

  Hvad er forskellen mellem Linux og Unix?

Det tidspunkt, hvor beskeden blev oprettet, i lokal tid.
Værtsnavnet.
Processens navn. Dette er den proces, der genererede beskeden.
Logmeddelelsen.

For at få et fuldstændigt dato- og tidsstempel, brug kort-fuld-modifikationen:

sudo journalctl -n 10 -o short-full

Dato- og tidsformaterne i dette output er det format, hvor du skal angive datoer og klokkeslæt, når du vælger logmeddelelser efter periode, som vi snart skal se.

For at se alle de metadata, der ledsager hver logmeddelelse, skal du bruge den verbose modifikator.

sudo journalctl -n 10 -o verbose

Der er mange mulige felter, men det er sjældent, at alle felter er til stede i en meddelelse.

Et område, der er værd at diskutere, er feltet Prioritet. I dette eksempel har den en værdi på 6. Værdien repræsenterer vigtigheden af ​​meddelelsen:

0: Nødsituation. Systemet er ubrugeligt.
1: Advarsel. En tilstand er blevet markeret, som bør rettes med det samme.
2: Kritisk. Dette dækker nedbrud, coredumps og væsentlige fejl i primære applikationer.
3: Fejl. Der er rapporteret en fejl, men den anses ikke for at være alvorlig.
4: Advarsel. Gør opmærksom på en tilstand, som, hvis den ignoreres, kan blive en fejl.
5: Bemærk. Bruges til at rapportere hændelser, der er usædvanlige, men ikke fejl.
6: Information. Regelmæssige driftsmeddelelser. Disse kræver ikke handling.
7: Fejlretning. Beskeder indsat i applikationer for at gøre det nemmere for dem at fejlsøge dem.

Hvis du ønsker, at outputtet skal præsenteres som korrekt udformet JavaScript-objektnotation (JSON)-objekter, brug json-modifikatoren:

sudo journalctl -n 10 -o json

Hver besked er korrekt pakket ind som et velformet JSON-objekt og vises én besked pr. outputlinje.

For at have JSON-output smukt trykt, brug json-pretty modifier.

sudo journalctl -n 10 -o json-pretty

Hvert JSON-objekt er opdelt på tværs af flere linjer, med hvert navn-værdi-par på en ny linje.

For kun at se logindtastningsmeddelelserne uden tidsstempler eller andre metadata, skal du bruge kat-modifikatoren:

sudo journalctl -n 10 -o cat

Dette visningsformat kan gøre det vanskeligt at identificere, hvilken proces der rejste loghændelsen, selvom nogle meddelelser indeholder en ledetråd.

Valg af logbeskeder efter tidsperiode

For at begrænse outputtet fra journalctl til en tidsperiode, du er interesseret i, skal du bruge mulighederne -S (siden) og -U (indtil).

Brug denne kommando for at se logposterne siden et bestemt tidspunkt og dato:

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

sudo journalctl -S

Displayet indeholder kun beskeder, der er ankommet efter dato og klokkeslæt i kommandoen.

Output fra sudo journalctl -S

For at definere en tidsperiode, du ønsker at rapportere om, skal du bruge både -S (siden) og -U (indtil) mulighederne sammen. Denne kommando ser på logmeddelelser fra en 15 minutters periode.:

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

sudo journalctl -S

Dette er en fantastisk kombination, hvis du ved, at der skete noget mærkeligt på dit system, og nogenlunde hvornår det skete.

output fra sudo journalctl -S

Brug af relative tidsperioder

Du kan bruge relativ adressering, når du vælger dine tidsperioder. Det betyder, at du kan sige ting som “vis mig alle begivenheder fra en dag siden til nu.” Det er bare, hvad denne kommando betyder. “d” står for “dag”, og “-1” betyder en dag i fortiden.

sudo journalctl -S -1d

Logmeddelelserne er opført fra kl. 00:00:00 i går, indtil “nu”.

  Sådan opdateres Telegram Linux desktop-appen

Hvis du vil undersøge noget, der er sket i den seneste tid, kan du angive en relativ tidsperiode målt i timer. Her gennemgår vi logmeddelelser fra den sidste time:

sudo journalctl -S -1h

Beskederne fra den sidste time vises for dig. Du kan også bruge “m” til at indstille relative tidsperioder målt i minutter og “w” for uger.

journalctl forstår i dag, i går og i morgen. Disse modifikatorer giver en praktisk måde at angive almindelige tidsperioder. For at se alle de begivenheder, der skete i går, skal du bruge denne kommando:

sudo journalctl -S yesterday

Alle journalloghændelser, der skete i går, op til midnat 00:00:00, hentes og vises for dig.

For at se alle logbeskeder modtaget i dag indtil videre, brug denne kommando:

sudo journalctl -S today

Alt fra kl. 00:00:00 til det tidspunkt, hvor kommandoen afgives, vises.

Du er i stand til at blande de forskellige tidsperiodemodifikatorer. For at se alt fra to dage siden til starten af ​​i dag, brug denne kommando:

sudo journalctl -S -2d -U today

Alt siden i forgårs og frem til i dag hentes og vises.

Valg af logmeddelelser efter datafelter

Du kan søge efter logbeskeder der matcher en bred vifte af tidsskriftsfelter. Disse søgninger forsøger at finde match i de metadata, der er knyttet til hver besked. Det anbefales, at du se listen over felter og vælg dem, der vil være mest nyttige for dig.

Husk, om en ansøgning udfylder hvert felt eller ej, er helt op til forfatterne af ansøgningen. Du kan ikke garantere, at alle felter bliver udfyldt.

Alle journalfeltmodifikatorer bruges på samme måde. Vi vil bruge et par stykker i vores eksempler nedenfor. For at søge efter logmeddelelser fra en specifik applikation skal du bruge _COMM (kommando) modifier. Hvis du også bruger muligheden -f (følg), vil journalctl spore nye beskeder fra denne applikation, efterhånden som de ankommer.

sudo journalctl -f _COMM=geek-app

Du kan søge efter logposter ved hjælp af proces-id af den proces, der genererede logmeddelelsen. Brug ps-kommandoen til at finde proces-id’et for den dæmon eller applikation, du vil søge efter.

sudo journalctl _PID=751

På den maskine, der blev brugt til at forske i denne artikel SSH daemon er proces 751.

Du kan også søge på bruger ID. Dette er bruger-id’et for den person, der startede applikationen eller kommandoen, eller som ejer processen.

sudo journalctl _UID=1000

Alle meddelelser, der er knyttet til andre bruger-id’er, filtreres fra. Kun meddelelser relateret til bruger 1000 vises:

En anden måde at søge efter logmeddelelser relateret til en specifik applikation er at angive stien til den eksekverbare.

sudo journalctl /usr/bin/anacron

Hele anakronen skemalæggerlogmeddelelser hentes og vises.

For at gøre søgningen nemmere kan vi bede journalctl om at liste alle de værdier, den har, for ethvert af journalfelterne.

For at se de bruger-id’er, som journalctl har registreret logbeskeder for, skal du bruge -F (felter)-indstillingen og sende _UID-feltidentifikationen.

journalctl -F _UID

Lad os gøre det igen og se på gruppe-id’er (GID’er):

journalctl -F _GID

Du kan gøre dette med enhver af journalfeltidentifikatorer.

Liste over kernemeddelelser

Der er en indbygget måde at isolere kernebeskeder hurtigt. Du behøver ikke selv at søge og isolere dem. Valgmuligheden -k (kerne) fjerner alle andre meddelelser og giver dig en øjeblikkelig visning af kernelogposterne.

sudo journalctl -k

Fremhævningen afspejler vigtigheden af ​​meddelelsen i henhold til værdierne i feltet Prioritet.

  Sådan får du Linux til at ligne Chrome OS

Gennemgang af opstartsmeddelelser

Hvis du har et problem relateret til opstart, som du ønsker at undersøge, har journalctl dig dækket. Måske har du tilføjet ny hardware, og den reagerer ikke, eller en tidligere fungerende hardwarekomponent virker ikke længere efter din sidste systemopgradering.

For at se logposterne relateret til din sidste opstart, skal du bruge muligheden -b (boot):

journalctl -b

Logposterne for den sidste opstart vises for dig.

Når vi siger “sidste opstart”, mener vi den opstartsproces, der bragte din computer til live for din nuværende loggede session. For at se tidligere opstarter kan du bruge et tal til at fortælle journalctl hvilken opstart du er interesseret i. Brug denne kommando for at se den tredje tidligere opstart:

journalctl -b 3

Generelt, hvis du har haft et problem og skulle genstarte din maskine, er det en tidligere opstartssekvens, du er interesseret i. Så dette er en almindelig kommandoform.

Det er nemt at blive blandet sammen med rækkefølgen af ​​støvler. For at hjælpe kan vi bede journalctl om at liste de støvler, som den har registreret i sin journal, ved at bruge –list-boots-indstillingen.

journalctl --list-boots

Du kan identificere den boot, du ønsker at se meddelelser for, fra dato- og tidsstemplet, og derefter bruge nummeret i venstre kolonne til at hente logmeddelelserne for den opstartssekvens. Du kan også vælge 32-bit boot-id’et og videregive det til journalctl.

sudo journalctl -b 1f00248226ed4ab9a1abac86e0d540d7

Logmeddelelserne fra den opstartssekvens, vi anmodede om, hentes og vises.

Håndtering af journalharddiskplads

Journalen og alle dens log-beskeder er naturligvis gemt på din harddisk. Det betyder, at de optager harddiskplads. For at se, hvor meget plads der er optaget af journalen, skal du bruge muligheden –diskbrug.

journalctl --disk-usage

Med nutidens harddiske er 152 MB slet ikke meget plads, men til demonstrationsformål vil vi stadig trimme det tilbage. Der er to måder, vi kan gøre dette på. Den første er at sætte en størrelsesgrænse, som du ønsker journalen reduceret tilbage til. Den vokser selvfølgelig igen, men vi kan beskære den nu klar til den nye vækst.

Vi vil bruge den vidunderlige titlen -vacuum-size-indstilling og sende den størrelse, vi gerne vil have journalen reduceret til. Vi beder om 100 MB. Måden at tænke på dette er, at vi beder journalctl om at “smide alt, hvad du kan, men gå ikke lavere end 100 MB.”

journalctl --vacuum-size=100M

Den anden måde at trimme journalstørrelsen på er at bruge –vakuum-tid. Denne mulighed fortæller journalctl at kassere meddelelser, der er ældre end den periode, du angiver på kommandolinjen. Du kan bruge dage, uger, måneder og år i tidsperioden.

Lad os luge ud i alle beskeder, der er ældre end en uge:

journalctl --vacuum-time=1weeks

Data vs. Information

Data er ikke nyttige, medmindre du kan få fat i det og gøre brug af det. Så bliver det nyttig information. journalctl-kommandoen er et fleksibelt og sofistikeret værktøj, der giver dig mulighed for at komme til de relevante oplysninger på en række forskellige måder.

Du kan bruge stort set ethvert uddrag af information, du har til at komme ind i de logbeskeder, du har brug for.