【问题标题】:Injecting structured json logs into journald将结构化的 json 日志注入 journald
【发布时间】:2017-08-10 04:36:13
【问题描述】:

我的印象是,可能有一种方法可以直接写入 systemd 日志、json 数据,而无需先将其转换为 sd_journal* 函数所期望的格式。这可能吗?

我的怀疑是因为一些关于内置 json 解析器的 cmets。但是,手册页另有建议。

另外,我注意到如果您以格式写入标准输出

<priority> message

优先级将在 PRIORITY="priority" 字段中结束,消息将在 MESSAGE="message" 字段中结束。但是可以输入其他结构化字段数据吗?

注意:手册页没有提到我提到的最后一个特性。因此,如果它们稍微过时,我不会感到惊讶,这就是我问的原因。

【问题讨论】:

    标签: systemd


    【解决方案1】:

    journald 不接受任意的 JSON。只是键/值对。所以不可能发送嵌套的数据结构。您可以直接通过 Unix Domain 套接字发送数据:

    echo -e  "MESSAGE=Hello\nFOO=BAR\nMY_ID=12345\n" |socat  - UNIX-SENDTO:/run/systemd/journal/socket
    

    结果:

    {
        "__CURSOR" : "s=46dc1bd66d0e4a48a6809e45228511e2;i=84cc;b=fd9144999d6846c8827d58f56c2635db;m=850161136;t=55669a307fdd6;x=887a021a37840789",
        "__REALTIME_TIMESTAMP" : "1502386590318038",
        "__MONOTONIC_TIMESTAMP" : "35703361846",
        "_BOOT_ID" : "fd9144999d6846c8827d58f56c2635db",
        "_TRANSPORT" : "journal",
        "_UID" : "1001",
        "_GID" : "1001",
        "_CAP_EFFECTIVE" : "0",
        "_SYSTEMD_OWNER_UID" : "1001",
        "_SYSTEMD_SLICE" : "user-1001.slice",
        "_SYSTEMD_USER_SLICE" : "-.slice",
        "_MACHINE_ID" : "6e7b40640bf6473189165f19f8be2536",
        "_HOSTNAME" : "samson",
        "_SYSTEMD_UNIT" : "user@1001.service",
        "_SYSTEMD_INVOCATION_ID" : "e5ed32fbb1004545b1ddf73a0d928d87",
        "_SYSTEMD_CGROUP" : "/user.slice/user-1001.slice/user@1001.service/gnome-terminal-server.service",
        "_SYSTEMD_USER_UNIT" : "gnome-terminal-server.service",
        "_COMM" : "socat",
        "_EXE" : "/usr/bin/socat",
        "_CMDLINE" : "socat - UNIX-SENDTO:/run/systemd/journal/socket",
        "FOO" : "BAR",
        "MESSAGE" : "Hello",
        "MY_ID" : "12345",
        "_PID" : "19868",
        "_SOURCE_REALTIME_TIMESTAMP" : "1502386590317991"
    }
    

    【讨论】:

    • 谢谢。那很有意思。我的数据来自 Lua。所以我想要一个键/值对的平面表并将它们注入到日志中。我发现了一些代码,它基本上将 JSON 数据作为标准输入的输入,然后像这样将其写入日志。所以我根据自己的需要对其进行了调整,并且效果很好。
    猜你喜欢
    • 2019-02-04
    • 1970-01-01
    • 2021-06-16
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 2019-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多