Ga naar inhoud

Logging in systemd met journalctl

In dit artikel

In moderne Linux-distributies (Ubuntu ≥ 16.04, Debian ≥ 8, RHEL/CentOS ≥ 7, Alma/Rocky ≥ 8) beheert systemd niet alleen services, maar biedt het ook gecentraliseerde logging via journald en het hulpprogramma journalctl.

Het systemd-journal verzamelt: - kernelberichten (dmesg), - logs van services zoals (nginx, sshd, docker en andere), - standaard stdout/stderr-streams van daemons, - auditgebeurtenissen (indien geïntegreerd met auditd).

Opmerking

journald kan parallel met syslog werken (bijv. rsyslog of syslog-ng)—logs kunnen worden gedupliceerd. Echter, journald vervangt vaak de klassieke syslog volledig.

Snelstart: kerncommando's

Taak Commando
Alle logs bekijken (met pager) journalctl
Laatste 10 items journalctl -n
Logs in realtime volgen journalctl -f (analoog aan tail -f)
Logs sinds laatste opstart journalctl -b
Logs voor een specifieke service journalctl -u nginx
Kernellogs journalctl -k
Schijfruimte gebruikt door het journal journalctl --disk-usage

Tijd en tijdzones

Standaard toont journalctl lokale tijd. Controleer of deze correct is geconfigureerd:

timedatectl status

Controleer de uitvoer op regels zoals:

Local time: Thu 2025-11-07 15:32:11 
Time zone: Europe/Paris (PAR, +0100)

Tijdzone beheren

# Alle beschikbare tijdzones weergeven
timedatectl list-timezones


# Instellen (bijv. voor Berlijn)
sudo timedatectl set-timezone Europe/Berlin

Logs bekijken in UTC

journalctl --utc           # altijd UTC
journalctl -b --utc        # huidige opstart, in UTC

Opstartgeschiedenis

Standaard worden logs van eerdere opstarts niet bewaard (ze worden alleen opgeslagen in /run/log/journal/, wat bij het opnieuw opstarten wordt gewist). Om ze te bewaren, schakel persistent opslag in:

sudo mkdir -p /var/log/journal
sudo systemd-tmpfiles --create --prefix /var/log/journal
sudo systemctl restart systemd-journald

Of bewerk de configuratie handmatig:

sudo nano /etc/systemd/journald.conf

Haal de opmerkingen weg en pas aan:

[Journal]
Storage=persistent

Werken met opstarts

# Alle opgeslagen opstarts weergeven
journalctl --list-boots


# Uitvoer:
#  -2 abc123... Wed 2025-11-05 10:00:00 MSK—Wed 12:30:45 MSK
#  -1 def456... Thu 2025-11-06 09:15:22 MSK—Thu 18:44:10 MSK
#   0 xyz789... Fri 2025-11-07 08:20:05 MSK—running


# Logs van de vorige opstart
journalctl -b -1


# Logs op opstart-ID
journalctl -b xyz789...

Logfiltering

Op tijd

# Van een specifiek tijdstip tot nu
journalctl --since "2025-11-07 14:00:00"


# Voor een periode
journalctl --since "2025-11-06" --until "2025-11-07 09:00:00"


# Handige trefwoorden
journalctl --since today
journalctl --since yesterday
journalctl --since "2 hours ago"
journalctl --until now

Opmerking

Ondersteunde formaten: YYYY-MM-DD, YYYY-MM-DD HH:MM:SS, today, yesterday, 1 hour ago, 5min ago.


Op service (eenheid)

# Nginx-logs
journalctl -u nginx


# Met .service-extensie (optioneel maar correct)
journalctl -u nginx.service


# Meerdere services tegelijk
journalctl -u nginx -u php-fpm --since today


# Alleen nginx-fouten van de laatste 2 uur
journalctl -u nginx -p err --since "2 hours ago"

Op proces, gebruiker, groep

# Op PID (bijv. nginx-masterproces)
journalctl _PID=12345


# Op UID van een gebruiker
journalctl _UID=33          # bijv. www-data
journalctl _UID=$(id -u nginx)


# Alle UIDs met items weergeven
journalctl -F _UID


# Op dezelfde manier voor GID
journalctl -F _GID

Op prioriteitsniveau (ernst)

Niveau Code Beschrijving
emerg 0 Systeem is onbruikbaar
alert 1 Onmiddellijke actie vereist
crit 2 Kritieke fouten
err 3 Fouten
warning 4 Waarschuwingen
notice 5 Belangrijke gebeurtenissen
info 6 Informatieve berichten
debug 7 Foutopsporing

Voorbeelden:

# Alleen fouten en hoger (err, crit, alert, emerg)
journalctl -p err


# Dezelfde via numerieke code
journalctl -p 3


# Nginx-fouten voor de huidige opstart
journalctl -u nginx -p err -b


Uitvoerformattering

Kernopties

--no-pager       # uitvoer naar stdout (voor grep, tee, omleiding)
--no-full        # lange regels niet afkappen (standaard is afgekapt)
-n 50            # laatste 50 items
-f               # volgen (live-weergave van nieuwe items)

Uitvoer formatteren

Formatteer (-o)**

Formaat Gebruik
short (standaard) Klassieke syslog-stijl
short-iso Tijd in ISO 8601: 2025-01-07T15:30:45+03:00
short-precise Tijd met microseconden
cat Alleen berichttekst (zonder metadata) — handig voor scripts
json JSON, één item per regel (machine-leesbaar)
json-pretty Mens-leesbaar JSON (voor foutopsporing/analyse)
verbose Alle velden, inclusief verborgen _SOURCE_REALTIME_TIMESTAMP, _BOOT_ID, etc.)

Voorbeelden:

# Mens-leesbaar JSON voor nginx
journalctl -u nginx -o json-pretty --since today


# Alleen berichttekst
journalctl -u nginx -p err -o cat


# Exporteren naar een bestand voor analyse
journalctl -b -u docker --no-pager > docker_boot.log

Journalgrootte beheren

Huidige grootte

# --vacuum-size=100M
journalctl --vacuum-size=100M

Logopruiming

Op grootte

# --vacuum-files=5
journalctl --vacuum-files=5

Op tijd

# --vacuum-time=1d
journalctl --vacuum-time=1d

Opmerking

Ondersteunde suffixen: s, m, h, days, weeks, months, years.

Persistente limieten (in configuratie)

Bewerk /etc/systemd/journald.conf:

- SystemMaxUse=1G
+ SystemMaxUse=500M

Na wijzigingen:

systemctl restart systemd-journald

Opmerking

Wijzigingen in journald.conf hebben geen invloed op al opgebouwde logs — gebruik --vacuum-* om op te ruimen.

Geavanceerde technieken

Zoeken op inhoud (met grep)

journalctl -u nginx | grep "error"

Analyse van gebeurtenisfrequentie

journalctl --since "2023-01-01" --until "2023-01-31" | grep "error" | wc -l

Exporteren en back-uppen

journalctl -b -u docker --no-pager > docker_boot.log

Veelgestelde Vragen

V: Waarom toont journalctl geen logs van eerdere herstarts? A: Controleer of Storage=persistent is ingeschakeld en of /var/log/journal/ bestaat. Zonder dit worden logs alleen in RAM /run bewaard.

V: Hoe schakel ik journald uit en ga ik terug naar rsyslog? A: U kunt journald niet volledig uitschakelen (het is onderdeel van systemd), maar u kunt: - Logs omleiden naar rsyslog via /etc/systemd/journald.conf of door systemd-journald te gebruiken met SystemMaxUse=0 om logging uit te schakelen. - Of journald als bron voor rsyslog uitschakelen, waardoor alleen deze overblijft.

V: Kunnen logs worden versleuteld? A: journald ondersteunt geen versleuteling out of the box. Gebruik hiervoor: - logrotate + gpg, - Of third-party SIEM-systemen (Graylog, ELK, Loki + Promtail).

question_mark
Is there anything I can help you with?
question_mark
AI Assistant ×