QJournalctl fasst die über den Terminalbefehl
Nach über 10 Jahren Entwicklungszeit ist Systemd unbestreitbar in Linux angekommen. Der System- und Dienstemanager findet zwar immer noch nicht die ungeteilte Zustimmung der Community, aber die Diskussionen um das einst sehr präsente Streitthema haben sich beruhigt. Egal, was man von Systemd hält: Objektiv betrachtet hat es einiges verbessert.
Dazu gehört in jedem Fall das Logging, also das Protokollieren der Informationen, Warnungen und Fehler, die das System während des Boot-Vorgangs und im Betrieb ausgibt. In Systemd heißt die dafür zuständige Komponente Journal. Deren Funktionsweise und Handhabung im Terminal und in der grafischen Oberfläche waren bereits in LinuxUser 04/2017 [1] und 11/2019 [2] Thema.
Bessere Logs
Systemd-journald liefert wesentlich mehr Daten als die über Jahrzehnte genutzten Log-Dateien /var/log/messages oder /var/log/syslog. An vielen Stellen ergänzt es Metadaten, auf deren Basis sich die Ergebnisse der Suche im Journal wesentlich verfeinern lassen. Zudem setzt Systemd-journald früher im Boot-Vorgang an.
Daraus resultiert ein höheres Datenaufkommen, das sich mit herkömmlichen Textdateien schwer handhaben ließe. Deshalb speichert Systemd die Informationen in Binärdateien ab, die man mit dem Befehl journalctl ausliest. Verschiedene Programme, Dienste und der Kernel schreiben ihre Protokolleinträge in das Journal. Es vereint dabei alle diese Logs und bietet vielfältige Möglichkeiten, eine gesuchte Information punktgenau zu lokalisieren.
GUI für alle
Das eingangs erwähnte GUI-Tool war als YaST-Modul ausgelegt und somit auf OpenSuse beschränkt. Damit auch Nutzer anderer Distributionen bei der Nutzung des Journals nicht auf das Terminal beschränkt bleiben, stellen wir heute mit QJournalctl [3] eine weitere grafische Oberfläche als Erweiterung von Journalctl vor. Sie steht für Linux, MacOS und Windows bereit.
In Distributionen, die auf Arch Linux aufsetzen, installieren Sie die Anwendung aktuell in Version 0.6.3 per sudo pacman -S qjournalctl; für Gentoo gibt es eine Ebuild-Datei. Für Distributionen mit einem Paketmanagement auf der Basis von DEB und RPM müssen Sie die Anwendung aus den Quellen bauen. Der Entwickler stellt zwar ein Debian-Paket bereit [4], dem aber eine Abhängigkeit – die Libssh 0.8.7 – fehlt, die weder Debian noch Ubuntu und deren Derivate in der benötigten Version bereitstellen. Sie müssen also in jedem Fall die Libssh selbst bauen (Listing 1), anschließend können Sie das DEB-Paket installieren. Wenn Sie aber schon einmal im Terminal sind, ergibt es Sinn, auch QJournalctl gleich selbst aus dem Quellcode zu übersetzen (Listing 2).
Listing 1
Libssh für Debian
$ sudo apt install qtbase5-dev cmake libssl-dev pkg-config git $ wget https://www.libssh.org/files/0.9/libssh-0.9.5.tar.xz $ tar xf libssh-0.9.5.tar.xz $ cd libssh-0.9.5 $ mkdir build $ cd build $ cmake $ sudo make install
Listing 2
Aus den Quellen bauen
$ mkdir -p QJournalctl $ cd QJournalctl $ git clone https://github.com/pentix/QJournalctl.git $ cd QJournalctl $ ./autogensh $ make -j$(nproc) $ sudo make install
Unter Fedora 34 und OpenSuse Leap 15.2 steht Libssh in der passenden Version zur Verfügung. Hier müssen Sie nur QJournalctl selbst bauen. Die Abhängigkeiten lassen sich dabei relativ schnell finden und entsprechend Listing 3 einspielen. Darauf folgt das Kompilieren, das sich ebenfalls schnell erledigen lässt.
Listing 3
Unter Fedora oder OpenSuse
$ sudo dnf install libssh-devel qt5-qtbase-devel git $ mkdir -p QJournalctl $ cd QJournalctl $ git clone https://github.com/pentix/QJournalctl.git $ cd QJournalctl $ ./autogensh $ /usr/bin/qmake-qt5 $ make -j$ (nproc) $ sudo make install
Danach sollten Sie in der Lage sein, QJournalctl sowohl unter Distributionen mit DEB- als auch RPM-Paketmanagement zu starten. QJournalctl bildet nicht alle Möglichkeiten des Kommandozeilenprogramms Journalctl ab, setzt aber die grundlegenden Optionen um, die man im Alltag benötigt.
Hinzu kommt eine Funktion, die Journalctl so nicht vorsieht: das Lesen und Speichern des Journals entfernter Maschinen. Dafür bietet Systemd die zusätzliche Komponente Systemd-journal-remote [5], mit der sich auch die Journale eines ganzen Geräteparks zentralisiert auf einem Server sammeln lassen.
Wichtige Funktionen
Aber zunächst zu den alltäglichen Funktionen und deren Verwendung. Nachdem Sie QJournalctl geöffnet haben, sehen Sie zunächst viel Freiraum und kein Journal. Auch das Menü am oberen Rand ist eher spärlich bestückt. Unterhalb davon befinden sich drei Reiter, deren erster wohl am häufigsten zum Einsatz kommt, denn er öffnet das Boot-Log der derzeitigen Sitzung.
Klicken Sie auf diesen Reiter, öffnet sich ein neues Fenster mit eben diesem Log seit dem letzten Boot-Vorgang. Zunächst sehen Sie auch darin hoffentlich maximal ein paar Zeilen, im Idealfall jedoch nichts. Lassen Sie den Blick auf die Leiste unter Priority schweifen, verstehen Sie auch warum (Abbildung 1).

Abbildung 1: Der häufigste Anwendungsfall ist die Ansicht des Log für den aktuellen Boot-Vorgang, also der derzeitigen aktiven Sitzung. Dabei arbeitet QJournalctl immer im Realtime-Modus und zeigt zur Laufzeit hereinkommende Protokollnachrichten direkt an.
Voreingestellt steht die Priorität der standardmäßigen Syslog-Level auf critical**(2), Sie sehen also nur die vom System als kritisch erachteten Meldungen. Ziehen Sie den Schieber nach rechts, sehen Sie zunehmend mehr Meldungen, bis Sie bei debug**(7) ankommen.
Im Terminal würden Sie diese Priorität mit journalctl -p7 aufrufen, wobei info**(6) üblicherweise völlig ausreicht. Zwischen Level 2 und 6 stieg die Anzahl der angezeigten Zeilen bei unserem Test auf einem Produktivsystem von weniger als zehn auf Tausende von Zeilen seit dem letzten Boot-Vorgang (der vier Tage zurücklag).
Insgesamt waren auf dem Testsystem sechs Boot-Vorgänge aus vier Monaten gespeichert, die rund 4 GByte Speicherplatz belegten. Bei dieser Größe begrenzt das System auch dann, wenn Sie selbst keine maximale Größe festgelegt haben – dazu später mehr.
Filtern und exportieren
QJournalctl bietet noch mehr Filtermöglichkeiten: Ganz oben unter Date**/**Time legen Sie fest, ab wann und gegebenenfalls bis wann Sie das Log angezeigt bekommen möchten. Können Sie einen zu untersuchenden Vorfall auf einen Zeitraum eingrenzen, erweist sich das als sehr hilfreich. Wissen Sie zudem noch genau, wonach Sie suchen, können Sie einen vermeintlichen Fehler über die Filterfunktion weiter eingrenzen. Möchten Sie also nur Zeilen zum Kernel oder etwa zu Nvidia sehen, tragen Sie den Befehl in die Filterzeile ein und drücken den Button mit der Aufschrift Filter.
Der mittlere Reiter im Hauptfenster listet alle vorhandenen Journaleinträge früherer Boot-Vorgänge auf, deren Log Sie dann durch Anklicken eines Eintrags auswählen. Alle gespeicherten Logs auf einmal erhalten Sie, indem Sie im Hauptmenü unter dem ersten Reiter den Eintrag Show the complete journal auswählen.
Auf einem PC mit Ryzen-7-CPU dauerte die Anzeige aller gespeicherter Logs in ungefilterter Form rund eine Minute und förderte über sechs Millionen Zeilen zutage. Die Gesamtgröße fragen Sie im Hauptmenü unter dem Menüpunkt Journalctl | Size of the journal on the disk ab (Abbildung 2).

Abbildung 2: Der mittlere Tab listet alle gespeicherten Logs auf. Nach der Auswahl des gewünschten Logs können Sie die Anzeigerichtung ändern und dann über den rechten Tab die Anzeige starten.
Möchten Sie ein Log anderweitig weiterverarbeiten oder einfach sichern, exportieren Sie es über den Schalter Export the filtered journal an eine beliebige Stelle. Benötigen Sie lediglich einen Auszug des angezeigten Logs, markieren Sie diesen und speichern ihn über den erst durch das Markieren sichtbaren Schalter Export Selection.
In die Ferne schweifen
Falls Sie sich eingangs gewundert haben, wozu QJournalctl die Bibliothek Libssh benötigt, so lautet die Erklärung, dass QJournalctl auch Logs von entfernten Rechnern per SSH anzeigen kann. Der Menüpunkt Remote bietet dazu Befehle für Verbindungen per SSH sowie das Speichern der Zugangsinformationen, falls Sie dieselben Rechner des Öfteren abfragen möchten. Dabei unterstützt QJournalctl sowohl einen passwortgestützten Zugang als auch das Verwenden einer Schlüsseldatei (Abbildung 3).

Abbildung 3: Ein besonderes Schmankerl ist der einfache Zugriff auf entfernte Rechner per SSH. Sie können die Zugangsdaten der entfernten Rechner speichern und sich später schnell wieder auf die Maschinen verbinden.
Das Hauptfenster bietet unter der Leiste mit den drei Reitern die Optionen Follow the journal in realtime und Reverse output (latest message on top). Erstere funktioniert auf den ersten Blick etwas verwirrend: Das Kästchen vor Follow the journal in realtime bleibt immer grau. Betrachten Sie das Log des derzeitig aktiven Boot-Vorgangs, schaltet sich die Live-Funktion automatisch hinzu, was auch der Zusatz (realtime following enabled) am Ende der Dachzeile signalisiert. Betrachten Sie das Log eines älteren Boot-Vorgangs, ergibt die Live-Funktion selbstverständlich keinen Sinn. Dafür lässt sich jedoch der Haken bei Reverse output, also die Anzeige in umgekehrter Reihenfolge, aktivieren.
Was fehlt?
Zu den Dingen, die QJournalctl bewusst nicht anbietet, zählen die Funktionen zum Ausführen von Administrationsaufgaben, die Journalctl im Terminal übernimmt. Die Gesamtgröße des Journals sowie der einzelnen Dateien entnimmt Systemd der Konfigurationsdatei /etc/systemd/journald.conf. Optional können Sie das Journal aber auch im laufenden Betrieb kürzen; der Befehl aus der ersten Zeile von Listing 4 stutzt es zum Beispiel auf 100 MByte.
Alternativ verwerfen Sie etwa alle Meldungen, die älter als ein Monat sind (Zeile 2). Die einzige Statusabfrage, die QJournalctl in diesem Zusammenhang erlaubt, ist die nach der Gesamtgröße des Journals. Den allgemeinen Gesundheitszustand des Dienstes müssen Sie weiterhin im Terminal abfragen (Zeile 3); mit journalctl --verify prüfen Sie die Integrität der einzelnen Journals.
Listing 4
Handarbeit
$ sudo journalctl --vacuum-size=100M $ sudo journalctl --vacuum-time=1month $ systemctl status systemd-journald
Fazit und Ausblick
QJournalctl ist ein praktisches Werkzeug für alle, die das Journal nicht regelmäßig nutzen und somit die nötigen Befehle für das Terminal nicht immer gleich parat haben. Insbesondere vereinfacht es die durch Datum und Zeit eingegrenzte Suche. Auch die Anzeige von Logdateien auf entfernten Rechnern und deren Auswahl aus einer gespeicherten Liste erweist sich als nützlich.
Das Projekt wird auf GitHub gepflegt, wo sich auch Anweisungen zum Kompilieren unter MacOS und Windows finden. Der Entwickler verriet uns, dass ein größeres Update ansteht, das unter anderem die aus der Terminalausgabe gewohnten farbig eingefärbten Zeilen bieten wird. Was sonst noch ansteht, lässt sich in einem Pull-Request auf GitHub [6] nachlesen. (cla)
Infos
-
Journalctl: Ferdinand Thommes, “Gut gesiebt”, LU 04/2017, S. 70, https://www.linux-community.de/38814
-
OpenSuse-Tipps – Journalctl: Peter Kreußel, “Systemd-Log auslesen”, LU 11/2019, S. 68, https://www.linux-community.de/43587
-
QJournalctl: https://github.com/pentix/QJournalctl/tree/v0.6.3
-
DEB-Paket: https://github.com/pentix/QJournalctl/releases/tag/v0.6.3
-
Pull-Request: https://github.com/pentix/qjournalctl/pull/66





