Jak korzystasz z wzorców dzienników systemd

21

Próbuję użyć journalctldopasowania wzorca SYSLOG_IDENTIFIERS. Na przykład mam mnóstwo wiadomości otagowanych sshd:

$ journalctl -t sshd | wc -l
987

ale jeśli spróbuję użyć dopasowania wzorca, aby je znaleźć:

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

Strona man Journalctl mówi, że wzorce powinny działać, ale nie mogę znaleźć nic innego na temat tego, jak wzorce są używane / definiowane w systemd.

$ 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.

Korzystam z 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
źródło
5
Na podstawie dyskusji na IRC wydaje się, że jest to błąd (lub problemy z dokumentacją). Błąd został zgłoszony .
Mark Grimes,
1
wypróbuj to w czasie rzeczywistym: journalctl -f | grep sshd
nexoma
Możesz dodać wiele -t <identyfikator>, jeśli ci to odpowiada.
sivann

Odpowiedzi:

15

To był błąd dokumentu, który został zamknięty, gdy literówka na manstronie została zaktualizowana.

Raport o błędzie doprowadził do następujących komentarzy w kodzie :

W rzeczywistości nie akceptujemy wzorów, dlatego nie twierdzimy tak.

Aby obejść ten grepproblem , możesz skorzystać z sugestii zawartych w komentarzach do pytania. Coś takiego:

journalctl | grep sshd
Tim Penner
źródło
0

Oryginalne pytanie zatytułowane jest „Jak korzystać z wzorców dzienników systemd ”. Wskazuje to na bardzo specyficzną funkcję dziennika o nazwie „MATCHES”, a nie ogólne filtrowanie wyrażeń regularnych.

Funkcja „MATCHES” jest w pełni szczegółowa wraz ze wszystkimi innymi funkcjami na przyjaznej stronie man, która na samym początku stwierdza:

Jeśli przekazany zostanie jeden lub więcej argumentów dopasowania, dane wyjściowe są odpowiednio filtrowane.

Funkcja „dopasowania” ma na celu odfiltrowanie wpisów w dzienniku na podstawie wielu możliwych filtrów.

W przypadkach takich jak ten z pierwotnego pytania, tak właśnie robię (uruchamiam ArchLinux).

Najpierw musisz znać nazwę usługi, którą Cię interesuje. Zazwyczaj robię to:

systemctl | grep sshd

Rozumiem:

sshd.service       loaded active running   OpenSSH Daemon

Następnie możesz poprosić journalctlo filtrowanie według „nazwy jednostki systemowej” w następujący sposób:

journalctl _SYSTEMD_UNIT=sshd.service

Nazywa się to „filtrowaniem dopasowań”. To by było na tyle.

Jeśli zamiast tego zostało napisane oryginalne pytanie, które oznacza „ jak zastosować grepdo wyniku dziennika ”, możesz albo zastosować grepdo dzienników przechowywanych „jak dotąd” za pomocą

journalctl | grep ssh

lub spójrz na aktualnie przychodzące wpisy dziennika za pomocą

journalctl -f | grep ssh

i naciśnij CTRL-C, aby zatrzymać przepływ. Oczywiście można używać bardziej złożonych rur z bardziej regularnymi wzorami o drobniejszych ziarnach lub wieloma greppoleceniami.

EnzoR
źródło
Dzięki za odpowiedź, ale _SYTEMD_UNIT nie akceptuje wzorców. Jak wspomniano w moim komentarzu i odpowiedzi @ Tima, był to błąd w dokumentacji.
Mark Grimes
@ MarkGrimes, Przynajmniej dla mnie (systemd 239) to działa. Zawsze sprawdzam, co mówię, zanim je spisam. Działa jak udokumentowane.
EnzoR
Pytanie dotyczy na przykład używania wzorcówssh* . Doktorzy Journalctl stwierdzili, że było to możliwe jednocześnie. Dokumenty były niepoprawne i zostały zaktualizowane.
Mark Grimes
@MarkGrimes Pytanie dotyczy wzorców dziennika systemd, a nie wzorca znaków . Proszę zobaczyć moją zaktualizowaną odpowiedź. I działa pod ArchLinux dokładnie tak, jak udokumentowano.
EnzoR
-2

Możesz zdefiniować plik jednostki podczas uruchamiania journalctl.

journalctl -f -u sshd.service

Pokażę tylko dziennik sshd

Kwun Yeung
źródło
Ta odpowiedź nie dotyczy pytania. Użytkownik prosi o użycie wzorców w filtrze.
Merlijn Sebrechts