Systemd

如何讓 journalctl 辨識使用者定義的欄位?

  • June 9, 2019

Journalctl的手冊說:

新欄位可以由應用程序自由定義,但少數欄位具有特殊含義。

但是,我沒有看到一種方法來實際介紹 journalctl 可以辨識並允許過濾的我自己的欄位。

我嘗試了以下多種變體均無濟於事:

echo 'FOO=12' | systemd-cat -t TestFields -p warning

journalctl 沒有看到我要添加的 FOO 欄位:

# journalctl -f -t TestFields
-- Logs begin at Wed 2018-11-28 16:08:31 UTC. --
Nov 28 16:29:10 2f79ab2701c9 TestFields[105]: FOO=12

json格式:

# journalctl -f -t TestFields -o json-pretty
{
   "__CURSOR" : "s=95d756f74cc14c25b5d6a6c86e2d3dd4;i=31b;b=c2286470c74849db84c4a2b458276561;m=4686eb5305;t=57bbc10de8aab;x=8ea14ded83dc4684",
   "__REALTIME_TIMESTAMP" : "1543422550641323",
   "__MONOTONIC_TIMESTAMP" : "302911279877",
   "_BOOT_ID" : "c2286470c74849db84c4a2b458276561",
   "_UID" : "0",
   "_GID" : "0",
   "_MACHINE_ID" : "70406ad7f5774a17a5f1cbbaf5f4455e",
   "_HOSTNAME" : "2f79ab2701c9",
   "PRIORITY" : "4",
   "_CAP_EFFECTIVE" : "3fffffffff",
   "_SYSTEMD_CGROUP" : "0",
   "_TRANSPORT" : "stdout",
   "_COMM" : "cat",
   "_EXE" : "/usr/bin/cat",
   "_CMDLINE" : "/bin/cat",
   "_STREAM_ID" : "7bf67dfa7ff846429fea8092f40a34f7",
   "SYSLOG_IDENTIFIER" : "TestFields",
   "MESSAGE" : "FOO=12",
   "_PID" : "105"
}

最後過濾沒有結果:

# journalctl FOO=12 -t TestFields
-- No entries --

為了比較:

# journalctl _PID=105 -t TestFields
-- Logs begin at Wed 2018-11-28 16:08:31 UTC, end at Wed 2018-11-28 16:29:10 UTC. --
Nov 28 16:29:10 2f79ab2701c9 TestFields[105]: FOO=12

如果有人正在探索這條道路,答案是否定的,你不能那樣做。考慮使用結構化日誌,您可以在其中添加所需的任何欄位。

引用自:https://serverfault.com/questions/942019