Journalctl is een efficiënte oplossing voor het beheren en analyseren van systeemlogboeken in Linux-omgevingen. Deze tool kan worden gebruikt voor het monitoren van systeemactiviteiten, het oplossen van problemen en het realtime volgen van logboeken, waardoor cruciale inzichten worden verkregen voor het effectief diagnosticeren van systeemproblemen.

Wat is Journalctl?

journalctl is een krachtig hulpprogramma voor het opvragen en weergeven van gebeurtenislogboeken of logbestanden onder Linux. Het is een centraal onderdeel van de systeem- en servicebeheersuite systemd, die bij veel moderne Linux-distributies zoals Ubuntu, Fedora en Arch Linux wordt geleverd. De naam ‘journalctl’ is een combinatie van ‘journal’ (logboek) en ‘ctl’ (controle), wat verwijst naar het feit dat het commando wordt gebruikt om logboeken te controleren en te analyseren.

journalctl vereenvoudigt de toegang tot het systeemlogboek, dat wordt beheerd door systemd-journald. Het systeemlogboek is een gecentraliseerde verzameling van berichten en gebeurtenissen die plaatsvinden tijdens de werking van een Linux-systeem. In tegenstelling tot traditionele tekstgebaseerde logboeken biedt journalctl een gestructureerde en efficiënte manier om loggegevens in realtime te doorzoeken, te filteren en weer te geven. Dit kan helpen bij het diagnosticeren van problemen of het bewaken van de systeemstatus.

Voor dit doel slaat Journalctl de logbestanden op in binair formaat, omdat binaire logbestanden compacter en efficiënter zijn dan hun op tekst gebaseerde tegenhangers. Gezien de grote hoeveelheid gelogde gegevens maakt dit een snellere en efficiëntere zoekopdracht naar specifieke gebeurtenissen of informatie binnen de logbestanden mogelijk. Door hun gestructureerde en gecodeerde aard bieden binaire logbestanden ook verbeterde beveiliging in vergelijking met op tekst gebaseerde logs, aangezien hun formaat het manipuleren van loggegevens moeilijker maakt.

Hoe u de opslagruimte voor logbestanden kunt aanpassen

journalctl kan worden gebruikt om de opslagruimte die logbestanden op de harde schijf innemen te beperken en te configureren. Dit gebeurt via de instellingen van de service systemd-journald. De configuratie-instellingen worden opgeslagen in het bestand /etc/systemd/journald.conf. Hier vindt u de volgende vermeldingen:

  • SystemMaxUse: Beperkt de opslagruimte voor logbestanden in de systeemmap
  • RuntimeMaxUse: Beperkt de opslagruimte voor logbestanden in de tijdelijke map

Om de geheugenlimiet in te stellen, voegt u de volgende regels toe of wijzigt u deze indien nodig:

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

De waarden uit dit voorbeeld (50M) kunnen naar behoefte worden aangepast. U kunt ook andere eenheden gebruiken, zoals K (kilobytes), M (megabytes), G (gigabytes) of T (terabytes). Nadat u het configuratiebestand hebt bewerkt, moet systemd-journald opnieuw worden opgestart om de wijzigingen door te voeren:

sudo systemctl restart systemd-journald
bash

Door deze stappen te volgen, wordt systemd-journald geconfigureerd om de schijfruimte voor logbestanden te beperken. Zorg ervoor dat de limiet die u kiest voldoende is om essentiële loggegevens op te slaan. Tegelijkertijd is het belangrijk om te voorkomen dat u buitensporig veel schijfruimte gebruikt. Houd er rekening mee dat oudere logs automatisch worden verwijderd zodra de limiet van de toegewezen schijfruimte is bereikt.

Beoordeel het gebruik van schijfruimte

Controleer voordat u de opslagruimte voor logbestanden aanpast hoeveel opslagruimte momenteel door het journaal wordt ingenomen. Gebruik hiervoor --disk-usage:

journalctl --disk-usage
bash

Hier is een voorbeeld van hoe de uitvoer eruitziet:

Journals take up 8.0M on disk.
bash

Oude logboekvermeldingen verwijderen

Als Journal te veel geheugen in beslag neemt, kunt u oude logboekvermeldingen verwijderen. Er zijn twee manieren om dit te doen:

Gebruik --vacuum-size om de grootte van uw dagboek te verkleinen door de grootte op te geven. Met deze methode worden oude vermeldingen verwijderd totdat de totale opslagruimte van het dagboek op de harde schijf de gewenste grootte heeft bereikt.

sudo journalctl --vacuum-size=1G
bash

Als alternatief kunt u het logboek verkleinen door een bewaartermijn in te stellen met behulp van de optie --vacuum-time. Invoer die ouder is dan de opgegeven tijd wordt verwijderd. Om logboekvermeldingen van het afgelopen jaar te bewaren, kunt u de volgende opdracht gebruiken:

sudo journalctl --vacuum-time=1years
bash

Wat kan Journalctl doen?

journalctl biedt krachtige filtermogelijkheden, waarmee gebruikers logboekvermeldingen op basis van verschillende criteria kunnen doorzoeken. Deze functie maakt het mogelijk om gericht naar relevante informatie te zoeken, waardoor problemen sneller kunnen worden geïdentificeerd. Hier volgen enkele veelgebruikte journalctl filteropties:

Logs weergeven

Door het commando journalctl uit te voeren, worden logboekvermeldingen voor het huidige systeem in omgekeerde chronologische volgorde weergegeven. Gebruik journalctl -f of journalctl --follow om de vermeldingen in realtime weer te geven. Nieuwe vermeldingen worden automatisch weergegeven in de volgorde waarin ze binnenkomen.

Afhankelijk van hoe lang systemd al op uw systeem draait, krijgt u waarschijnlijk een onbeheersbare hoeveelheid gegevens te zien, die tienduizenden of zelfs honderdduizenden regels lang kan zijn. Om sneller te vinden wat u zoekt, kunt u de logbestanden verder filteren met behulp van verschillende Linux-commando’s.

Hoe filteren op tijd

Met behulp van journalctl kunnen logbestanden worden gefilterd op een specifiek tijdstip, zodat ze efficiënter kunnen worden doorzocht op relevante informatie.

Filteren op opstartproces

Het filteren van logbestanden op basis van het opstartproces is van onschatbare waarde voor het onderzoeken van systeemgebeurtenissen op specifieke tijdstippen of tijdens opstartscenario’s. Deze gerichte aanpak stroomlijnt de probleemdiagnose door logboekvermeldingen te concentreren op specifieke systeemstatussen of configuraties.

  1. Huidige opstart: Met journalctl -b worden alle logboekvermeldingen weergegeven die sinds de laatste herstart zijn verzameld.
  2. Eerdere opstartsessies: Gebruik de optie -b gevolgd door een nummer om de logboekvermeldingen voor een specifieke eerdere opstartsessie weer te geven. Als u bijvoorbeeld journalctl -b 1 invoert, wordt de vorige opstartsessie weergegeven.
  3. Lijst met alle beschikbare opstartprocessen: Met het commando journalctl --list-boots wordt een lijst met beschikbare opstartsessies met hun respectievelijke ID’s weergegeven. U kunt de gewenste opstart-ID gebruiken om de logboeken voor een specifieke opstartsessie weer te geven.

Hoewel het opslaan van eerdere opstartprocessen standaard is ingeschakeld op sommige Linux-distributies, moeten gebruikers dit op andere distributies mogelijk eerst inschakelen. Om dit te doen, maakt u een map aan waar het logbestand wordt opgeslagen door sudo mkdir -p /var/log/journal in te voeren. U kunt ook het configuratiebestand van het logboek bewerken met sudo nano /etc/systemd/journald.conf. Stel vervolgens de optie Storage= onder [Journal] in op persistent om permanente logboekregistratie in te schakelen:

. . . 
[Journal] 
Storage=persistent
bash

Filteren op tijdvenster

Soms kan het nodig zijn om logboekvermeldingen voor een bepaalde periode weer te geven. journalctl biedt de opties --since en --until, die kunnen worden gebruikt om de vermeldingen tot een bepaalde periode te beperken. Gebruik hiervoor de tijdnotatie YYYY-MM-DD HH:MM:SS. Het commando om alle logboekvermeldingen tussen 1 januari 2023 om 12:00 uur en 2 januari 2023 om 12:00 uur weer te geven, ziet er als volgt uit:

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

De combinatie van de twee commando’s kan ook filteren voor een kortere periode:

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

Je kunt ook delen van het formaat weglaten. Als je bijvoorbeeld alle vermeldingen vanaf een bepaald tijdstip wilt weergeven:

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

journalctl herkent ook relatieve waarden zoals yesterday, today of tomorrow. Om de gegevens van gisteren weer te geven, voert u het volgende in:

journalctl --since yesterday
bash

Hoe filteren op berichtkenmerken

Het gebruik van journalctl om logboekvermeldingen te filteren op basis van belangrijkheid of inhoud is ook uiterst nuttig, omdat u hiermee naar relevante informatie kunt zoeken en u kunt concentreren op specifieke aspecten van de systeemlogboeken. Dit maakt onder andere een efficiënte foutdiagnose, vroege detectie van beveiligingsproblemen en snelle prestatiebewaking mogelijk.

Filteren op prioriteit

Om logbestanden met journalctl te filteren op belangrijkheid van het bericht, kunt u de prioriteitscategorieën voor logboekvermeldingen gebruiken. Hiervoor kunt u de prioriteitsnaam of de bijbehorende numerieke waarde gebruiken. Hoe lager het getal, hoe belangrijker het bericht:

  • 0: emerg (noodsituatie)
  • 1: alert (alarm)
  • 2: crit (kritiek)
  • 3: err (fout)
  • 4: waarschuwing (warning)
  • 5: notice (opmerking)
  • 6: info (informatie)
  • 7: debug (probleemoplossing)

Berichten met een bepaalde prioriteit kunnen worden gefilterd met behulp van de optie -p. Het volgende commando geeft bijvoorbeeld alleen logboekvermeldingen weer met de prioriteit ‘err’ (fout) en hoger:

journalctl -p err
bash

Filteren op eenheid

Het filteren van logbestanden per eenheid is handig om u te concentreren op specifieke services of processen. Deze kunnen worden gefilterd met behulp van de optie -u. Om bijvoorbeeld logboekvermeldingen voor de Apache-webserver weer te geven, voert u het volgende in:

journalctl -u apache2
bash

De zoekopdracht kan verder worden verfijnd met behulp van relatieve tijdwaarden. Om te bepalen of de dienst vandaag al is uitgevoerd, kunt u het volgende invoeren:

journalctl -u apache2 --since today
bash

journalctl kan gegevensrecords van verschillende eenheden samenvoegen. Als uw Nginx-proces bijvoorbeeld is gekoppeld aan een PHP FPM-eenheid, kunnen hun vermeldingen chronologisch worden samengevoegd. Het commando hiervoor is:

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

Filteren op proces, gebruiker of groeps-ID

Journalctl kan logboekvermeldingen filteren op proces-, gebruikers- of groeps-ID. Als u de exacte PID hebt van het proces dat u wilt zoeken, kunt u de optie _PID gebruiken om vermeldingen te filteren. Als de PID bijvoorbeeld 8088 is, ziet het commando er als volgt uit:

journalctl _PID=8088
bash

Je kunt ook de filters _UID of _GID gebruiken om alle vermeldingen weer te geven die door een bepaalde gebruiker of groep zijn geregistreerd. Als je webserver bijvoorbeeld ‘www-data’ heet, kun je de gebruikers-ID als volgt vinden:

id -u www-data
33
bash

De journaalboekingen kunnen worden gefilterd op basis van het ID:

journalctl _UID=33 --since today
bash

Om te bepalen voor welke groep-ID’s er vermeldingen zijn aangemaakt, kunt u de optie -F gebruiken. Hiermee worden alle waarden weergegeven die zijn opgeslagen voor het veld Groep-ID:

journalctl -F _GID
bash

Hier is een voorbeeld van de uitvoer:

32
99
102
133
81
84
100
0
124
87
bash

Filteren op component

Filteren op component is handig om u te concentreren op specifieke toepassingen, services of processen. Het componentveld wordt doorgaans gebruikt door verschillende services of softwarecomponenten om specifieke informatie in de logboeken te onderscheiden. Met deze filtering kunt u logboekvermeldingen beperken tot een bepaalde component, toepassing of service-eenheid. Als u bijvoorbeeld vermeldingen wilt filteren die het uitvoerbare bestand bash bevatten, voert u de volgende opdracht in:

journalctl /usr/bin/bash
bash

Kernelberichten weergeven

Het filteren van logboekvermeldingen voor kernelberichten met journalctl is een effectieve manier om informatie over de werking van de kernel in een Linux-systeem te analyseren. Kernelberichten kunnen aanwijzingen geven over hardwareproblemen, stuurprogramma-conflicten of andere systeemgebeurtenissen.

Kernelberichten die in de dmesg -uitvoer te vinden zijn, kunnen ook uit het journaal worden gefilterd. Ze kunnen worden weergegeven met de vlaggen `-k or ``:

journalctl -k
bash

De kernelberichten van het huidige opstartproces worden standaard weergegeven. U kunt filteren op berichten van een alternatieve opstartprocedure met behulp van de eerder genoemde opstartselectievlaggen. Als u bijvoorbeeld de kernelberichten van de laatste vijf opstartprocessen wilt bekijken, voert u het volgende in:

journalctl -k -b -5
bash

De weergave van het logboek wijzigen in Journalctl

Door de weergave in journalctl aan te passen, kunnen gebruikers nauwkeuriger door logbestanden zoeken en snel informatie extraheren. Gebruikers kunnen de weergave aanpassen om loggegevens over een specifieke periode of in realtime weer te geven, zodat systeemfouten en -problemen snel kunnen worden geïdentificeerd.

De output verkorten of uitbreiden

U kunt de manier waarop journalctl gegevens weergeeft aanpassen door de uitvoer in te korten of uit te breiden. Standaard geeft journalctl de volledige invoer weer in de pager en voert deze uit aan de rechterkant van het scherm. De uitvoer kan worden ingekort met de optie --no-full:

journalctl --no-full
bash

U kunt de weergave uitbreiden met de vlag -a:

journalctl -a
bash

Stel journalctl in op standaarduitvoer

In journalctl wordt de loguitvoer standaard weergegeven met behulp van een pager zoals less. Hierdoor kunnen gebruikers de uitvoer stapsgewijs bekijken, waardoor ze gemakkelijker door lange logbestanden kunnen navigeren. Er zijn echter gevallen waarin het weergeven van de standaarduitvoer van logs noodzakelijk is. Hier volgt hoe u dat kunt doen:

journalctl --no-pager
bash

Uitvoerformaten instellen

journalctl biedt ook opties voor het aanpassen van het uitvoerformaat van logbestanden. Hiervoor kunt u de optie -o gebruiken met de bijbehorende formaatidentificatie. Om bijvoorbeeld logboekvermeldingen in JSON-formaat uit te voeren, voert u de volgende code in:

journalctl -b -u nginx -o json
bash

Dit is de uitvoer:

{ "__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

De volgende formaten kunnen worden gebruikt in Journalctl:

  • cat: Geeft alleen het berichtveld weer
  • export: Binair formaat geschikt voor overdracht of opslag
  • json: Standaard JSON met één vermelding per regel
  • json-pretty: JSON-opmaak voor betere leesbaarheid
  • json-sse: Omwikkelde JSON-opmaak waarmee door de server verzonden gebeurtenissen kunnen worden toegevoegd
  • short: Standaard syslog-stijl uitvoer
  • short-iso: Standaardformaat voor het weergeven van ISO-8601-tijdstempels
  • short-monotonic: Standaardformaat met monotone tijdstempels
  • short-precise: standaardformaat met microsecondeprecisie
  • verbose: Geeft elk beschikbaar journaalveld voor de betreffende invoer weer

Hoe voert journalctl actieve procesbewaking uit?

Tijdens actieve procesbewaking met journalctl wordt het opdrachtregelprogramma tail gebruikt om logbestanden in realtime bij te houden en de meest recente vermeldingen weer te geven. Dit maakt het gemakkelijker om systeemgebeurtenissen in realtime te bewaken en snel op problemen te reageren.

Hoe de huidige logbestanden weergeven

De optie -n kan worden gebruikt om een bepaald aantal gegevensrecords weer te geven. Deze werkt op precies dezelfde manier als tail -n. Om de laatste 10 vermeldingen weer te geven, gebruikt u de volgende opdracht:

journalctl -n
bash

U kunt ook het aantal vermeldingen instellen, bijvoorbeeld op 20:

journalctl -n 20
bash
Ga naar hoofdmenu