2014-06-25 85 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']))