2014-06-25 126 views
2

使用命令:Journalctl:添加_SYSTEMD_UNIT场到日志打印

在/ usr/bin中/ journalctl -o短-f | ncat {some-ip} {some port}

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

问题是我在打印输出中缺少systemd单元/服务名称,很难分辨哪个服务会产生什么日志行。

例如这是一个nginx的线:

6月25日7时51分09秒本地主机bash的[497]:10.23.132.98 - - [25 /月/ 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服务/单元名称?

回答

0

最终IVE实现了这个在指出错误的方式

每个服务/ systemd单元具有后执行脚本使用:

在/ usr/bin中/ journalctl -u {单位名称} - o短-f | sed's/^/{unit name} /'| ncat {some-ip} {一些端口}

现在我在开始日志行中有单元名称!我的日志收集器在邮件中有单元名称!

例如

journalctl -u mongodb.service -o短-f | sed's/^/mongodb.service /'| NCAT {一些-IP} {一些端口}

将输出:

mongodb的 06月26 9时11分35秒的bash本地主机[1710]: 2014-06-26T09:11: 35.714 + 0000 [rsHealthPoll]复制集信息 MongoDB中,0:27017心跳失败,重试

1

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

尝试-o json-o verbose

+0

我需要一个日志打印输出不是JSON格式(在CentOS 7个python)... – Nimrod007

+1

大多数日志软件可以摄取许多格式。但请尝试详细。否则,您可以通过其他程序管理它,以便在软件支持时对其进行格式化。 – daurnimator

1

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']))