Назад | Перейти на главную страницу

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

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

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

На самом деле мы не принимаем шаблоны, поэтому не утверждаем этого.

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

journalctl | grep sshd

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

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

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

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

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

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

systemctl | grep sshd

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

sshd.service       loaded active running   OpenSSH Daemon

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

journalctl _SYSTEMD_UNIT=sshd.service

Это называется «фильтрация совпадений». Вот и все.

В случае, если исходный вопрос был написан вместо "как подать заявку grep to journalctl вывод ", то вы можете применить grep в журналы, хранящиеся "пока" с

journalctl | grep ssh

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

journalctl -f | grep ssh

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

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

journalctl -f -u sshd.service

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