0

我有一个有趣的 TODO,我想看看。我journalctl用来抓取系统日志条目并以 JSON 格式输出。journalctl输出为由换行符分隔的 JSON 对象。

这是从 journalctl 输出的 JSON 对象的示例:

{ "__CURSOR" : "s=bd3afe956aec45d89cf3939e839c3647;i=3e084;b=6dd8a3060bdb448d848f4694339c6e94;m=5d0fd53a6;t=5c797ae76d38f;x=6cdb742ba83df8f5", "__REALTIME_TIMES
TAMP" : "1626829164613612", "__MONOTONIC_TIMESTAMP" : "24980054950", "_BOOT_ID" : "6dd8a3030bdb446d858f4694337c6e94", "PRIORITY" : "6", "SYSLOG_FACILITY" : "3",
"CODE_FILE" : "../src/core/job.c", "CODE_LINE" : "845", "CODE_FUNC" : 
"job_log_status_message", "SYSLOG_IDENTIFIER" : "systemd", "JOB_TYPE" : "start", "JOB_RES
ULT" : "done", "MESSAGE_ID" : "39f53479d3a045ac8e11786248231fbf", "_TRANSPORT" : "journal", "_PID" : "11282", "_UID" : "1162", "_GID" : "1162", "_COMM" : "syste
md", "_EXE" : "/lib/systemd/systemd", "_CMDLINE" : "/lib/systemd/systemd --user", "_CAP_EFFECTIVE" : "0", "_SELINUX_CONTEXT" : "unconfined\n", "_AUDIT_SESSION"
: "974", "_AUDIT_LOGINUID" : "1162", "_SYSTEMD_CGROUP" : "/user.slice/user-1162.slice/user@1162.service/init.scope", "_SYSTEMD_OWNER_UID" : "1162", "_SYSTEMD_UN
IT" : "user@1162.service", "_SYSTEMD_USER_UNIT" : "init.scope", "_SYSTEMD_SLICE" : "user-1162.slice", "_SYSTEMD_USER_SLICE" : "-.slice", "_SYSTEMD_INVOCATION_ID
" : "1f72568e79c34f14a525f98ce6a151c2", "_MACHINE_ID" : "32c9faf3dd90422881ce03690ebf0015", "_HOSTNAME" : "ip-192-168-22-27", "MESSAGE" : "Listening on port.", "USER_UNIT" : "dirmngr.socket", "USER_INVOCATION_ID" : 
"7c1e914aada947cd80a45d68275751dc", "_SOURCE_REALTIME_TIMESTAMP" :
"1626829165607533" }

--after-cursor用来获取期刊的一个子集。没有--before-cursor选项 afaik 所以我试图找到一种方法来停止在特定光标处并搜索光标firstlast光标之间的 JSON 对象。

目前,我正在使用以下代码段(我自己承认草率)在光标后搜索日志并计算找到匹配项的对象。

journalctl -u my-service --after-cursor="$FIRST_CURSOR" -o json | jq -n 'inputs|select(.MESSAGE|test(".*My search string .*")) | jq length | wc -l

我想用一个 if/else 语句更聪明地做到这一点,但我是个jq新手。

4

1 回答 1

0
  1. 仅 jq 的解决方案是:
[inputs|select(.MESSAGE|test("My search string")) | length] | length
  1. .*请注意,正则表达式中不需要初始或最终

  2. 为了将来参考,请遵循http://stackoverflow.com/help/mcve上的“mcve”指南。特别是,您的 JSON 在复制并粘贴到 SO 时被破坏;以及一个具有预期输出的实际示例,将不胜感激。

于 2021-07-21T19:00:10.903 回答