web-dev-qa-db-ja.com

systemdのjournalctlパターンをどのように使用しますか

SYSLOG_IDENTIFIERSjournalctlのパターンマッチングを使用しようとしています。例として、sshdというタグの付いた大量のメッセージがあります。

$ journalctl -t sshd | wc -l
987

しかし、パターンマッチングを使用してそれらを見つけようとすると、次のようになります。

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

Journalctlのmanページには、パターンは機能するはずだと書かれていますが、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
24
Mark Grimes

これは docバグ で、manページのタイプミスが更新されたときにクローズされていました。

バグレポートは次の コード内のコメント につながりました。

実際にはパターンを受け入れないため、そのように主張しないでください。

回避策として、質問へのコメントで提案されているようにgrepを使用できる場合があります。このようなもの:

journalctl | grep sshd
18
Tim Penner

元の質問のタイトルは、「systemdのjournalctlパターンの使い方」です。これは、一般的な正規表現フィルタリングではなく、「MATCHES」と呼ばれるjournalctlの非常に特殊な機能を示しています。

"MATCHES"機能は、他のすべての機能と一緒に、その最初に述べられているフレンドリーな man page で詳細に説明されています。

1つ以上の一致引数が渡されると、それに応じて出力がフィルタリングされます。

「一致」機能は、いくつかの可能なフィルタに基づいてログエントリを除外することを目的としています。

元の質問の場合のように、これが私のやり方です(私は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コマンドを使用して、より複雑なパイプを使用できます。

1
EnzoR