it-swarm.com.de

Wie verwenden Sie die journalctl-Muster von systemd?

Ich versuche, den Mustervergleich von journalctl für SYSLOG_IDENTIFIERS. Als Beispiel habe ich eine Menge Nachrichten mit dem Tag sshd:

$ journalctl -t sshd | wc -l
987

aber wenn ich versuche, Mustervergleich zu verwenden, um sie 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
24
Mark Grimes

Dies war ein doc bug , der geschlossen wurde, als der Tippfehler auf der Seite man aktualisiert wurde.

Der Fehlerbericht führte zu folgendem Kommentare im Code :

Wir akzeptieren keine Muster und behaupten dies daher nicht.

Um dieses Problem zu umgehen, können Sie möglicherweise grep verwenden, wie in den Kommentaren zu Ihrer Frage vorgeschlagen. Etwas wie das:

journalctl | grep sshd
18
Tim Penner

Die ursprüngliche Frage lautet "Wie verwendet man die journalctl-Muster von systemd "? Dies weist eher auf eine sehr spezifische Funktion des Journals namens "MATCHES" als auf eine generische Filterung regulärer Ausdrücke hin.

Die "MATCHES" -Funktion ist zusammen mit allen anderen Funktionen in ihrer freundlichen Manpage , die ganz am Anfang steht, vollständig detailliert:

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

Die Funktion "Übereinstimmungen" soll die Protokolleinträge basierend auf einer Reihe möglicher Filter herausfiltern.

In Fällen wie dem in der ursprünglichen Frage geht das so (ich führe auch ArchLinux aus).

Zunächst müssen Sie den Dienstnamen 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 journalctl bitten, nach dem "systemd unit name" wie folgt zu filtern:

journalctl _SYSTEMD_UNIT=sshd.service

Es heißt "Filterung der Übereinstimmungen". Das wäre es.

Wenn die ursprüngliche Frage stattdessen so geschrieben wurde, dass sie " wie man grep auf journalctl Ausgabe anwendet", können Sie entweder grep auf die gespeicherten Protokolle anwenden ". bisher "mit

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 feinkörnigeren regulären Mustern oder mehreren grep - Befehlen verwenden.

1
EnzoR