最近、ちょっと基礎から見直し中なんだけど。
基礎からやり直す pic.twitter.com/klggTNCben
— いのうえ (@a_know) 2016年3月13日
↑のような本を読みつつ、よくわかんないところは本以外でも調べてみて、それでもわかんないところは社内の Qiita:Team に雑に書いてみたり、会社の知ってそうな人(インフラエンジニアさんとか)に聞いてみたりとかしてる。すんごい初歩的な質問をしてもみんな全力で教えてくれるから、もうまじイケメン。
で、今回タイトルの内容についてスッキリしたので、Qiita:Team だけじゃなく、このブログにも書いてみる。
rsyslogd と journald の違い・住み分け
このページにある図がわかりやすいっすよ、と、↓の画像を見せてくれた。
コラム - クラウド時代のオープンソース実践活用 | 第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 3月 18 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 3月 18 01:58:37 localhost.localdomain vagrant[14527]: test5678 $ sudo grep test5678 /var/log/messages $
うん。ごめん。 logger
さえ知っていれば自分で試せれたね。