当前位置: 首页 > 知识库问答 >
问题:

Journalctl:将_SYSTEMD_UNIT字段添加到日志打印输出中

归明诚
2023-03-14

使用命令:

/usr/bin/journalctl-o short-f |ncat{some ip}{some port}

将日志输出转发到某个远程日志跟踪应用程序。

问题是,我在打印输出中缺少systemd单元/服务名称,因此很难判断哪个服务生成哪个日志行。

例如,这是一条nginx生产线:

6月25日07:51:09本地主机bash[497]:10.23.132.98---[25/Jun/2014:07:51:09 0000]“GET/page.html HTTP/1.1”200 321“https://{ip}”“Mozilla/5.0(Windows NT 6.1;WOW64)AppleWebKit/537.36(KHTML,类似Gecko)Chrome/35.0.1916.153 Safari/537.36”

日志中有bash[497]——进程的PID。如何向日志中添加更多数据?例如,该PID的docker容器名称或systemd服务/单元名称?

共有3个答案

周越泽
2023-03-14

最后,我以不同的方式实现了这一点

每个service/system d单元都有一个执行后脚本,该脚本使用:

/usr/bin/journalctl-u{unit name}-o short-f | sed's/^/{unit name}/'|ncat{some ip}{some port}

现在我在日志行的开头有了单位名称!我的日志收集器在消息中有单位名称!

实例

journalctl-u mongodb。服务-o short-f|sed's/^/mongodb。服务/“|ncat{some ip}{some port}”

将输出:

Mongodb Jun26 09:11:35localhostbash[1710]: 2014-06-26T09:11:35.714 0000[rsHealthPoll]重置信息mongodb-0:27017心跳失败,重试

庄欣然
2023-03-14

Python可以做到这一点:

from systemd import journal

j = journal.Reader()
j.this_boot()
j.add_match(_SYSTEMD_UNIT="newnginx.service")
for entry in j:
   print('{} {}'.format(entry['_SYSTEMD_UNIT'], entry['MESSAGE']))

(CentOS 7上的python)

家弘业
2023-03-14

不要使用-o短,它会删除信息!

尝试-o json-o详细

 类似资料:
  • 问题内容: 我正在寻找从python调用shell脚本并使用日志记录将其stdout和stderr写入文件的方法。这是我的代码: 而且我敢肯定,有一种方法可以做到,而无需创建临时文件来存储进程输出。有任何想法吗? 问题答案: 我敢肯定有一种方法可以做到,而无需创建临时文件来存储进程输出 您只需要检查的文档,尤其是有关和的文档: ,并分别指定执行程序的标准输入,标准输出和标准错误文件句柄。有效值为:

  • 我目前正在使用Jupyter笔记本,我想强制它将Python日志打印到输出单元格。 我用的是以前用这种方式工作的旧笔记本,可能是旧版本的Jupyter笔记本。 我将日志设置为: 但当我打电话时: 它不会在输出单元格中打印任何内容。它只是在我启动Jupyter笔记本的控制台中打印出内容。 我正在使用并且在我的虚拟环境中安装的包是: 单元格中的日志打印输出是否已更改?是否有某种方法可以强制将日志记录写

  • 问题内容: 如何将Java输出同时输出到Shell控制台和某个文件中?那可能吗? 问题答案: 您可以在程序的开头包含以下几行:

  • 当我尝试console appender并尝试打印该字段时,就像下面的示例一样,它起作用了。 你能告诉我我在udp appender上做错了什么吗?谢谢你的忠告。

  • 问题内容: 我希望对awk中遇到的问题有帮助或指导。 我有一个超过5个字段的制表符分隔文件。我想输出不包括前5个字段的字段。 您能告诉我如何编写awk脚本来完成此任务吗? 最好jianfeng.mao 请注意以下种类的注释: 我的文件中有很多字段。不同的行具有不同数量的字段。每行的字段数不是标准的。 问题答案: 我同意Matchew的建议使用:这是完成这项工作的正确工具。但是,如果这只是要成为更大

  • 当我运行这段代码时,没有任何东西被打印到控制台。我应该如何使用logp?