【问题标题】:Systemd Journal log from command line to specific namespace从命令行到特定命名空间的 Systemd 日志日志
【发布时间】:2021-05-01 14:57:34
【问题描述】:

如何从命令行记录到特定的 systemd 日志命名空间?

使用 Systemd 启动服务时,可以给出 LogNamespace=myNamespace 结合 StandardOutput=journal 作为单元文件中配置的一部分。

要查看此命名空间的输出,只需调用 journalctl --namespace=myNamespace 即可仅查看此命名空间的输出。

使用systemd-cat可以直接从命令行打印到日志中: echo "Hello Journal!" | systemd-cat

印刷品“Hello Journal!”确实显示在默认(匿名?)命名空间中,通过journalctl 可见。它不在任何命名空间内,并且在使用journalctl --namespace=myNamespace 时不可见。

更具体地说明最初的问题: 在查看journalct -f --namespace=myNamespace 时,如何使从命令行启动的进程的输出(没有 systemd,只是普通二进制)在此视图中可见?

类似echo "Hello Journal!" | systemd-cat --log-namespace=myNamespace

我使用 LogNamespaces 来分隔不同的应用程序日志。如果这不是预期用途,也可以接受以另一种(更好)方式解释如何做到这一点的答案。

【问题讨论】:

    标签: unix logging systemd journal


    【解决方案1】:

    首先用你的命名空间找出你的日志的 pid。

    ps aux|grep jou
    root         243  0.0  0.6  56176 26212 ?        Ss   10:06   0:01 /lib/systemd/systemd-journald
    root       10214  0.0  0.3  42308 14740 ?        Ss   11:34   0:00 /lib/systemd/systemd-journald DEBUG
    

    我们的实例是 DEBUG 接下来找出该实例使用的套接字:

    lsof -p 10214 |grep dev-log
    systemd-j 10214 root    5u     unix 0x0000000003787334      0t0   61560 /run/systemd/journal.DEBUG/dev-log type=DGRAM
    

    现在我们准备登录到所需的命名空间:

    logger -u /run/systemd/journal.DEBUG/dev-log HAHAHAHA
    
    journalctl --namespace=DEBUG
    Jan 22 11:35:46 myportal-deb root[10339]: HAHAHAHA
    Jan 22 11:38:50 myportal-deb root[10559]: HAHAHAHA
    

    【讨论】:

    • 这听起来很有希望,但我在目录中找不到开发日志文件。基本上我在您的第 2 步中找不到好的输出:找出该实例使用的套接字。我尝试了lsof -p .. 上出现的其他套接字,但它说 socker 连接被拒绝
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-10
    • 2021-10-14
    • 1970-01-01
    • 2021-10-28
    • 2013-02-07
    相关资源
    最近更新 更多