簡単!Vagrant+Docker+td-agent+Elasticsearch+Kibanaで流行に乗ろう

Fluentd Advent Calendar 2013に登録したものの、そういえば 1 年位全く fluentd に触ってなかったので、リハビリも兼ねて最近バージョンアップで導入された Vagrant の Docker provisioner を使って、ES+Kibana に流すとこまでを作ってみた。実用性には乏しい。

以下解説。

Vagrantfile

localhost から port forwarding で box の同じポートに接続させてる。さらに box の中で Docker が走っていて、Docker provisoner でコンテナを起動する時に、port redirect させているので、クライアントからダイレクトにコンテナと会話ができるようになっている。

ES と Kibana はarcusが提供してるイメージを利用。シンプルな Dockerfile で好感が持てる。Kibana の方は JS の中に ES のエンドポイントが書かれるのでそれはES_HOST, ES_PORTという環境変数で渡すとコンテナ起動時に Kibana の config に書き込んでくれる。詳しくは以下のレポジトリ参照。

td-agent はさすがにイメージが無いので、provision 時に build している。ただし、Docker のインストールが Docker provisioner が走った時なので、一旦 ES と Kibana を起動させてから build を実行している。

Dockerfile

TreasureData のページにあるような感じで、deb のレポジトリを登録してからapt-getでインストール。念のためログをクリア。ES に繋ぎたかったのでとりあえず fluent-plugin-elasticsearch だけインストールして、あとは起動スクリプト配置するだけ。

起動スクリプトは Kibana 同様、環境変数使って td-agent の config を生成し、td-agent を start。ただし、何かフォアグラウンドで走ってないとコンテナが終了してしまうので、とりあえずログを tail してる。

あと、ES との接続はコンテナ間の接続なので、link を活用。こうすると、EXPOSE している port については、環境変数でアクセスすることができる。詳細はドキュメントで。

まとめ

これでvagrant upするだけで、td-agent、ES、Kibana が localhost でサーブされる。適当に td-agent にログを流して Kibana で遊んでみてね。Dockerfile とかいじれば好きな plugin を入れた td-agent のイメージを簡単に作れてハッピーかもしれない。

クライアントも Virtualbox の環境もほとんど汚さずに、いろんなサービスをぽこぽこ起動して組み合わせることができる世界は幸せだなぁ。まぁ ES の様なデータベース型のサービスは persistence をどう考えていくかが問題ではある。

そんじゃーね


Ryosuke Iwanaga

Software engineer / Anime / NFL / Father. Posts are my own, not endorsed by any org.