Normalerweise liegt der Fokus aber eher auf zeitnahen oder gefilterten Ausgaben. So führt journalctl -b nur die Protokolle seit dem letzten Booten auf. Interessiert Sie dagegen der vorletzte Start, so kommt journalctl -b -1 zum Einsatz. Alle im Journal gespeicherten Boot-Vorgänge zeigt der Befehl journalctl --list-boots (Listing 4). Den Wert aus der ersten Spalte der Ausgabe nutzen Sie bei journalctl -b -Zahl anstelle des Platzhalters.
Listing 4
$ sudo journalctl --list-boots 0 9e814cbee30a47ea85a58a5674829a95 Mi 2017-02-08 14:09:34 CET-Fr 2017-03-10 19:03:25 CET
Nach Zeit gefiltert
Bei Bedarf geht das alles noch viel genauer: Bei Rechnern oder Servern mit langen Laufzeiten zwischen den Starts greift eine Auswahl nach Boot-Vorgängen oft zu kurz. Hier bietet sich eher ein Zeitfenster in Kombination mit anderen Optionen an. Das Zeitfenster grenzen Sie mit den Optionen --since und --until bis auf die Sekunde genau ein.
In der Praxis sieht das etwa so aus wie in der ersten Zeile von Listing 5 oder – bei der Kombination beider Optionen – so wie in der zweiten Zeile. Es geht aber auch allgemeiner, wie die beiden letzten Zeilen demonstrieren. Dabei müssen Sie Datum und Zeit grundsätzlich in der Form YYYY-MM-DD HH:MM:SS angeben.
Listing 5
$ sudo journalctl --since "2017-03-10 12:00:23" $ sudo journalctl --since "2017-03-10 12:00:23" --until "2017-03-10 19:00:23" $ sudo journalctl --since yesterday $ sudo journalctl --since 12:00 --until "now"
Filtern nach Komponenten
Es gibt weitere Filter, die nach bestimmten Ereignissen suchen. So besteht die Möglichkeit, Meldungen zu einzelnen Komponenten aufzuspüren. Macht etwa der Webserver Probleme, dann geben Sie mit journalctl -u apache2.service die betreffenden Ereignisse aus (Abbildung 3).
Haben Sie einen Verdacht, wo der Fehler im Zusammenhang mit dem Webserver stecken könne, verfeinern Sie den Filter, indem Sie etwa das Ihnen verdächtige PHP-Modul mit in die Abfrage packen (Listing 6, Zeile 1). Um hier spezifischer einzelne Prozesse, User oder Gruppen zu untersuchen, filtern Sie nach Prozess-, User- oder Gruppen-ID.
Listing 6
$ sudo journalctl -u apache2.service -u php-fpm.service --since yesterday $ pidof apache2 $ ps aux | grep apache2 $ sudo journalctl _PID=PID $ id -u www-data $ sudo journalctl _UID=UID --since today
Dazu suchen Sie zunächst die entsprechende ID. Das gelingt für Prozesse beispielsweise mit Pidof oder ausführlicher mit Ps (Zeile 2 und 3). Den entsprechenden Prozess fragen Sie dann über die Option _PID ab (Zeile 4). Die ID des Users für den Webserver finden Sie unter Debian mit id -u www-data, etwa, um dann entsprechende Ereignisse seit Mitternacht zu ermitteln (Zeile 5 und 6). Alle Filter dieser umfangreichen Gruppe lassen Sie sich mit man systemd.journal-fields anzeigen.
Ebenso besteht die Möglichkeit, nach Meldungen über Anwendungen zu suchen, die sich nicht zu benehmen wissen. Dazu geben Sie lediglich den Pfad mit an. Bei Anwendungen, die Sie über das Paketmanagement installiert haben, lautet der Befehl etwa journalctl /usr/bin/amarok. Ansonsten hilft which Anwendung beim Ermitteln des Pfads für das ausführbare Element der Software.
Kernel-Log inbegriffen
Wollten Sie früher den Puffer für Nachrichten des Kernels auslesen, so kam dabei vermutlich der Befehl dmesg zum Einsatz. Das Journal zeigt diese Meldungen für die derzeitige Sitzung mit journalctl -k an. Informationen zu früheren Sitzungen holen Sie mit journalctl -k -b -n hervor.
Der Parameter -p kam bereits in einem anderen Beispiel zum Einsatz. Er bestimmt die Priorität der angezeigten Meldungen. So zeigt der oben genutzte Befehl journalctl -p err Nachrichten mit der Priorität Error sowie den darüberliegenden Prioritäten Critical, Alert und Emergency an. Sie verwenden diese entweder über den Namen oder über den zugeordneten Wert. Die Level haben die Entwickler von Syslog übernommen, Sie finden eine Erläuterung etwa in Wikipedia [5].
Auswertungsmöglichkeiten
In Zeiten vor Systemd mussten Sie, wenn das System etwa einen angesteckten USB-Stick nicht erkannte oder einhängte, die Ausgabe von Dmesg mit dem Kommando tail -n 10 untersuchen, um die letzten zehn Zeilen der Ausgabe zu sehen. Journalctl bringt eine solche Funktion bereits eingebaut mit: Hier genügt der Aufruf journalctl -n Anzahl zur Ausgabe der letzten Anzahl Zeilen.






