[[Vorlage(Getestet, jammy)]] {{{#!vorlage Wissen [:Terminal: Ein Terminal öffnen] [:mit Root-Rechten arbeiten:] [:Editor: einen Editor öffnen] }}} [[Inhaltsverzeichnis()]] journald ist die Service Unit von [:systemd:], die für das [wikipedia:Logging:] in das zentrale Journal zuständig ist. Standardmäßig werden dort die Logmeldungen des Kernels, des Systems, der [:systemd/Service_Units:Service Units] als auch von [:Shell/Umleitungen/#stdin-stdout-stderr-Kanaele-der-Bash:stdout] und [:Shell/Umleitungen/#stdin-stdout-stderr-Kanaele-der-Bash:stderr] gesammelt. journald kümmert sich selber um die [wikipedia_en: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. Des Weiteren verwenden die Journaldateien ein binäres Format zum Speichern der Daten. Zum Auslesen der Daten gibt es [#Journal-Datei-auslesen verschiedene Möglichkeiten]. Zusätzlich schützt journald die Journaleinträge gegen Manipulation durch eine Technik namens "Forward Secure Sealing". 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, die je nach Konfiguration in einem der beiden folgenden Verzeichnisse gespeichert wird: * '''/var/log/journal/UUID_DES_VERZEICHNISSES''' - wenn die [#Speichereinstellung-fuer-das-Journal-aendern persistente Speicherung] aktiviert ist * '''/run/log/journal/UUID_DES_VERZEICHNISSES''' - wenn die temporäre Speicherung aktiviert ist Außerdem wird neben der Datei '''system.journal''' zusätzlich für jeden angemeldeten Benutzer eine Journald-Datei angelegt. = 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. = Konfiguration = Möchte man die Einstellung von journald ändern, muss die Datei '''/etc/systemd/journald.conf''' mit einem Editor[2] und Root-Rechten[3] bearbeitet werden. Statt diese direkt zu ändern, legt man besser eine eigene Datei, endend auf '''.conf''', im Ordner '''/etc/systemd/journald.conf.d/''' an und ändert dort die gewünschten Werte. In der Datei sind alle Default-Konfigurationswerte von journald in Form von auskommentierten Einträgen hinterlegt. Zum Ändern eines Konfigurationspunkts ändert man einfach den entsprechenden Wert und entfernt das Kommentarzeichen `#` am Zeilenanfang. 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] {en} oder in der [:man:Manpage] namens '''journald.conf'''. == Speichereinstellung für das Journal ändern == Wie (und ob) das Journal gespeichert wird, wird über den Wert des Schlüssels `Storage` geregelt. Unter Ubuntu ist der Standardwert `auto`. Das bedeutet, dass die persistente Speicherung aktiv ist, sofern des Verzeichnis '''/var/log/journal''' existiert. Dies unter Ubuntu in der Standardinstallation der Fall. Wäre das Verzeichnis nicht vorhanden, würde das Journal temporär bis zum Ausschalten des Rechners unter '''/run/lib/journal''' gespeichert. Möchte man Logdatein nur temporär bis zum Herunterfahren / Neustart des Rechners haben, dann ändert man in der Konfigurationsdatei '''/etc/systemd/journald.conf''' den Wert der Zeile `Storage=auto` auf `Storage=volatile` und entfernt das Kommentarzeichen `#` vor der Zeile. Die Logdaten werden dann im Verzeichnis '''/run/log/journal''' gepspeichert. Falls das Verzeichnis nicht vorhanden ist wird es angelegt. Möchte man keine Journaldatei anlegen und somit das Logging komplett deaktivieren (nicht empfohlen!), muss man für den Schlüssel `Storage` den Wert `none` eintragen. Für eine dauerhafte Größen/Speicherplatzbegrenzung findet man in der Datei '''/etc/systemd/journald.conf''' mehrere Parameter. Will man z.B. den maximalen Speicherplatz begrenzen, entfernt man das `#` vor `SystemMaxUse=` und setzt eine sinnvolle Grenze ein. Der Vorgabewert sind 10% der Größe der Partition, auf der die Logdateien gespeichert werden, jedoch maximal 4 GB - was recht großzügig bemessen ist. Bei Desktoprechnern mit normaler Nutzung kann man den Wert z.B. auf `SystemMaxUSe=250M` (also 250 MB) begrenzen und hat dann in der Regel trotzdem noch Logs von mehreren Monaten. Nutzt man flüchtig Logs über die oben beschriebene Option `Storage=volatile`, legt man über die Option `RuntimeMaxUse=` fest, wie viel RAM die Logs maximal belegen dürfen. Die Vorgabewerte sind identisch mit denen von `SystemMaxUse`. == Zusätzliche Journal-Dateien pro Benutzer == Ist das [#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 `XXXX` die Nutzer-ID (UID) auf dem System ist. Der 1. angelegte Benutzer hat bei Ubuntu die Nummer `1000`, der zweite `1001` usw. 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 == In der Standardkonfiguration von journald unter Ubuntu werden die Logs, welches ins zentrale Journal geschrieben werden, zusätzlich an [http://www.rsyslog.com/ rsyslog] {en} 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 `ForwardToSyslog` auf `no` setzen. Zu beachten ist, dass die Weiterleitung an syslog unabhängig von dem gesetzten Werte für `Storage` ist. D.h. bei `Storage=none` und `ForwardToSyslog=yes` werden trotzdem alle Meldungen im syslog gespeichert. = Journal-Datei auslesen = == journalctl == journalctl ist das Standardwerkzeug zum Auslesen und Anzeige der Journaldatei. Mehr Informationen sind im separaten Artikel [:systemd/journalctl:journalctl] zu finden. == strings und grep == 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 `strings` (enthalten im Paket '''binutils''') und [:grep:] auch ohne journalctl herausfiltern: {{{#!vorlage Befehl strings /pfad/zum/system.journal | grep -i SUCHBEGRIFF }}} (der Pfad ist meist ein Unterordner von /run/log/journal/) = Links = * [https://www.freedesktop.org/software/systemd/man/journald.conf.html Dokumentation] {en} zu journald.conf * [https://wiki.ubuntuusers.de/wiki/tags/systemd Artikelliste] zu systemd hier im Wiki #tag: System, systemd