SYSLOG_IDENTIFIERS
でjournalctl
のパターンマッチングを使用しようとしています。例として、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
元の質問のタイトルは、「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
コマンドを使用して、より複雑なパイプを使用できます。