Zoeken op website

Beheer logberichten onder Systemd met Journalctl [uitgebreide handleiding]


Systemd is een geavanceerde systeem- en servicemanager voor Linux-systemen: een init-daemon-vervanging bedoeld om processen parallel te starten bij het opstarten van het systeem. Het wordt nu ondersteund in een aantal huidige reguliere distributies, waaronder Fedora, Debian, Ubuntu, OpenSuSE, Arch, RHEL, CentOS, enz.

Eerder legden we het verhaal achter ‘init’ en ‘systemd’ uit; waar we bespraken wat de twee daemons zijn, waarom ‘init’ technisch gezien vervangen moest worden door ‘systemd’ en ook de belangrijkste kenmerken van systemd.

Een van de belangrijkste voordelen van systemd ten opzichte van andere veelgebruikte init-systemen is ondersteuning voor gecentraliseerd beheer van systeem- en procesregistratie met behulp van een journaal. In dit artikel leren we hoe we logberichten onder systemd kunnen beheren en bekijken met de opdracht journalctl in Linux.

Belangrijk: voordat u verder gaat in deze handleiding, wilt u wellicht leren hoe u 'Systemd'-services en -eenheden kunt beheren met de opdracht 'Systemctl', en hoe u nieuwe services en eenheden kunt maken en uitvoeren service-eenheden in systemd met behulp van shell-scripts in Linux. Als u echter akkoord gaat met al het bovenstaande, lees dan verder.

Journald configureren voor het verzamelen van logberichten onder Systemd

journald is een daemon die journaalgegevens uit het hele systeem verzamelt en schrijft; dit zijn in wezen opstartberichten, berichten van de kernel en van syslog of verschillende applicaties en het slaat alle berichten op een centrale locatie op: het journaalbestand.

U kunt het gedrag van journald controleren via het standaardconfiguratiebestand: /etc/systemd/journald.conf dat tijdens het compileren wordt gegenereerd. Dit bestand bevat opties waarvan u de waarden kunt wijzigen om aan uw lokale omgevingsvereisten te voldoen.

Hieronder ziet u een voorbeeld van hoe het bestand eruit ziet, bekeken met de opdracht cat.

cat /etc/systemd/journald.conf 
See journald.conf(5) for details.

[Journal]
#Storage=auto
#Compress=yes
#Seal=yes
#SplitMode=uid
#SyncIntervalSec=5m
#RateLimitInterval=30s
#RateLimitBurst=1000
#SystemMaxUse=
#SystemKeepFree=
#SystemMaxFileSize=
#SystemMaxFiles=100
#RuntimeMaxUse=
#RuntimeKeepFree=
#RuntimeMaxFileSize=
#RuntimeMaxFiles=100
#MaxRetentionSec=
#MaxFileSec=1month
#ForwardToSyslog=yes
#ForwardToKMsg=no
#ForwardToConsole=no
#ForwardToWall=yes
#TTYPath=/dev/console
#MaxLevelStore=debug
#MaxLevelSyslog=debug
#MaxLevelKMsg=notice
#MaxLevelConsole=info
#MaxLevelWall=emerg

Merk op dat verschillende pakketinstallaties en gebruiksconfiguratie-extracten in /usr/lib/systemd/*.conf.d/ en runtime-configuraties gevonden kunnen worden in /run/systemd/journald.conf. d/*.conf die u niet noodzakelijkerwijs hoeft te gebruiken.

Schakel logboekgegevensopslag op schijf in

Een aantal Linux-distributies, waaronder Ubuntu en zijn derivaten zoals Linux Mint, maken standaard geen permanente opslag van opstartberichten op schijf mogelijk.

Het is mogelijk om dit in te schakelen door de optie “Opslag” in te stellen op “persistent”, zoals hieronder weergegeven. Hierdoor wordt de map /var/log/journal aangemaakt en worden alle journaalbestanden daaronder opgeslagen.

sudo vi /etc/systemd/journald.conf 
OR
sudo nano /etc/systemd/journald.conf 
[Journal]
Storage=persistent

Voor aanvullende instellingen kunt u de betekenis vinden van alle opties die moeten worden geconfigureerd in het gedeelte “[Journal]” door te typen.

man journald.conf

De juiste systeemtijd instellen met de opdracht Timedatectl

Voor betrouwbaar logbeheer onder systemd met behulp van de journald-service moet u ervoor zorgen dat de tijdinstellingen, inclusief de tijdzone, correct zijn op het systeem.

Om de huidige datum- en tijdinstellingen op uw systeem te bekijken, typt u.

timedatectl 
OR
timedatectl status

Local time: Thu 2017-06-15 13:29:09 EAT
Universal time: Thu 2017-06-15 10:29:09 UTC
RTC time: Thu 2017-06-15 10:29:09
Time zone: Africa/Kampala (EAT, +0300)
Network time on: yes
NTP synchronized: yes
 RTC in local TZ: no

Gebruik de onderstaande opdrachten om de juiste tijdzone en eventueel systeemtijd in te stellen.

sudo timedatectl set-timezone  Africa/Kampala
sudo timedatectl set-time “13:50:00”

Logboekberichten bekijken met de opdracht Journalctl

journalctl is een hulpprogramma dat wordt gebruikt om de inhoud van het systemd-journaal te bekijken (dat is geschreven door journald service).

Om alle verzamelde logboeken zonder enige filtering weer te geven, typt u.

journalctl
-- Logs begin at Wed 2017-06-14 21:56:43 EAT, end at Thu 2017-06-15 12:28:19 EAT
Jun 14 21:56:43 tecmint systemd-journald[336]: Runtime journal (/run/log/journal
Jun 14 21:56:43 tecmint kernel: Initializing cgroup subsys cpuset
Jun 14 21:56:43 tecmint kernel: Initializing cgroup subsys cpu
Jun 14 21:56:43 tecmint kernel: Initializing cgroup subsys cpuacct
Jun 14 21:56:43 tecmint kernel: Linux version 4.4.0-21-generic (buildd@lgw01-21)
Jun 14 21:56:43 tecmint kernel: Command line: BOOT_IMAGE=/boot/vmlinuz-4.4.0-21-
Jun 14 21:56:43 tecmint kernel: KERNEL supported cpus:
Jun 14 21:56:43 tecmint kernel:   Intel GenuineIntel
Jun 14 21:56:43 tecmint kernel:   AMD AuthenticAMD
Jun 14 21:56:43 tecmint kernel:   Centaur CentaurHauls
Jun 14 21:56:43 tecmint kernel: x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]
Jun 14 21:56:43 tecmint kernel: x86/fpu: Supporting XSAVE feature 0x01: 'x87 flo
Jun 14 21:56:43 tecmint kernel: x86/fpu: Supporting XSAVE feature 0x02: 'SSE reg
Jun 14 21:56:43 tecmint kernel: x86/fpu: Supporting XSAVE feature 0x04: 'AVX reg
Jun 14 21:56:43 tecmint kernel: x86/fpu: Enabled xstate features 0x7, context si
Jun 14 21:56:43 tecmint kernel: x86/fpu: Using 'eager' FPU context switches.
Jun 14 21:56:43 tecmint kernel: e820: BIOS-provided physical RAM map:
Jun 14 21:56:43 tecmint kernel: BIOS-e820: [mem 0x0000000000000000-0x00000000000
Jun 14 21:56:43 tecmint kernel: BIOS-e820: [mem 0x0000000000090000-0x00000000000
Jun 14 21:56:43 tecmint kernel: BIOS-e820: [mem 0x0000000000100000-0x000000001ff
Jun 14 21:56:43 tecmint kernel: BIOS-e820: [mem 0x0000000020000000-0x00000000201
Jun 14 21:56:43 tecmint kernel: BIOS-e820: [mem 0x0000000020200000-0x00000000400

Bekijk logberichten op basis van boots

U kunt een lijst met opstartnummers (ten opzichte van de huidige opstartfase), hun ID's en de tijdstempels van het eerste en laatste bericht dat overeenkomt met het opstartproces weergeven met de optie --list-boots.

journalctl --list-boots

-1 9fb590b48e1242f58c2579defdbbddc9 Thu 2017-06-15 16:43:36 EAT—Thu 2017-06-15 1
 0 464ae35c6e264a4ca087949936be434a Thu 2017-06-15 16:47:36 EAT—Thu 2017-06-15 1 

Om de journaalposten van de huidige opstartprocedure (nummer 0) te bekijken, gebruikt u de schakelaar -b op deze manier (hetzelfde als de voorbeelduitvoer hierboven).

journalctl -b

en om een journaal van de vorige keer opstarten te zien, gebruikt u de -1 relatieve pointer met de -b optie, zoals hieronder.

journalctl -b -1

U kunt ook de opstart-ID op deze manier gebruiken.

journalctl -b 9fb590b48e1242f58c2579defdbbddc9

Logboekberichten filteren op basis van tijd

Om de tijd in het Coördineerde Universal Time (UTC) formaat te gebruiken, voegt u de --utc opties als volgt toe.

journalctl --utc

Om alle vermeldingen sinds een bepaalde datum en tijd te zien, b.v. Typ deze opdracht op 15 juni 2017 om 08:15 uur.

journalctl --since "2017-06-15 08:15:00"
journalctl --since today
journalctl --since yesterday

Recente logberichten bekijken

Om recente logberichten te bekijken (standaard 10), gebruikt u de vlag -n, zoals hieronder weergegeven.

journalctl -n
journalctl -n 20 

Logboekberichten bekijken die door Kernel zijn gegenereerd

Om alleen kernelberichten te zien, vergelijkbaar met de uitvoer van het dmesg-commando, kunt u de vlag -k gebruiken.

journalctl -k 
journalctl -k -b 
journalctl -k -b 9fb590b48e1242f58c2579defdbbddc9

Logboekberichten bekijken die door eenheden zijn gegenereerd

Om alle journaalposten voor een bepaalde eenheid te bekijken, gebruikt u de -u-schakelaar als volgt.

journalctl -u apache2.service

Typ deze opdracht om terug te keren naar de huidige opstartstand.

journalctl -b -u apache2.service

Gebruik dit om logbestanden van de vorige keer opstarten weer te geven.

journalctl -b -1 -u apache2.service

Hieronder vindt u enkele andere nuttige opdrachten:

journalctl -u apache2.service  
journalctl -u apache2.service --since today
journalctl -u apache2.service -u nagios.service --since yesterday

Logboekberichten bekijken die door processen zijn gegenereerd

Om logboeken te bekijken die door een specifiek proces zijn gegenereerd, geeft u de PID op deze manier op.

journalctl _PID=19487
journalctl _PID=19487 --since today
journalctl _PID=19487 --since yesterday

Logboekberichten bekijken die zijn gegenereerd door gebruikers- of groeps-ID

Als u logboeken wilt bekijken die door een specifieke gebruiker of groep zijn gegenereerd, geeft u de gebruikers- of groeps-ID op deze manier op.

journalctl _UID=1000
journalctl _UID=1000 --since today
journalctl _UID=1000 -b -1 --since today

Logboeken bekijken die door een bestand zijn gegenereerd

Om alle logbestanden weer te geven die zijn gegenereerd door een bestand (mogelijk een uitvoerbaar bestand), zoals het uitvoerbare bestand van D-Bus of bash, typt u eenvoudigweg.

journalctl /usr/bin/dbus-daemon
journalctl /usr/bin/bash

Logboekberichten bekijken op prioriteit

U kunt de uitvoer ook filteren op basis van berichtprioriteiten of prioriteitsbereiken met behulp van de vlag -p. De mogelijke waarden zijn: 0 – Emerg, 1 – Alert, 2 – Crit, 3 – Err, 4 – Warning, 5 – Notice, 6 – Info, 7 – Debug):

journalctl -p err

Om een bereik op te geven, gebruikt u het onderstaande formaat (opduikende waarschuwing).

journalctl -p 1..4
OR
journalctl -p emerg..warning

Bekijk logberichten in realtime

Je kunt logs praktisch bekijken terwijl ze worden geschreven met de -f optie (vergelijkbaar met de tail -f functionaliteit).

journalctl -f

Opmaak van journaalweergave verwerken

Als u de uitvoeropmaak van de journaalboekingen wilt beheren, voegt u de vlag -o toe en gebruikt u deze opties: cat, export, json, json-pretty, json-sse, short, short-iso, kort-monotoon, kort-precies en breedsprakig (controleer de betekenis van de opties in de man-pagina:

De cat optie toont het daadwerkelijke bericht van elke journaalboeking zonder enige metagegevens (tijdstempel enzovoort).

journalctl -b -u apache2.service -o cat

Tijdschriften beheren op een systeem

Om het journaalbestand op interne consistentie te controleren, gebruikt u de optie --verify. Als alles goed is, zou de uitvoer een PASS moeten aangeven.

journalctl --verify

PASS: /run/log/journal/2a5d5f96ef9147c0b35535562b32d0ff/system.journal                               
491f68: Unused data (entry_offset==0)                                                                
PASS: /run/log/journal/2a5d5f96ef9147c0b35535562b32d0ff/system@816533ecd00843c4a877a0a962e124f2-0000000000003184-000551f9866c3d4d.journal
PASS: /run/log/journal/2a5d5f96ef9147c0b35535562b32d0ff/system@816533ecd00843c4a877a0a962e124f2-0000000000001fc8-000551f5d8945a9e.journal
PASS: /run/log/journal/2a5d5f96ef9147c0b35535562b32d0ff/system@816533ecd00843c4a877a0a962e124f2-0000000000000d4f-000551f1becab02f.journal
PASS: /run/log/journal/2a5d5f96ef9147c0b35535562b32d0ff/system@816533ecd00843c4a877a0a962e124f2-0000000000000001-000551f01cfcedff.journal

Oude journaalbestanden verwijderen

U kunt ook het huidige schijfgebruik van alle journaalbestanden weergeven met de opties --disk-usage. Het toont de som van het schijfgebruik van alle gearchiveerde en actieve journaalbestanden:

journalctl --disk-usage

Om oude (gearchiveerde) journaalbestanden te verwijderen, voert u de onderstaande opdrachten uit:

sudo journalctl --vacuum-size=50M  #delete files until the disk space they use falls below the specified size
sudo journalctl --vacuum-time=1years	#delete files so that all journal files contain no data older than the specified timespan
sudo journalctl --vacuum-files=4     #delete files so that no more than the specified number of separate journal files remain in storage location

Journaalbestanden roteren

Tenslotte kunt u journald opdracht geven om journaalbestanden te roteren met de optie --rotate. Merk op dat deze richtlijn pas terugkeert als de rotatiebewerking is voltooid:

sudo journalctl --rotate

Voor een uitgebreide gebruikshandleiding en opties kunt u de journalctl-manpagina als volgt bekijken.

man journalctl

Bekijk enkele nuttige artikelen.

  1. Systeemopstartproces en -services beheren (SysVinit, Systemd en Upstart)
  2. Petiti - Een open source loganalysetool voor Linux SysAdmins
  3. Logrotatie instellen en beheren met Logrotate in Linux
  4. lnav – Bekijk en analyseer Apache-logboeken vanaf een Linux-terminal

Dat is het voor nu. Gebruik de onderstaande feedback om vragen te stellen of uw mening over dit onderwerp toe te voegen.