Jour­nalctl er en effektiv løsning til ad­mi­ni­stra­tion og analyse af sy­stem­log­fi­ler i Linux-miljøer. Dette værktøj kan bruges til over­våg­ning af sy­ste­mak­ti­vi­te­ter, fejl­find­ing og logs­por­ing i realtid, hvilket giver vigtig indsigt til effektiv di­ag­no­sti­ce­ring af sy­stem­pro­ble­mer.

Hvad er Jour­nalctl?

journalctl er et kraft­fuldt værktøj til at søge i og vise hæn­del­ses­lo­g­fi­ler eller logfiler under Linux. Det er en central del af system- og tje­ne­stesty­rings­pak­ken systemd, som følger med mange moderne Linux-di­stri­bu­tio­ner såsom Ubuntu, Fedora og Arch Linux. Navnet »jour­nalctl« er en sam­men­sæt­ning af »journal« (log) og »ctl« (kontrol), hvilket henviser til, at kom­man­do­en bruges til at styre og analysere logfiler.

journalctl gør det nemmere at få adgang til sy­stem­log­gen, som ad­mi­ni­stre­res af systemd-journald. Sy­stem­log­gen er en samlet oversigt over med­del­el­ser og hændelser, der opstår under driften af et Linux-system. I mod­sæt­ning til tra­di­tio­nel­le tekst­ba­se­re­de logfiler giver journalctl en struk­tu­re­ret og effektiv måde at søge, filtrere og vise logdata i realtid. Dette kan hjælpe med at di­ag­no­sti­ce­re problemer eller overvåge systemets status.

Til dette formål gemmer Jour­nalctl log­fi­ler­ne i binært format, da binære logfiler er mere kompakte og effektive end deres tekst­ba­se­re­de mod­styk­ker. I be­tragt­ning af den store mængde loggede data muliggør dette en hurtigere og mere effektiv søgning efter spe­ci­fik­ke hændelser eller op­lys­nin­ger i log­fi­ler­ne. Takket være deres struk­tu­re­re­de og kryp­te­re­de karakter giver binære logfiler også øget sikkerhed i forhold til tekst­ba­se­re­de logfiler, da deres format gør det van­ske­li­ge­re at ma­ni­p­u­le­re log­da­ta­e­ne.

Sådan justeres la­ger­plad­sen til logfiler

journalctl kan bruges til at begrænse og kon­fi­gu­re­re den la­ger­plads, som logfiler optager på hard­di­sken. Dette gøres via indstil­lin­ger­ne for tjenesten systemd-journald. Kon­fi­gu­ra­tions­indstil­lin­ger­ne gemmes i filen /etc/systemd/journald.conf. Her finder du følgende poster:

  • SystemMaxUse: Begrænser la­ger­plad­sen til logfiler i sy­stem­map­pen
  • RuntimeMaxUse: Begrænser la­ger­plad­sen til logfiler i det mid­ler­ti­di­ge bibliotek

For at indstille hukom­mel­ses­græn­sen skal du tilføje følgende linjer eller ændre dem efter behov:

[Journal] 
SystemMaxUse=50M 
RuntimeMaxUse=50M
bash

Værdierne i dette eksempel (50M) kan ændres efter behov. Du kan også bruge andre enheder, f.eks. K (kilobyte), M (megabyte), G (gigabyte) eller T (terabyte). Når du har redigeret kon­fi­gu­ra­tions­fi­len, skal systemd-journald gen­star­tes, for at æn­drin­ger­ne træder i kraft:

sudo systemctl restart systemd-journald
bash

Når du følger disse trin, bliver systemd-journald kon­fi­gu­re­ret til at begrænse disk­plad­sen til logfiler. Sørg for, at den valgte grænse er til­stræk­ke­lig til at gemme vigtige logdata. Samtidig er det vigtigt at undgå at bruge for meget diskplads. Husk, at ældre logfiler au­to­ma­tisk slettes, når den tildelte diskplads er opbrugt.

Vurder brugen af diskplads

Inden du justerer la­ger­plad­sen til logfiler, skal du kon­trol­le­re, hvor meget plads journalen i øje­blik­ket optager. Det gør du ved at bruge --disk-usage:

journalctl --disk-usage
bash

Her er et eksempel på, hvordan re­sul­ta­tet ser ud:

Journals take up 8.0M on disk.
bash

Slet gamle logposter

Hvis Journal bruger for meget hukom­mel­se, kan du slette gamle logposter. Der er to måder at gøre det på:

Brug --vacuum-size til at reducere jour­na­lens størrelse ved at angive den ønskede størrelse. Med denne metode slettes gamle poster, indtil den samlede plads, som journalen optager på hard­di­sken, har nået den ønskede størrelse.

sudo journalctl --vacuum-size=1G
bash

Du kan også reducere logfilen ved at angive en op­be­va­rings­pe­ri­o­de med indstil­ling --vacuum-time. Ind­tast­nin­ger, der er ældre end den angivne periode, slettes. Hvis du vil beholde lo­gind­tast­nin­ger fra det seneste år, kan du bruge følgende kommando:

sudo journalctl --vacuum-time=1years
bash

Hvad kan Jour­nalctl?

journalctl tilbyder avan­ce­re­de fil­tre­rings­funk­tio­ner, der giver brugerne mulighed for at gennemgå logposter ud fra for­skel­li­ge kriterier. Denne funktion gør det muligt at foretage må­l­ret­te­de søgninger efter relevante op­lys­nin­ger, hvilket gør det nemmere at iden­ti­fi­ce­re problemer hurtigere. Her er nogle af de mest anvendte journalctl fil­te­rindstil­lin­ger:

Vis logfiler

Når du udfører kom­man­do­en journalctl, vises logposter for det aktuelle system i omvendt kro­no­lo­gisk ræk­ke­føl­ge. Brug journalctl -f eller journalctl --follow for at få vist posterne i realtid. Nye poster vises au­to­ma­tisk i den ræk­ke­føl­ge, de modtages.

Afhængigt af hvor længe systemd har kørt på dit system, vil du sand­syn­lig­vis blive præ­sen­te­ret for en uover­sku­e­lig mængde data, der kan bestå af ti­tu­sin­der eller hundreder af tusinder af linjer. For at finde det, du leder efter, hurtigere, kan du filtrere log­fi­ler­ne yder­li­ge­re ved hjælp af for­skel­li­ge Linux-kom­man­do­er.

Sådan filtrerer du efter tid

Ved hjælp af journalctl kan logfiler filtreres efter et bestemt tidspunkt, så man lettere kan finde relevante op­lys­nin­ger.

Filtrer efter op­start­s­pro­ces

Fil­tre­ring af logfiler efter op­start­s­pro­ces­sen er uvur­der­lig, når man skal undersøge sy­stem­hæn­del­ser på bestemte tids­punk­ter eller under for­skel­li­ge op­start­s­sce­na­ri­er. Denne må­l­ret­te­de tilgang gør fejl­find­ing mere effektiv ved at indsnævre log­poster­ne til bestemte sy­stem­til­stan­de eller kon­fi­gu­ra­tio­ner.

  1. Nuværende opstart: Med journalctl -b vises alle logposter, der er indsamlet siden den sidste genstart.
  2. Tidligere opstarter: Brug indstil­lin­gen -b ef­ter­fulgt af et tal for at vise log­poster­ne for en bestemt tidligere opstart. Hvis du f.eks. indtaster journalctl -b 1, vises den forrige opstart.
  3. Liste over alle til­gæn­ge­li­ge op­start­s­pro­ces­ser: Kom­man­do­en journalctl --list-boots viser en liste over til­gæn­ge­li­ge opstarter med deres respek­ti­ve ID’er. Du kan bruge det ønskede opstarts-ID til at vise log­fi­ler­ne for en bestemt opstart.

Selvom lagring af tidligere op­start­s­pro­ces­ser er aktiveret som standard i nogle Linux-di­stri­bu­tio­ner, kan det være nød­ven­digt for brugerne først at aktivere funk­tio­nen i andre. For at gøre dette skal du oprette et bibliotek, hvor loggen skal gemmes, ved at indtaste sudo mkdir -p /var/log/journal. Al­ter­na­tivt kan du redigere jour­na­lens kon­fi­gu­ra­tions­fil med sudo nano /etc/systemd/journald.conf. Indstil derefter indstil­lin­gen Storage= under [Journal] til persistent for at aktivere ved­va­ren­de logning:

. . . 
[Journal] 
Storage=persistent
bash

Filtrer efter tids­in­ter­val

Nogle gange kan det være nød­ven­digt at vise logposter for en bestemt periode. journalctl tilbyder indstil­lin­ger­ne --since og --until, som kan bruges til at begrænse posterne til en bestemt periode. Til dette formål skal du bruge tids­for­ma­tet YYYY-MM-DD HH:MM:SS. Kom­man­do­en til at vise alle logposter mellem den 1. januar 2023 kl. 12:00 og den 2. januar 2023 kl. 12:00 ser således ud:

journalctl --since "2023-01-01 12:00:00" --until "2023-01-02 12:00:00"
bash

Ved at kombinere de to kom­man­do­er kan man også filtrere efter en kortere periode:

journalctl --since 09:00 --until "1 hour ago"
bash

Du kan også vælge at udelade dele af formatet. Hvis du f.eks. vil vise alle poster fra et bestemt tidspunkt:

journalctl --since "2023-11-16 15:25:00"
bash

journalctl genkender også relative værdier som f.eks. yesterday, today eller tomorrow. For at få vist poster fra i går skal du indtaste følgende:

journalctl --since yesterday
bash

Sådan filtrerer du efter med­del­el­ses­ka­rak­te­ri­sti­ka

Det er også yderst nyttigt at bruge journalctl til at filtrere logposter efter vigtighed eller indhold, da det giver dig mulighed for at søge efter relevante op­lys­nin­ger og fokusere på bestemte aspekter af sy­stem­log­fi­ler­ne. Dette muliggør blandt andet effektiv fejl­find­ing, tidlig opdagelse af sik­ker­heds­pro­ble­mer og hurtig over­våg­ning af systemets ydeevne.

Filtrer efter prioritet

For at filtrere logfiler med journalctl efter med­del­el­sens vigtighed kan du bruge pri­o­ri­tetska­te­go­ri­er­ne for logposter. Du kan enten bruge pri­o­ri­tets­nav­net eller den til­hø­ren­de numeriske værdi. Jo lavere tallet er, desto vigtigere er med­del­el­sen:

  • 0: emerg (nød­si­tu­a­tion)
  • 1: alert (alarm)
  • 2: kritisk
  • 3: fejl (fejl)
  • 4: warning (advarsel)
  • 5: notice (be­mærk­ning)
  • 6: info (in­for­ma­tion)
  • 7: debug (fejl­find­ing)

Med­del­el­ser med en bestemt prioritet kan filtreres ved hjælp af indstil­lin­gen -p. F.eks. viser følgende kommando kun logposter med pri­o­ri­te­ten »err« (fejl) og højere:

journalctl -p err
bash

Filtrer efter enhed

Det er nyttigt at filtrere logfiler efter enhed, hvis man vil fokusere på bestemte tjenester eller processer. Disse kan filtreres ved hjælp af indstil­lin­gen -u. Hvis du f.eks. vil vise logposter for Apache-web­ser­ve­ren, skal du indtaste følgende:

journalctl -u apache2
bash

Søgningen kan yder­li­ge­re indsnæv­res ved hjælp af relative tids­an­gi­vel­ser. For at finde ud af, om tjenesten allerede er blevet udført i dag, kan du indtaste følgende:

journalctl -u apache2 --since today
bash

journalctl kan sam­men­flet­te da­ta­po­ster fra for­skel­li­ge enheder. Hvis din Nginx-proces f.eks. er knyttet til en PHP FPM-enhed, kan deres poster sam­men­flet­tes i kro­no­lo­gisk ræk­ke­føl­ge. Kom­man­do­en til dette er:

journalctl -u nginx.service -u php-fpm.service --since today-u apache2 --since today
bash

Filtrer efter proces-, bruger- eller gruppe-ID

Jour­nalctl kan filtrere logposter efter proces-, bruger- eller gruppe-ID. Hvis du kender det nøjagtige PID for den proces, du vil søge efter, kan du bruge optionen _PID til at filtrere posterne. Hvis PID’et f.eks. er 8088, vil kom­man­do­en se således ud:

journalctl _PID=8088
bash

Du kan også bruge filtrene _UID eller _GID til at vise alle poster, der er logget af en bestemt bruger eller gruppe. Hvis din webserver f.eks. hedder »www-data«, kan du finde bruger-ID’et ved at gøre følgende:

id -u www-data
33
bash

Jour­nal­poster­ne kan filtreres ved hjælp af ID’et:

journalctl _UID=33 --since today
bash

For at se, hvilke gruppe-ID’er der er oprettet poster for, kan du bruge indstil­ling -F. Dette viser alle de værdier, der er gemt i feltet »Gruppe-ID«:

journalctl -F _GID
bash

Her er et eksempel på re­sul­ta­tet:

32
99
102
133
81
84
100
0
124
87
bash

Filtrer efter komponent

Fil­tre­ring efter komponent er nyttigt, når man ønsker at fokusere på bestemte ap­pli­ka­tio­ner, tjenester eller processer. Kom­po­nent­fel­tet bruges typisk af for­skel­li­ge tjenester eller softwa­re­kom­po­nen­ter til at udskille spe­ci­fik­ke op­lys­nin­ger i log­fi­ler­ne. Denne fil­tre­ring gør det muligt at indsnævre log­poster­ne til en bestemt komponent, ap­pli­ka­tion eller tje­ne­ste­en­hed. Hvis du f.eks. vil filtrere poster, der in­de­hol­der den ek­se­kver­ba­re fil bash, skal du indtaste følgende kommando:

journalctl /usr/bin/bash
bash

Vis ker­ne­be­ske­der

Fil­tre­ring af logposter efter ker­nel­mel­din­ger med journalctl er en effektiv metode til at analysere op­lys­nin­ger om kernens drift i et Linux-system. Ker­nel­mel­din­ger kan give en in­di­ka­tion af hardwa­re­pro­ble­mer, dri­ver­kon­flik­ter eller andre sy­stem­hæn­del­ser.

Ker­nel­med­del­el­ser, der findes i dmesg -ud­skrif­ten, kan også filtreres fra journalen. De kan vises med flagene `-k or ``:

journalctl -k
bash

Ker­nel­med­del­el­ser­ne fra den aktuelle op­start­s­pro­ces vises som standard. Du kan filtrere efter med­del­el­ser fra en al­ter­na­tiv opstart ved hjælp af de tidligere nævnte flag til valg af opstart. Hvis du f.eks. vil se ker­nel­med­del­el­ser­ne fra de sidste fem op­start­s­pro­ces­ser, skal du indtaste:

journalctl -k -b -5
bash

Ændring af jour­nal­vis­nin­gen i Jour­nalctl

Ved at tilpasse visningen i journalctl kan brugerne søge mere præcist i log­fi­ler­ne og hurtigt udtrække op­lys­nin­ger. Brugerne kan tilpasse visningen, så den viser logdata for en bestemt periode eller i realtid, hvilket gør det lettere at iden­ti­fi­ce­re sy­stem­fejl og problemer hurtigt.

At forkorte eller udvide ud­skrif­ten

Du kan tilpasse, hvordan journalctl viser data, ved at forkorte eller udvide ud­skrif­ten. Som standard viser journalctl hele ind­tast­nin­gen i pageren og placerer den i højre side af skærmen. Ud­skrif­ten kan forkortes med --no-full:

journalctl --no-full
bash

Du kan udvide visningen ved hjælp af flagget -a:

journalctl -a
bash

Indstil journalctl til stan­dar­dud­gan­gen

I journalctl vises log­ud­skrif­ten som standard ved hjælp af et pager-program som less. Dette giver brugerne mulighed for at se ud­skrif­ten i små dele, hvilket gør det nemmere at navigere gennem lange logfiler. Der er dog tilfælde, hvor det er nød­ven­digt at vise log­fi­ler­nes stan­dar­dud­skrift. Sådan gør du:

journalctl --no-pager
bash

Indstil out­put­for­ma­ter

journalctl giver også mulighed for at tilpasse log­fi­ler­nes out­put­for­mat. Til dette formål kan du bruge -o sammen med den relevante for­mat­ko­de. Hvis du f.eks. vil udskrive logposter i JSON-format, skal du indtaste følgende kode:

journalctl -b -u nginx -o json
bash

Her er re­sul­ta­tet:

{ "__CURSOR" : "s=13a21661cf4948289c63075db6c25c00;i=116f1;b=81b58db8fd9046ab9f847ddb82a2fa2d;m=19f0daa;t=50e33c33587ae;x=e307daadb4858635", "__REALTIME_TIMESTAMP" : "1422990364739502", "__MONOTONIC_TIMESTAMP" : "27200938", "_BOOT_ID" : "81b58db8fd9046ab9f847ddb82a2fa2d", "PRIORITY" : "6", "_UID" : "0", "_GID" : "0", "_CAP_EFFECTIVE" : "3fffffffff", "_MACHINE_ID" : "752737531a9d1a9c1e3cb52a4ab967ee", "_HOSTNAME" : "desktop", "SYSLOG_FACILITY" : "3", "CODE_FILE" : "src/core/unit.c", "CODE_LINE" : "1402", "CODE_FUNCTION" :
bash

Følgende formater kan bruges i Jour­nalctl:

  • cat: Viser kun med­del­el­ses­fel­tet
  • eksport: Binært format, der er egnet til over­før­sel eller gemning
  • json: Standard JSON med én post pr. linje
  • json-pretty: JSON for­ma­te­ret for bedre læsbarhed
  • json-sse: Indpakket JSON-for­ma­te­ret output, der tillader til­fø­jel­se af be­gi­ven­he­der sendt af serveren
  • short: Stan­dar­dud­skrift i syslog-stil
  • short-iso: Stan­dard­for­mat til visning af ISO-8601-tids­stemp­ler
  • short-monotonic: Stan­dard­for­mat med monotone tids­stemp­ler
  • short-precise: Stan­dard­for­mat med mi­kro­se­kund­præ­ci­sion
  • verbose: Viser alle jour­nal­fel­ter, der er til­gæn­ge­li­ge for den på­gæl­den­de post

Hvordan foretager journalctl aktiv pro­cesover­våg­ning?

Under aktiv pro­cesover­våg­ning med journalctl bruges kom­man­do­linje­pro­gram­met tail til at følge log­fi­ler­ne i realtid og vise de seneste poster. Dette gør det nemmere at overvåge sy­stem­hæn­del­ser i realtid og reagere hurtigt på problemer.

Sådan vises aktuelle logfiler

Indstil­lin­gen -n kan bruges til at vise et bestemt antal da­ta­po­ster. Den fungerer på nøjagtig samme måde som tail -n. For at vise de sidste 10 poster skal du bruge følgende kommando:

journalctl -n
bash

Du kan også indstille antallet af poster, f.eks. til 20:

journalctl -n 20
bash
Gå til ho­ved­me­nu­en