3

次のコマンドを使用します。

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

ジャーナル出力をリモート ログ追跡アプリに転送する。

問題は、出力に systemd ユニット/サービス名が表示されないため、どのサービスがどのログ行を生成するかわかりにくいことです。

たとえば、これはnginxの行です:

6 月 25 日 07:51:09 localhost 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 (Gecko のような KHTML) Chrome/35.0.1916.153 Safari/537.36"

ログにはbash[497] - プロセスの PID があります。ログにデータを追加するにはどうすればよいですか? たとえば、この PID の docker コンテナー名または systemd サービス/ユニット名?

4

4 に答える 4

1

を使用しない-o shortでください。情報が削除されます。

試し-o jsonたり-o verbose

于 2014-08-04T01:35:42.637 に答える
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']))

(CentOS 7 の Python)

于 2015-06-01T07:51:32.903 に答える
0

最後に、これを別の方法で実装しました

各サービス/systemd ユニットには、以下を使用する実行後スクリプトがあります。

/usr/bin/journalctl -u {ユニット名} -o short -f | sed 's/^/{ユニット名}/' | ncat {some-ip} {some port}

これで、ログ行の先頭にユニット名が表示されました! 私のログコレクターはメッセージにユニット名を持っています!

journalctl -u mongodb.service -o ショート -f | sed 's/^/ mongodb.service /' | ncat {some-ip} {some port}

出力します:

mongodb Jun 26 09:11:35 localhost bash[1710]: 2014-06-26T09:11:35.714+0000 [rsHealthPoll] replset 情報 mongodb-0:27017 ハートビートが失敗し、再試行しています

于 2014-06-26T09:14:37.033 に答える