えいのうにっき

a-knowの日記です

rsyslogd と journald の違い・住み分け

最近、ちょっと基礎から見直し中なんだけど。

↑のような本を読みつつ、よくわかんないところは本以外でも調べてみて、それでもわかんないところは社内の Qiita:Team に雑に書いてみたり、会社の知ってそうな人(インフラエンジニアさんとか)に聞いてみたりとかしてる。すんごい初歩的な質問をしてもみんな全力で教えてくれるから、もうまじイケメン。

で、今回タイトルの内容についてスッキリしたので、Qiita:Team だけじゃなく、このブログにも書いてみる。

rsyslogd と journald の違い・住み分け

このページにある図がわかりやすいっすよ、と、↓の画像を見せてくれた。

f:id:a-know:20160319143945p:plain

コラム - クラウド時代のオープンソース実践活用 | 第56回 RHEL7/CentOS7のjournaldでシステムログを一元管理|CTC教育サービス 研修/トレーニング より抜粋

なるほど。つまり、こういう↓ことかな。

journald は、

  • サービスプロセスからの
    • 標準出力/エラー出力
    • syslogメッセージ
    • journald 用メッセージ
  • その他のプロセスからの
    • syslogメッセージ
    • journald 用メッセージ

を収集してる & それを見たいときは journalctl を使う( journald はバイナリ形式でログを保管している)。

一方で、 journald に集められたもののうち syslog メッセージに関しては rsyslogd にも転送 されていて、 rsyslogd はそれをファイルに書き出す(永続化する)役割をする。

つ・ま・り、 rsyslogd は常に journald を経由して syslog メッセージを受け取っている!ということか!(例外はあるんかもしれんけど)

その確認

と、いうような推測を口にしてみたら、イケメンが実際に試してみてくれた。

logger コマンド( syslog メッセージを出力するコマンド)でメッセージを投げてみたところ、以下の様な挙動が確認できた。

$ logger 'test1234'

$ sudo journalctl --no-pager | grep test1234
 318 01:56:08 localhost.localdomain vagrant[14513]: test1234

$ sudo grep test1234 /var/log/messages
Mar 18 01:56:08 localhost vagrant: test1234

journalctl でも test1234 の文字列が確認できる(= journald を経由している)し、 rsyslogd によって /var/log/messages に永続化もされている。

ちなみに、 rsyslogd を止めてから再度同じことを行うと、 /var/log/messages には出力されなくなるのも確認できた。

$ sudo systemctl stop rsyslog

$ logger 'test5678'

$ sudo journalctl --no-pager | grep test5678
 318 01:58:37 localhost.localdomain vagrant[14527]: test5678

$ sudo grep test5678 /var/log/messages
$ 

うん。ごめん。 logger さえ知っていれば自分で試せれたね。



follow us in feedly