ログを集約する(EFK)
EFK (ElasticSearch + Fluentd + Kibana)と略されるソフトウエア群一式は、 代表的なログの収集、集約そして可視化の仕組みです。
これらをdockerコンテナベースで構築してみましょう。 なお、設定は最低限の変更だけしかしませんので、 より細かなカスタマイズが必要な場合は、公式ドキュメントや参考書を読んでください。
[構成図]
コンテナ1 -->
コンテナ2 --> fluentd --> elasticsearch <-- kibana
コンテナ3 -->
- 前提としてdockerのlogネットワークを作成し、全コンテナをlogに接続させます
- 各コンテナはfluentdにログを送信します
- fluentdが一度各コンテナからのログを受けて、 ログの集約・バッファリング(ここでログの加工なども可)したあと、 ElasticSearchへ転送します
- ElasticSearchでログを受け、データを集積します
- Kibanaで可視化します(kibanaからelasticsearchにデータを取りにいきます)
無事に構築できていればhttp://localhost:5061/
でKibanaの画面が出るはずです - 動作確認: nginxからログを流してKibanaで見られるか試してみましょう
ちなみにdockerの場合はじめからfluetnd対応の仕組みがしこまれているので簡単です。
ただし、ログをstdoutとstderrに出すように各コンテナを作りこむ必要があります。
dockerコンテナを--log-driver=fluentd
オプションをつけて実行すれば、
コンテナの標準出力(stdout)と標準エラー(stderr)をfluentdに送信します。
操作
EFK 三つを起動するスクリプトもあります
起動
cd appendix/logaggr
sh scripts/start.sh
停止
cd appendix/logaggr/
sh scripts/stop.sh
備考
最近では、こういった構成はPub/Subメッセージングモデルなどと呼ばれています
- Publisher = ログを送信するコンテナなど(出版者)
- Subscriber = ログを受ける(購読者)
- (あと、たいてい、この構成の真ん中に、メッセージのキューイングなどをおこなう部分があります)