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:
Controleer de uitvoer op regels zoals:
Tijdzone beheren¶
# Alle beschikbare tijdzones weergeven
timedatectl list-timezones
# Instellen (bijv. voor Berlijn)
sudo timedatectl set-timezone Europe/Berlin
Logs bekijken 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:
Haal de opmerkingen weg en pas aan:
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¶
Logopruiming¶
Op grootte¶
Op tijd¶
Opmerking
Ondersteunde suffixen: s, m, h, days, weeks, months, years.
Persistente limieten (in configuratie)¶
Bewerk /etc/systemd/journald.conf:
Na wijzigingen:
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)¶
Analyse van gebeurtenisfrequentie¶
Exporteren en back-uppen¶
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).