EFK(Elasticsearch + Fluentd + Kibana)をDocker-Composeで試してみた

なかなか試せなかったログ収集・解析周りのツールを周回遅れで軽く試してみた。
Docker 1.8 からFluentdもlog driverに追加されているので、これを使って簡単なサンプルを構築した。

構成

適当なnodeJSアプリケーションのフロントにnginxを立たせて、
収集したログをtd-agentで、Fluentdのログ収集コンテナに24224ポートで転送する。
あとはElasticsearch、Kibanaで解析・表示する。

アプリケーションからのログ転送はDockerのlog-driverオプションを使うので、td-agentの導入を省けた。
FluentdElasticsearchKibanaはそれぞれオフィシャルのイメージがあるので、そちらを活用した。
Elasticsearchは9200ポート、kibanaは5601ポートを使った。

ログ収集・解析基盤のセットアップ

Fluentd

fluentdの設定はログをElasticsearch(9200ポート)に転送している。
forwardで転送されてきたログでdockerというタグのついたものを9200ポートで送信している。
logstash_formatの設定は出力形式、これがfalseの場合kibanaで解析する際に@timestampフィールドが作成されないようで時系列で集計できない。

kibana

5601ポートでアクセスすることで解析画面を表示できる。
これはどちらかというと設定より使い方を習得する方が大変そうな。

docker-composeのコンテナのヘルスチェック

docker-composeを使った際に、各コンテナとの疎通確認にncコマンドを使っている。そのため、ほとんどのentrypoint.shファイルの内容がほとんど同じになってしまった。

コンテナ間の依存を解消する方法がいまいちわかってないのでこのような手法をとったのだが、もっといい方法がありそう。
docker-compose issue#686にあるようなので、今後解決されるかも。

起動してみる

kibanaにアクセスすると

logstash形式のものをフィルタリング

ということで、とりあえず最小限の環境は構築できた。

今回作成したサンプル kazu69/docker-efk

参考にしたページ

Passing bash code through the environment (for docker-compose)

Comments