Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
admin_grundlagen:journald [2016/04/13 14:14] stefan_miethke [journalctl] |
admin_grundlagen:journald [2025/01/30 14:49] (aktuell) natureshadow2 [Receiver] Remote-Journal nach Sender-Hostname filtern |
||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== systemd: journal ====== | ||
+ | Die "Logfiles" im systemd sind eine binäre Datenbank mit umfassenden Suchwerkzeugen | ||
+ | |||
+ | * contra | ||
+ | * kein KISS Design | ||
+ | * schlechte post-mortem Analyse | ||
+ | * nicht mehr kompatibel zu alten Logauswertungen (z.B. logwatch) | ||
+ | * pro | ||
+ | * Metainfos nicht mehr fälschbar (weil vom daemon) | ||
+ | * Außerhalb des laufenden systemd-journald nicht mehr fälschbar (hash) | ||
+ | * wartungsfrei (kein logrotate) | ||
+ | * kann applikationsspezifische Werte aufnehmen | ||
+ | * umfangreiche Abfragemöglichkeiten | ||
+ | |||
+ | ===== Files ===== | ||
+ | * ''/var/log/journal/<machine-id>'' <- persistent | ||
+ | * ''/run/systemd/journal/<machine-id>'' <- dynamisch | ||
+ | |||
+ | Die "machine-id" steht in ''/etc/machine-id'' und wird automatisch generiert oder mit ''systemd-machine-id-setup''. ''/var/lib/dbus/machine-id'' beachten. Man kann eine Generierung erzwingen, indem man die Datei trunkiert | ||
+ | |||
+ | > /etc/machine-id | ||
+ | readlink /var/lib/dbus/machine-id || rm /var/lib/dbus/machine-id | ||
+ | | ||
+ | ((man könnte auch eine id selbst erzeugen mit ''dbus-uuidgen > /etc/machineid'')). | ||
+ | (( Debian Wiki zu dem Thema: | ||
+ | https://wiki.debian.org/MachineId#line-35 | ||
+ | )) | ||
+ | |||
+ | Das Verzeichnis ''/var/log/journal'' muss vorhanden sein; systemd loggt andernfalls nur temporär. | ||
+ | |||
===== journalctl ===== | ===== journalctl ===== | ||
gleich ans Ende springen | gleich ans Ende springen | ||
Zeile 8: | Zeile 38: | ||
alle Felder aufschlüsseln | alle Felder aufschlüsseln | ||
journalctl -o verbose | journalctl -o verbose | ||
+ | (alle Felder, die mit '_' beginnen, sind interne Felder und werden intern vom journald gesetzt und nicht vom Client. Somit sind sie nicht leicht manipulierbar.) | ||
+ | |||
seit dem letztem Boot | seit dem letztem Boot | ||
Zeile 13: | Zeile 45: | ||
in einem bestimmten Zeitraum | in einem bestimmten Zeitraum | ||
- | journalctl --since "2016-01-10" --until "2016-01-11 03:00" | + | journalctl --since '2016-01-10' --until '2016-01-11 03:00' |
| | ||
ab einem bestimmten Level | ab einem bestimmten Level | ||
Zeile 27: | Zeile 59: | ||
=== Ins Journal schreiben === | === Ins Journal schreiben === | ||
+ | genauer: stdout und stderr mit dem journal verbinden | ||
ls | systemd-cat | ls | systemd-cat | ||
+ | systemd-cat hostnamectl | ||
==== Größe beschränken ==== | ==== Größe beschränken ==== | ||
- | ''/etc/systemd/journald.conf'' : | + | Defaults für ''persistent'': 10% filesystem. Max 4 GiB |
- | <file> | + | |
+ | <file txt /etc/systemd/journald.conf.d/lukas.conf> | ||
SystemMaxUse=100M | SystemMaxUse=100M | ||
SystemKeepFree=1G | SystemKeepFree=1G | ||
</file> | </file> | ||
+ | |||
+ | ==== Größe manuell verkleinern ==== | ||
+ | Aktuelle Größe anzeigen: | ||
+ | journalctl --disk-usage | ||
+ | sollte etwa das selbe sein wie: | ||
+ | du -sh /var/log/journal/ | ||
+ | |||
+ | So lange alte Logs löschen, bis 100M erreicht sind: | ||
+ | sudo journalctl --vacuum-size=100M | ||
+ | |||
+ | oder: alle Logs löschen, die älter als 2 Tage sind: | ||
+ | journalctl --vacuum-time=2days | ||
+ | |||
+ | ==== Persistentes Journal ==== | ||
+ | mkdir /var/log/journal | ||
+ | systemctl restart systemd-journald | ||
+ | journalctl --flush | ||
+ | ==== Boots ==== | ||
+ | Auflisten, letztes boot | ||
+ | journalctl --list-boots | ||
+ | journalctl -b | ||
+ | Ein bestimmtes boot (mit ID oder ordinal) | ||
+ | journalctl -b 76fcd53ed6d54d24b1422e6bb48bab61 | ||
+ | journalctl -b -2 | ||
+ | |||
+ | ==== Versiegeln ==== | ||
+ | So können die sealing keys erstellt werden | ||
+ | journalctl --setup-keys | ||
===== Doku ===== | ===== Doku ===== | ||
* http://0pointer.de/blog/projects/journalctl.html | * http://0pointer.de/blog/projects/journalctl.html | ||
+ | ====== Remote Logging ====== | ||
+ | Benötigte Pakete: systemd-journal-remote | ||
+ | ===== Push Betrieb ===== | ||
+ | ==== Receiver ==== | ||
+ | Zunächst plain HTTP. Im ''systemd-journal-remote.socket'' steht der ''ListenStream=19532'' | ||
+ | als Standard-Port. | ||
+ | |||
+ | systemctl edit systemd-journal-remote.service | ||
+ | |||
+ | HTTPS durch HTTP ersetzen. Eigentlich keine gute Idee ;-) | ||
+ | |||
+ | <file> | ||
+ | [Service] | ||
+ | ExecStart= | ||
+ | ExecStart=...--listen-http... | ||
+ | </file> | ||
+ | |||
+ | systemctl enable --now systemd-journal-remote.socket | ||
+ | ss -lnp '( sport = 19532 )' | ||
+ | |||
+ | Remote-Logs mit journalctl anzeigen: | ||
+ | |||
+ | journalctl -D /var/log/journal/remote | ||
+ | journalctl -D /var/log/journal/remote _HOSTNAME=notebook42 | ||
+ | ==== Sender ==== | ||
+ | <file txt /etc/systemd/journal-upload.conf> | ||
+ | [Upload] | ||
+ | URL=http://10.0.0.1:19532 | ||
+ | </file> | ||
+ | |||
+ | systemctl enable --now systemd-journal-upload.service |