Wie benutzt man die journalctl-Muster von systemd?

21

Ich versuche, journalctlden Mustervergleich zu verwenden SYSLOG_IDENTIFIERS. Als Beispiel habe ich eine Menge Nachrichten markiert sshd:

$ journalctl -t sshd | wc -l
987

aber wenn ich versuche, sie mithilfe der Mustererkennung zu finden:

$ journalctl -t 'ssh*'
-- No Entries --
$ journalctl -t 'ssh.*'
-- No Entries --

Die journalctl-Manpage sagt, dass Muster funktionieren sollten, aber ich kann nichts anderes darüber finden, wie Muster in systemd verwendet / definiert werden.

$ man journalctl
....
-t, --identifier=SYSLOG_IDENTIFIER|PATTERN
       Show messages for the specified syslog identifier SYSLOG_IDENTIFIER,
       or for any of the messages with a "SYSLOG_IDENTIFIER" matched by PATTERN.

Ich verwende ArchLinux:

$ journalctl --version
systemd 225
+PAM -AUDIT -SELINUX -IMA -APPARMOR +SMACK -SYSVINIT +UTMP +LIBCRYPTSETUP
+GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID -ELFUTILS +KMOD +IDN
Mark Grimes
quelle
5
Aufgrund von Diskussionen im IRC scheint dies ein Fehler (oder ein Problem mit der Dokumentation) zu sein. Ein Fehler wurde gemeldet .
Mark Grimes
1
Versuchen Sie dies in Echtzeit: journalctl -f | grep sshd
nexoma
Sie können tatsächlich mehrere -t <Bezeichner> hinzufügen, wenn dies für Sie geeignet ist.
25.

Antworten:

15

Dies war ein Dokumentationsfehler , der geschlossen wurde, als der Tippfehler auf der manSeite aktualisiert wurde.

Der Fehlerbericht führte zu folgenden Kommentaren im Code :

Wir akzeptieren keine Muster, behaupten es also nicht.

Als Problemumgehung können Sie möglicherweise die grepin den Kommentaren zu Ihrer Frage empfohlenen Optionen verwenden. Etwas wie das:

journalctl | grep sshd
Tim Penner
quelle
0

Die ursprünglichen Fragentitel "Wie verwenden Sie die journalctl-Muster von systemd ? " Dies weist auf eine sehr spezielle Funktion des Journals mit dem Namen "MATCHES" und nicht auf eine generische Filterung nach regulären Ausdrücken hin.

Das „matches“ Feature ist vollständig detailliert zusammen mit allen anderen Funktionen auf seiner freundlichen Mann Seite , die an ihrem Anfang heißt es :

Wenn ein oder mehrere Übereinstimmungsargumente übergeben werden, wird die Ausgabe entsprechend gefiltert.

Die Funktion "Übereinstimmungen" dient dazu, die Protokolleinträge basierend auf einer Reihe möglicher Filter herauszufiltern.

In Fällen wie dem in der ursprünglichen Frage ist dies meine Vorgehensweise (ich führe auch ArchLinux aus).

Zuerst müssen Sie den Namen des Dienstes kennen, an dem Sie interessiert sind. Normalerweise mache ich Folgendes:

systemctl | grep sshd

Ich verstehe das:

sshd.service       loaded active running   OpenSSH Daemon

Dann können Sie journalctlnach dem "systemd unit name" filtern:

journalctl _SYSTEMD_UNIT=sshd.service

Es heißt "die Übereinstimmungen filtern". Das wäre es.

Wenn die ursprüngliche Frage stattdessen so geschrieben wurde, dass sie " wie auf die grepjournalctl- Ausgabe angewendet werden soll", können Sie sie entweder grepauf die "bisher" gespeicherten Protokolle mit anwenden

journalctl | grep ssh

oder schauen Sie sich die aktuell eingehenden Protokolleinträge mit an

journalctl -f | grep ssh

und drücken Sie STRG-C, um den Fluss zu stoppen. Natürlich können Sie komplexere Pipes mit feineren regelmäßigen Mustern oder mehreren grepBefehlen verwenden.

EnzoR
quelle
Vielen Dank für die Antwort, aber _SYTEMD_UNIT akzeptiert keine Muster. Wie in meinem Kommentar und in der Antwort von @ Tim erwähnt, war dies ein Fehler in den Dokumenten.
Mark Grimes
@ MarkGrimes, zumindest für mich (systemd 239) funktioniert es. Ich teste immer, was ich sage, bevor ich es niederschreibe. Es funktioniert wie dokumentiert.
EnzoR
Es geht zum Beispiel um die Verwendung von Musternssh* . Die journalctl docs gaben an, dass dies auf einmal möglich war. Die Dokumente waren falsch und wurden aktualisiert.
Mark Grimes
@MarkGrimes Die Frage betrifft die journalctl-Muster von systemd, nicht irgendwelche Zeichenmuster . Bitte sehen Sie meine aktualisierte Antwort. Und es funktioniert unter ArchLinux genau so, wie es dokumentiert ist.
EnzoR
-2

Sie können die Unit-Datei beim Ausführen definieren journalctl.

journalctl -f -u sshd.service

Ich zeige nur das Tagebuch von sshd

Kwun Yeung
quelle
Diese Antwort geht nicht auf die Frage ein. Der Benutzer fragt nach Mustern in einem Filter.
Merlijn Sebrechts