Как вы используете шаблоны журнала 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