Zum Inhalt springen

Systemd/Journald: Unterschied zwischen den Versionen

Aus Foxwiki
KKeine Bearbeitungszusammenfassung
K Textersetzung - „ “ durch „ “
 
(59 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
'''journald''' ist die Service Unit von [https://wiki.ubuntuusers.de/systemd/ systemd], die für das [https://de.wikipedia.org/wiki/Logging Logging] in das zentrale Journal zuständig ist.
'''journald''' - Service Unit des [[systemd]] zum [[Linux/Logging|Logging]] in das zentrale Journal


== Beschreibung ==
== Beschreibung ==
* Standardmäßig werden dort die Logmeldungen des Kernels, des Systems, der [https://wiki.ubuntuusers.de/systemd/Service_Units/ Service Units] als auch von [https://wiki.ubuntuusers.de/Shell/Umleitungen/#stdin-stdout-stderr-Kanaele-der-Bash stdout] und [https://wiki.ubuntuusers.de/Shell/Umleitungen/#stdin-stdout-stderr-Kanaele-der-Bash stderr] gesammelt.
; [[systemd]] bringt ein eigenes Logging-Framework namens [[journald]] mit
* Dass die Log-Dateien binär gespeichert werden, um sie länger und fälschungssicher – so zumindest der Anspruch der systemd-Entwickler – speichern zu können, ist jedoch ein großer Kritikpunkt der Linux-Community
* Allerdings hat [[journald]] Charme und bringt außer der Umgewöhnung auch einige Vorteile mit, wie beispielsweise, dass Fehler in den Log-Dateien in Rot markiert werden und so eher auffallen


Die Logmeldungen werden standardmäßig in der Datei '''system.journal''' gespeichert, die bei Ubuntu im Verzeichnis '''/run/log/journal/UUID_DES_VERZEICHNISSES''' gespeichert wird.
; Journal abfragen
* Die <tt>UUID_DES_VERZEICHNISSES</tt> variiert dabei von System zu System.
Mit dem Wechsel von herkömmlichen init-Skripten zu <code>systemd</code> wurde ein eigenes Protokolliersystem eingeführt, das als ''Journal'' bezeichnet wird
* Aktiviert man die [https://wiki.ubuntuusers.de/systemd/journald/#Speichereinstellung-fuer-das-Journal-aendern persistente Speicherung] der Logdateien, dann ändert sich der Speicherort zu '''/var/log/journal/UUID_DES_VERZEICHNISSES'''.
* Alle Systemereignisse werden in das Journal geschrieben, sodass kein <code>syslog</code>-basierter Service ausgeführt werden muss
* Je nach Einstellung wird zusätzlich für jeden angemeldeten Benutzer eine Journald-Datei angelegt, siehe den entsprechenden Abschnitt dazu [https://wiki.ubuntuusers.de/systemd/journald/#zusaetzliche-Journal-Dateien-pro-Benutzer weiter unten].


journald kümmert sich selber um die [https://en.wikipedia.org/wiki/Log%20rotation Log rotation].
Das Journal selbst ist ein Systemservice und wird mit <code>systemd</code> verwaltet
* Standardmäßig erfolgt dies in Abhängigkeit von der Größe der Logdatei, wobei man in der Konfiguration auch eine zeit-basierte Logrotation umstellen kann.
* Die vollständige Bezeichnung des Service lautet <code>systemd-journald.service</code>
* Hier werden Protokolldaten in strukturierten, indizierten Journalen erfasst und gespeichert
* Die Daten basieren dabei auf den Protokollinformationen aus dem Kernel, von den Benutzerprozessen, aus der Standardeingabe und aus den Fehlern von Systemdiensten


Des Weiteren verwenden die Journaldateien ein binäres Format zum Speichern der Daten.
; [[systemd-journald]] ist standardmäßig aktiviert
* Zum Auslesen der Daten gibt es [https://wiki.ubuntuusers.de/systemd/journald/#Journal-Datei-auslesen verschiedene Möglichkeiten].
<syntaxhighlight lang="bash" highlight="1" line copy>
sudo systemctl status systemd-journald
</syntaxhighlight>
<syntaxhighlight lang="bash" highlight="" line>
systemd-journald.service - Journal Service
Loaded: loaded (/usr/lib/systemd/system/systemd-journald.service; static)
Active: active (running) since Mon 2014-05-26 08:36:59 EDT; 3 days ago
Docs: man:systemd-journald.service(8)
  man:journald.conf(5)
Main PID: 413 (systemd-journal)
Status: "Processing requests..."
CGroup: /system.slice/systemd-journald.service
  └─413 /usr/lib/systemd/systemd-journald
[...]
</syntaxhighlight>
; Quellen
Das Journal sammelt Logmeldungen
* [[Kernel]]
* System
* [https://wiki.ubuntuusers.de/systemd/Service_Units/ Service Units]
* [https://wiki.ubuntuusers.de/Shell/Umleitungen/#stdin-stdout-stderr-Kanaele-der-Bash stdout]
* [https://wiki.ubuntuusers.de/Shell/Umleitungen/#stdin-stdout-stderr-Kanaele-der-Bash stderr]


Zusätzlich schützt journald die Journaleinträge gegen Manipulation durch eine Technik namens "Forward Secure Sealing".
; system.journal
* Dadurch wird es z.B. unerwünschten Eindringlingen ins eigene System erschwert, ihre Spuren durch Manipulation der Logeinträge zu verschleiern.
Die Logmeldungen werden standardmäßig in der Datei '''system.journal''' gespeichert
* ''/run/log/journal/UUID_DES_VERZEICHNISSES''
* Die <tt>UUID_DES_VERZEICHNISSES</tt> variiert dabei von System zu System
 
; Persistente Speicherung
Aktiviert man die [https://wiki.ubuntuusers.de/systemd/journald/#Speichereinstellung-fuer-das-Journal-aendern persistente Speicherung] der Logdateien, dann ändert sich der Speicherort zu '''/var/log/journal/UUID_DES_VERZEICHNISSES'''
* Je nach Einstellung wird zusätzlich für jeden angemeldeten Benutzer eine Journald-Datei angelegt
** [[#zusaetzliche-Journal-Dateien-pro-Benutzer]]
 
; Log rotation
journald kümmert sich selbst um die [https://en.wikipedia.org/wiki/Log%20rotation Log rotation]
* Standardmäßig erfolgt dies in Abhängigkeit von der Größe der Logdatei, wobei man in der Konfiguration auch eine zeit-basierte Logrotation umstellen kann
 
; Binäre Journaldateien
* Zum Auslesen sind spezielle Programme notwendig
* [[#Journal-Datei auslesen| Möglichkeiten]]
 
; Schutz vor Manipulation
Zusätzlich schützt journald die Journaleinträge gegen Manipulation durch eine Technik namens "Forward Secure Sealing"
* Dadurch wird es etwa unerwünschten Eindringlingen ins eigene System erschwert, ihre Spuren durch Manipulation der Logeinträge zu verschleiern


== Installation ==
== Installation ==
Da systemd ab Ubuntu 15.04 integraler Bestandteil des Systems ist (und dieses ohne systemd nicht lauffähig ist), sind alle benötigten Komponenten bereits installiert.
[[Systemd/Journald|Journald]] ist Teil von [[Systemd]]


== Konfiguration ==
== Journal-Datei auslesen ==
Möchte man die Einstellung von journald ändern, muss die Datei '''/etc/systemd/journald.conf''' mit einem Editor und Root-Rechten bearbeitet werden.
{| class="wikitable options big"
|-
! Befehl !! Beschreibung
|-
| [[journalctl]] || Standardwerkzeug zum Auslesen und Anzeige der Journaldatei
|-
| [[strings]] und [[grep]] || <nowiki>strings /pfad/zum/system.journal | grep -i SUCHBEGRIFF</nowiki>
|}


In der Datei sind alle Default-Konfigurationswerte von journald in Form von auskommentierten Einträgen hinterlegt.
; [[strings]] und [[grep]]
* Zum Ändern eines Konfigurationspunkts ändert man einfach den entsprechenden Wert und entfernt das Kommentarzeichen <tt><nowiki>#</nowiki></tt> am Zeilenanfang.
Obwohl die Logdateien in einem Binärformat gespeichert werden, sind darin gespeicherte Meldungen unverändert als Zeichenketten abgelegt und lassen sich mit dem Werkzeug [[strings]] ([[binutils]]) und [[grep]] ohne journalctl herausfiltern:
* Nach einem Neustart des Rechners läuft journald mit der geänderten Konfiguration.


Eine komplette Übersicht inklusive Erklärung zu den Konfigurationsmöglichkeiten findet man in der [http://www.freedesktop.org/software/systemd/man/journald.conf.html Dokumentation] oder in der [https://wiki.ubuntuusers.de/man/ Manpage] namens '''journald.conf'''.
strings system.journal | grep -i SUCHBEGRIFF


=== Speichereinstellung für das Journal ändern ===
Die Datei [[system.journal]] liegt in einem Unterordner von
Wie (und ob) das Journal gespeichert wird, wird über den Wert des Schlüssels <tt>Storage</tt> geregelt.
* /run/log/journal/
* Unter Ubuntu ist der Standardwert <tt>auto</tt>.
* /var/log/journal/
* Dabei wird die Journal-Datei im Verzeichnis'''/run/log/UUID_DES_VERZEICHNISSES/''' angelegt und geht nach dem Herunterfahren des Systems verloren.


Damit die Journaldateien - und damit alle Logs - für längere Zeit gespeichert werden, gibt es zwei Möglichkeiten:# Man legt das Verzeichnis '''/var/log/journal/''' an.
== Aufruf ==
* Nach dem Neustart des Systems wird die Journal dort gespeichert und bleibt somit auch nach einem Neustart des Systems bestehen.
<syntaxhighlight lang="bash" highlight="1" line copy>
# Man ändert in der Konfigurationsdatei '''/etc/systemd/journald.conf''' den Wert der Zeile <br/>Storage=auto <br/>auf <br/>Storage=persistent <br/>Nach einem Neustart des Systems wird der Ordner '''/var/log/journal/''' automatisch angelegt und das Journal wird dort dauerhaft gespeichert.


Hat man die erste Möglichkeit gewählt, so kehrt man zum nicht-dauerhaften Journal zurück, in dem man das händisch angelegte Verzeichnis löscht und dann den Rechner neu starten.
</syntaxhighlight>
=== Optionen ===
=== Argumente ===
=== Umgebungsvariablen ===
=== Exit-Status ===
== Anwendung ==
=== Problembehebung ===
<noinclude>


Möchte man keine Journaldatei anlegen und somit das Logging komplett deaktivieren (nicht empfohlen!), muss man für den Schlüssel <tt>Storage</tt> den Wert <tt>none</tt> eintragen.
== Anhang ==
=== Siehe auch ===
<div style="column-count:2">
<categorytree hideroot=on mode="pages">{{BASEPAGENAME}}</categorytree>
</div>
----
{{Special:PrefixIndex/{{BASEPAGENAME}}/}}


=== Zusätzliche Journal-Dateien pro Benutzer ===
=== Dokumentation ===
Ist das [https://wiki.ubuntuusers.de/systemd/journald/#Speichereinstellung-fuer-das-Journal-aendern persistente Speichern] des Journals aktiviert, wird zusätzlich zur Journal-Datei '''system.journal''' eine '''.journal'''-Datei für jeden Benutzer angelegt.
<!--
* Diese folgen dem Namensschema '''user-XXXX.journal''', wobei <tt>XXXX</tt> die Nutzer-ID (UID) auf dem System ist.
; Man-Page
* Der 1. angelegte Benutzer hat bei Ubuntu die Nummer <tt>1000</tt>, der zweite <tt>1001</tt> usw.
# [https://manpages.debian.org/stable/procps/pgrep.1.de.html prep(1)]
* In diesen Journal-Dateien werden dann nur die Logs gesammelt, die nur durch den Benutzer (und nicht das System) generiert werden.


=== Weiterleitung der Logs an syslog ===
; Info-Pages
In der Standardkonfiguration von journald unter Ubuntu werden die Logs, welches ins zentrale Journal geschrieben werden, zusätzlich an [http://www.rsyslog.com/ rsyslog] weiter geleitet, welches die traditionelle Logdatei '''/var/log/syslog''' anlegt.
-->
* Die Weiterleitung erfolgt über den Socket '''/run/systemd/journal/syslog'''.


Um das Weiterleiten zu deaktivieren, muss man in der Konfigurationsdatei von journald den Schlüssel <tt>ForwardToSyslog</tt> auf <tt>no</tt> setzen.
=== Links ===
==== Projekt ====
==== Weblinks ====
# https://wiki.ubuntuusers.de/systemd/
# https://de.wikipedia.org/wiki/Logging


Zu beachten ist, dass die Weiterleitung an syslog unabhängig von dem gesetzten Werte für <tt>Storage</tt> ist.
[[Kategorie:Journald]]
* D.h. bei <tt>Storage=none</tt> und <tt>ForwardToSyslog=yes</tt> werden trotzdem alle Meldungen im syslog gespeichert.
 
</noinclude>
 
= TMP =
== systemd-journald ==
Bestandteil von [[systemd]]
* Werden in ''/run/log/journal/'' untergebracht
* Die Protokolle können mit ''journalctl'' angezeigt werden


== Journal-Datei auslesen ==
=== journalctl ===
=== journalctl ===
journalctl ist das Standardwerkzeug zum Auslesen und Anzeige der Journaldatei.
{|class="wikitable options big"
* Mehr Informationen sind im separaten Artikel [https://wiki.ubuntuusers.de/systemd/journalctl/ journalctl] zu finden.
! Option !! Bedeutung
|-
| -f || verhält sich so wie tail -f
|-
| -e || lässt journalctl ans Ende des Journals springen
|-
| -n || verhält sich so wie tail -n
|-
| -r || zeigt die neuesten Einträge
|-
| -b || zeigt nur die Einträge seit dem letzten Systemstart
|-
| --since "Datum Uhrzeit" --until "Datum Uhrzeit" || zeigt Einträge in einem bestimmten Zeitraum
|-
| -u || zeigt nur Einträge eines bestimmten Diensts
|-
| -p err || zeigt nur Fehlereinträge
|}
 
=== Konfiguration ===
; /etc/systemd/journald.conf
{| class="wikitable options big"
|-
! Direktive !! Beschreibung
|-
| Storage || legt fest, wie die Journale gespeichert werden
* volatile: wird lediglich im RAM gespeichert
* persistent: Verzeichnis ''/var/log/journal'' wird automatisch erstellt und dort gespeichert
* compress: Große Objekte werden komprimiert, bevor sie gespeichert werden
|-
| ForwardToSyslog || Leitet die Ereignisse zusätzlich an syslog weiter
|-
| SplitMode || Legt separate Journale pro User an
|-
| SystemMaxUse || Maximale Größe des Journals festlegen (Gegenstück wäre ''SystemKeepFree'')
|-
| MaxFileSec || legt die Zeit fest, für die ein einzelner Journaleintrag gespeichert werden soll
|}


=== strings und grep ===
=== Pflege ===
Auch wenn die Logdateien in einem Binärformat gespeichert werden, sind darin gespeicherten Meldungen unverändert als Zeichenketten abgelegt und lassen sich mit dem Werkzeug <tt>strings</tt> (enthalten im Paket '''binutils''') und [https://wiki.ubuntuusers.de/grep/ grep] auch ohne journalctl herausfiltern:
; Journalgröße prüfen
journalctl --disk-usage


strings /pfad/zum/system.journal | grep -i SUCHBEGRIFF


(der Pfad ist meist ein Unterordner von /run/log/journal/)
; Journalgröße verringern
Ältere Einträge aus dem Journal entfernen
journalctl --vacuum-size

Aktuelle Version vom 14. Juni 2026, 00:50 Uhr

journald - Service Unit des systemd zum Logging in das zentrale Journal

Beschreibung

systemd bringt ein eigenes Logging-Framework namens journald mit
  • Dass die Log-Dateien binär gespeichert werden, um sie länger und fälschungssicher – so zumindest der Anspruch der systemd-Entwickler – speichern zu können, ist jedoch ein großer Kritikpunkt der Linux-Community
  • Allerdings hat journald Charme und bringt außer der Umgewöhnung auch einige Vorteile mit, wie beispielsweise, dass Fehler in den Log-Dateien in Rot markiert werden und so eher auffallen
Journal abfragen

Mit dem Wechsel von herkömmlichen init-Skripten zu systemd wurde ein eigenes Protokolliersystem eingeführt, das als Journal bezeichnet wird

  • Alle Systemereignisse werden in das Journal geschrieben, sodass kein syslog-basierter Service ausgeführt werden muss

Das Journal selbst ist ein Systemservice und wird mit systemd verwaltet

  • Die vollständige Bezeichnung des Service lautet systemd-journald.service
  • Hier werden Protokolldaten in strukturierten, indizierten Journalen erfasst und gespeichert
  • Die Daten basieren dabei auf den Protokollinformationen aus dem Kernel, von den Benutzerprozessen, aus der Standardeingabe und aus den Fehlern von Systemdiensten
systemd-journald ist standardmäßig aktiviert
sudo systemctl status systemd-journald
 systemd-journald.service - Journal Service
 Loaded: loaded (/usr/lib/systemd/system/systemd-journald.service; static)
 Active: active (running) since Mon 2014-05-26 08:36:59 EDT; 3 days ago
 Docs: man:systemd-journald.service(8)
  man:journald.conf(5)
 Main PID: 413 (systemd-journal)
 Status: "Processing requests..."
 CGroup: /system.slice/systemd-journald.service
  └─413 /usr/lib/systemd/systemd-journald
 [...]
Quellen

Das Journal sammelt Logmeldungen

system.journal

Die Logmeldungen werden standardmäßig in der Datei system.journal gespeichert

  • /run/log/journal/UUID_DES_VERZEICHNISSES
  • Die UUID_DES_VERZEICHNISSES variiert dabei von System zu System
Persistente Speicherung

Aktiviert man die persistente Speicherung der Logdateien, dann ändert sich der Speicherort zu /var/log/journal/UUID_DES_VERZEICHNISSES

Log rotation

journald kümmert sich selbst um die Log rotation

  • Standardmäßig erfolgt dies in Abhängigkeit von der Größe der Logdatei, wobei man in der Konfiguration auch eine zeit-basierte Logrotation umstellen kann
Binäre Journaldateien
Schutz vor Manipulation

Zusätzlich schützt journald die Journaleinträge gegen Manipulation durch eine Technik namens "Forward Secure Sealing"

  • Dadurch wird es etwa unerwünschten Eindringlingen ins eigene System erschwert, ihre Spuren durch Manipulation der Logeinträge zu verschleiern

Installation

Journald ist Teil von Systemd

Journal-Datei auslesen

Befehl Beschreibung
journalctl Standardwerkzeug zum Auslesen und Anzeige der Journaldatei
strings und grep strings /pfad/zum/system.journal | grep -i SUCHBEGRIFF
strings und grep

Obwohl die Logdateien in einem Binärformat gespeichert werden, sind darin gespeicherte Meldungen unverändert als Zeichenketten abgelegt und lassen sich mit dem Werkzeug strings (binutils) und grep ohne journalctl herausfiltern:

strings system.journal | grep -i SUCHBEGRIFF

Die Datei system.journal liegt in einem Unterordner von

  • /run/log/journal/
  • /var/log/journal/

Aufruf

Optionen

Argumente

Umgebungsvariablen

Exit-Status

Anwendung

Problembehebung

Anhang

Siehe auch


Dokumentation

Projekt

  1. https://wiki.ubuntuusers.de/systemd/
  2. https://de.wikipedia.org/wiki/Logging


TMP

systemd-journald

Bestandteil von systemd

  • Werden in /run/log/journal/ untergebracht
  • Die Protokolle können mit journalctl angezeigt werden

journalctl

Option Bedeutung
-f verhält sich so wie tail -f
-e lässt journalctl ans Ende des Journals springen
-n verhält sich so wie tail -n
-r zeigt die neuesten Einträge
-b zeigt nur die Einträge seit dem letzten Systemstart
--since "Datum Uhrzeit" --until "Datum Uhrzeit" zeigt Einträge in einem bestimmten Zeitraum
-u zeigt nur Einträge eines bestimmten Diensts
-p err zeigt nur Fehlereinträge

Konfiguration

/etc/systemd/journald.conf
Direktive Beschreibung
Storage legt fest, wie die Journale gespeichert werden
  • volatile: wird lediglich im RAM gespeichert
  • persistent: Verzeichnis /var/log/journal wird automatisch erstellt und dort gespeichert
  • compress: Große Objekte werden komprimiert, bevor sie gespeichert werden
ForwardToSyslog Leitet die Ereignisse zusätzlich an syslog weiter
SplitMode Legt separate Journale pro User an
SystemMaxUse Maximale Größe des Journals festlegen (Gegenstück wäre SystemKeepFree)
MaxFileSec legt die Zeit fest, für die ein einzelner Journaleintrag gespeichert werden soll

Pflege

Journalgröße prüfen
journalctl --disk-usage


Journalgröße verringern

Ältere Einträge aus dem Journal entfernen

journalctl --vacuum-size