A systemd saját naplórendszert futtat: ez a journal, amelyet a journalctl
segítségével olvashatunk. Időnként nem árt ránézni a logokra.
A journal olvasása
Egy bizonyos unit üzenetei fordított (csökkenő) sorrendben egy bizonyos időpontig vagy adott időintervallumban:
# journalctl -r -u borgmatic.service -U "2023-01-22 07:00:00"
# journalctl --reverse --unit=borgmatic.service --since=-3w --until=-1w
Valósidejű logok (mint tail -f
), ez is segített már észrevenni hibákat:
# journalctl -f
# journalctl -f -p notice
A legutóbbi boot-üzenetek listázása error és magasabb prioritással:
# journalctl -b -p err
# journalctl --boot --priority=err
Csak a kernel logok:
# journalctl -k
# journalctl --dmesg
Korábbi boot-üzenetek megőrzéséhez előbb létre kell hozni a /var/log/journal/
mappát. Ez akkor működik, ha a /etc/systemd/journald.conf
konfigban Storage=auto
beállítás szerepel, ez a default. (Tehát ha van mappa, akkor megőrzi a logokat, ha nincs, akkor nem.)
# mkdir -p /var/log/journal/
Korábbi bootok és boot-üzenetek listázása:
# journalctl --list-boots
# journalctl -b -5
# journalctl --boot=325b71c16d5145f19ef123b64383d04b
A journal tárolása
Ha a logok akkumulálása mellett döntünk, akkor nem árt gondoskodni a retencióról, különben folyamatosan nő a helyfoglalásuk. A logok maximális mérete, illetve életkora egy /etc/systemd/journald.conf.d/
mappában lévő, tetszőleges nevű konfigfájlban adható meg, lásd: man journald.conf
. Pl. 10-retention.conf
:
[Journal]
Storage=persistent
MaxRetentionSec=3month
Mivel a konfig több forrásból állhat össze, így nézhetjük meg teljességében:
$ systemd-analyze cat-config systemd/journald.conf
A logok aktuális helyfoglalása:
# journalctl --disk-usage
Az archív logok kézi törlése annak megadásával, mit tartunk meg:
# journalctl --vacuum-time=2w
# journalctl --vacuum-size=500M
A journal írása
Akár egyszerű felhasználóként is írhatunk üzeneteket a journalba (a syslogon keresztül a user facility-vel), amelyeket aztán le is tudunk kérdezni.
$ logger -p user.notice -t mytag "hello world"
$ journalctl -q -p err -t mytag
Az utóbbi JSON formátumban:
$ journalctl -p err -t mytag -o json | jq '{_TRANSPORT, SYSLOG_IDENTIFIER, __REALTIME_TIMESTAMP, PRIORITY, MESSAGE}'