web-dev-qa-db-ja.com

プロセス名でjournalctl出力をフィルタリングする方法は?

プロセスがsystemdにログを記録すると、そのプロセス名が記録され、journalctl出力に識別子として表示されます。

$ systemd-cat echo "test"
$ journalctl -f
-- Logs begin at Sat 2018-02-24 12:13:24 CET. --
...
Jul 25 13:52:26 mycomputer echo[25098]: test

ただし、その名前でのフィルタリングは機能していないようです。

$ journalctl -f -t echo
-- Logs begin at Sat 2018-02-24 12:13:24 CET. --
$ journalctl -f -u echo
-- Logs begin at Sat 2018-02-24 12:13:24 CET. --

識別子を手動で指定すると、プロセス名の代わりに識別子が表示され、フィルタリングが機能します。

$ systemd-cat -t myapp echo "test"
$ journalctl -f
-- Logs begin at Sat 2018-02-24 12:13:24 CET. --
Jul 25 13:56:08 mycomputer myapp[25213]: test
$ journalctl -f -t myapp
-- Logs begin at Sat 2018-02-24 12:13:24 CET. --
Jul 25 13:56:08 mycomputer myapp[25213]: test

プロセス名のjournalctl出力をどのようにフィルタリングできますか?

4

これを理解しました。 <FIELD_NAME>=<VALUE>を指定すると、任意の systemdジャーナルフィールド をフィルターとして使用できます。

この質問には次のフィールドが役立ちます。

_COMM=, _EXE=, _CMDLINE=

ジャーナルエントリの起点となるプロセスの名前、実行可能パス、およびコマンドライン。

したがって、コマンド名でフィルタリングするには、journalctl -f _COMM=<command-name>を使用します

$ journalctl -f _COMM=echo
-- Logs begin at Sat 2018-02-24 12:13:24 CET. --
Jul 25 13:52:26 mycomputer echo[25098]: test
Jul 25 13:56:08 mycomputer myapp[25213]: test
3