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

Как заставить journalctl распознавать пользовательские поля?

Journalctl's руководство говорит:

Новые поля могут быть свободно определены приложениями, но некоторые поля имеют особое значение.

Однако я не вижу способа представить собственное поле, которое 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

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