Как вы используете шаблоны журнала systemd

21

Я пытаюсь использовать journalctlсопоставление с образцом SYSLOG_IDENTIFIERS. Например, у меня есть тонна сообщений с тегами sshd:

$ journalctl -t sshd | wc -l
987

но если я попытаюсь использовать сопоставление с образцом, чтобы найти их:

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

Справочная страница journalctl говорит, что шаблоны должны работать, но я не могу найти ничего другого о том, как шаблоны используются / определяются в 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.

Я использую ArchLinux:

$ journalctl --version
systemd 225
+PAM -AUDIT -SELINUX -IMA -APPARMOR +SMACK -SYSVINIT +UTMP +LIBCRYPTSETUP
+GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID -ELFUTILS +KMOD +IDN
Марк Граймс
источник
5
Основываясь на обсуждениях IRC, кажется, что это ошибка (или проблемы с документацией). Ошибка была подана .
Марк Граймс
1
попробуйте это в реальном времени: journalctl -f | grep sshd
nexoma
Вы можете добавить несколько -t <идентификатор>, если это вам подходит.
Сиванн

Ответы:

15

Это была ошибка с документом, которая была закрыта при manобновлении опечатки на странице.

Сообщение об ошибке привело к следующим комментариям в коде :

Мы на самом деле не принимаем шаблоны, поэтому не претендуем на это.

В качестве обходного пути вы можете использовать, grepкак это предлагается в комментариях к вашему вопросу. Что-то вроде этого:

journalctl | grep sshd
Тим Пеннер
источник
0

Оригинальный вопрос озаглавлен «Как вы используете шаблоны systemd's journalctl ». Это указывает на очень специфическую особенность journalctl, называемую «MATCHES», а не на общую фильтрацию регулярных выражений.

Функция «МАТЧИ» подробно описана вместе со всеми остальными функциями на его дружественной справочной странице, которая в самом начале гласит:

Если передан один или несколько аргументов соответствия, выходные данные фильтруются соответствующим образом.

Функция «совпадения» предназначена для фильтрации записей журнала на основе ряда возможных фильтров.

Для случаев, подобных описанному в оригинальном вопросе, я так и делаю (я тоже запускаю ArchLinux).

Во-первых, вам нужно знать название интересующей вас услуги. Обычно я делаю это:

systemctl | grep sshd

Я получаю это:

sshd.service       loaded active running   OpenSSH Daemon

Затем вы можете попросить journalctlвыполнить фильтрацию по «имени модуля systemd» следующим образом:

journalctl _SYSTEMD_UNIT=sshd.service

Это называется «фильтрация матчей». Это было бы это.

Если исходный вопрос был написан вместо того, чтобы означать « как применить grepк выходу journalctl », то вы можете применить grepк журналам, сохраненным «до сих пор», с помощью

journalctl | grep ssh

или посмотрите на текущие входящие записи журнала с

journalctl -f | grep ssh

и нажмите CTRL-C, чтобы остановить поток. Конечно, вы можете использовать более сложные каналы с более мелкими регулярными шаблонами или несколькими grepкомандами.

Энвезор
источник
Спасибо за ответ, но _SYTEMD_UNIT не принимает шаблоны. Как упоминалось в моем комментарии и ответе @Tim, это была ошибка в документации.
Марк Граймс
@MarkGrimes, по крайней мере для меня (systemd 239) это работает. Я всегда проверяю, что я говорю, прежде чем записывать это. Это работает как документировано.
EnzoR
Речь идет , например, об использовании шаблоновssh* . В журнале docs говорилось, что это было возможно в одно время. Документы были неверны и были обновлены.
Марк Граймс
@MarkGrimes Вопрос о шаблонах journaldl systemd, а не о шаблонах символов . Пожалуйста, смотрите мой обновленный ответ. И он работает под ArchLinux именно так, как задокументировано.
EnzoR
-2

Вы можете определить файл модуля при запуске journalctl.

journalctl -f -u sshd.service

Я покажу только журнал sshd

Квун Йунг
источник
Этот ответ не касается вопроса. Пользователь просит использовать шаблоны в фильтре.
Мерлин Себрехтс