Wat is Journalctl en wat kan het doen?
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 systeemmapRuntimeMaxUse: 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=50MbashDe 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-journaldbashDoor 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-usagebashHier is een voorbeeld van hoe de uitvoer eruitziet:
Journals take up 8.0M on disk.bashOude 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=1GbashAls 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=1yearsbashWat 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.
- Huidige opstart: Met
journalctl -bworden alle logboekvermeldingen weergegeven die sinds de laatste herstart zijn verzameld. - Eerdere opstartsessies: Gebruik de optie
-bgevolgd door een nummer om de logboekvermeldingen voor een specifieke eerdere opstartsessie weer te geven. Als u bijvoorbeeldjournalctl -b 1invoert, wordt de vorige opstartsessie weergegeven. - Lijst met alle beschikbare opstartprocessen: Met het commando
journalctl --list-bootswordt 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=persistentbashFilteren 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"bashDe combinatie van de twee commando’s kan ook filteren voor een kortere periode:
journalctl --since 09:00 --until "1 hour ago"bashJe 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"bashjournalctl herkent ook relatieve waarden zoals yesterday, today of tomorrow. Om de gegevens van gisteren weer te geven, voert u het volgende in:
journalctl --since yesterdaybashHoe 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 errbashFilteren 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 apache2bashDe 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 todaybashjournalctl 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 todaybashFilteren 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=8088bashJe 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
33bashDe journaalboekingen kunnen worden gefilterd op basis van het ID:
journalctl _UID=33 --since todaybashOm 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 _GIDbashHier is een voorbeeld van de uitvoer:
32
99
102
133
81
84
100
0
124
87bashFilteren 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/bashbashKernelberichten 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 -kbashDe 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 -5bashDe 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-fullbashU kunt de weergave uitbreiden met de vlag -a:
journalctl -abashStel 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-pagerbashUitvoerformaten 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 jsonbashDit 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" :bashDe 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 -nbashU kunt ook het aantal vermeldingen instellen, bijvoorbeeld op 20:
journalctl -n 20bash