代码之家  ›  专栏  ›  技术社区  ›  hookenz

系统日志游标是如何工作的?

  •  2
  • hookenz  · 技术社区  · 8 年前

    我有麻烦了 systemd

    SeekTail() ,我为游标获取一个值,并可以继续调用Next(),它的行为与预期完全一致。

    但是,如果我 SeekCursor() 然后打电话 Next() Head() 然后重新开始阅读。为什么要这么做?我可以验证它是否正确地定位了光标。但似乎SeekCursor只对特定的项目有效,仅此而已。这不是我在阅读手册页和其他文档时所期望的。

    我在用 go-systemd systemd C-API .

    但go包装器不是问题所在,C库才是问题所在。我可以看到journalctl在Ubuntu上也做了同样的事情。

    e、 附加到日志中,显示尾部输出,获取json中的完整条目详细信息。跳转到光标并显示尾部

    matthewh@xen:~$ echo "Cursor example" | systemd-cat
    matthewh@xen:~$ journalctl -f
    -- Logs begin at Mon 2017-07-03 08:56:12 NZST. --
    May 31 17:50:31 xen code.desktop[6771]: [main 17:50:31] update#setState idle
    May 31 17:55:01 xen CRON[4468]: pam_unix(cron:session): session opened for user root by (uid=0)
    May 31 17:55:01 xen CRON[4469]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)
    May 31 17:55:01 xen CRON[4468]: pam_unix(cron:session): session closed for user root
    May 31 17:55:03 xen smokeping[2839]: RRDs::update ERROR: /var/lib/smokeping/Local/LocalMachine.rrd: illegal attempt to update using time 1527746103 when last update time is 4073847643 (minimum one second step)
    May 31 17:55:22 xen cat[4479]: Hello
    May 31 17:59:28 xen cat[4539]: Cursor example
    May 31 18:00:03 xen smokeping[2839]: RRDs::update ERROR: /var/lib/smokeping/Local/LocalMachine.rrd: illegal attempt to update using time 1527746403 when last update time is 4073847643 (minimum one second step)
    May 31 18:00:06 xen cat[4547]: Cursor example
    May 31 18:01:09 xen cat[4597]: Cursor example
    ^C
    matthewh@xen:~$ journalctl -f -o json-pretty -n1
    {
        "__CURSOR" : "s=b7f2a0f19c9946abab26788729a244c5;i=52a5;b=1ba1d5cabb5840adb02eedc4aba5b4d6;m=2d96b77f94;t=56d7a319ee462;x=8afac4ada39ae1fb",
        "__REALTIME_TIMESTAMP" : "1527746469487714",
        "__MONOTONIC_TIMESTAMP" : "195802136468",
        "_BOOT_ID" : "1ba1d5cabb5840adb02eedc4aba5b4d6",
        "_UID" : "1000",
        "_GID" : "1000",
        "_CAP_EFFECTIVE" : "0",
        "_MACHINE_ID" : "f899a862e4aa4775b8995564d8da565d",
        "_HOSTNAME" : "xen",
        "_TRANSPORT" : "stdout",
        "PRIORITY" : "6",
        "_COMM" : "cat",
        "MESSAGE" : "Cursor example",
        "_STREAM_ID" : "d1fbcc3ff027401e9dc95b5648f9322e",
        "_PID" : "4597"
    }
    ^C
    matthewh@xen:~$ journalctl -f --cursor="s=b7f2a0f19c9946abab26788729a244c5;i=52a5;b=1ba1d5cabb5840adb02eedc4aba5b4d6;m=2d96b77f94;t=56d7a319ee462;x=8afac4ada39ae1fb"
    -- Logs begin at Mon 2017-07-03 08:56:12 NZST. --
    May 31 18:01:09 xen cat[4597]: Cursor example
    -- Reboot --
    Feb 04 13:03:03 xen systemd-journald[420]: Runtime journal (/run/log/journal/) is 8.0M, max 241.0M, 233.0M free.
    Feb 04 13:03:03 xen kernel: Initializing cgroup subsys cpuset
    Feb 04 13:03:03 xen kernel: Initializing cgroup subsys cpu
    Feb 04 13:03:03 xen kernel: Initializing cgroup subsys cpuacct
    Feb 04 13:03:03 xen kernel: Linux version 4.4.0-116-generic (buildd@lgw01-amd64-021) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.9) ) #140-Ubuntu SMP Mon Feb 12 21:23:04 UTC 2018 (Ubuntu 4.4.0-116.140-generic 4.4.98)
    Feb 04 13:03:03 xen kernel: Command line: BOOT_IMAGE=/boot/vmlinuz-4.4.0-116-generic root=UUID=f95a581f-2afb-4428-bade-c913f1c51741 ro quiet splash vt.handoff=7
    Feb 04 13:03:03 xen kernel: KERNEL supported cpus:
    Feb 04 13:03:03 xen kernel:   Intel GenuineIntel
    Feb 04 13:03:03 xen kernel:   AMD AuthenticAMD
    ^C
    

    请注意“--reboot--”文本,以及它在过去几天中的实际情况。但在此之前,它通过systemd cat找到了我的入口,所以被找到了。

    我做错什么了?是我的错误还是疏忽?

    0 回复  |  直到 8 年前