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

Я пытаюсь использовать 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 ответов

Решение

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

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

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

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

journalctl | grep sshd

Journalctl -v 239 поддерживает фильтрацию с помощью-g

Со страницы руководства journactl

          -g, --grep=
       Filter output to entries where the MESSAGE= field matches the
       specified regular expression. PERL-compatible regular
       expressions are used, see pcre2pattern(3) for a detailed
       description of the syntax.

       If the pattern is all lowercase, matching is case
       insensitive. Otherwise, matching is case sensitive. This can
       be overridden with the --case-sensitive option, see below.

Оригинальный вопрос озаглавлен "Как вы используете шаблоны 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 команды.

Если вам нужно просто найти термин в журнале, вы можете открыть журналы с помощьюjournalctl -u <foo>, затем нажмите/ключ. Откроется подсказка в нижней части терминала и будет введен поисковый запрос. Journalctl выделит все происшествия.

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

journalctl -f -u sshd.service

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

Другие вопросы по тегам