orangain flavor

じっくりコトコト煮込んだみかん2。知らないことを知りたい。

Chef SoloでFluentd + Elasticsearch + Kibana3をインストールする

はじめに

Fluentd + Elasticsearch + Kibanaが良いという話をよく聞くので、Chef Soloでサクッと環境を作ってみようと思ったら意外と苦戦したので記録を残しておきます。

f:id:mi_kattun:20131117153046p:plain

結論

Kibana 3を簡単にセットアップできるChefリポジトリを作成しました。 

https://github.com/orangain/kibana3-chef-repo

以下の手順でVagrantで作成した仮想マシンにKibana 3を導入できます。構成は上の図のようになります。JDKのインストールに結構時間がかかりますが中断したりしないようにしましょう。 *1

git clone https://github.com/orangain/kibana3-chef-repo.git
cd kibana3-chef-repo
berks install --path cookbooks/
vagrant up
knife solo cook vagrant nodes/my-kibana.json
open http://192.168.33.10/

セットアップができたら、Fluentd (192.168.33.10:24224) に対して、es.*にマッチするタグを付けたデータを送り込めばKibanaのグラフに表示されます。

以降ではそれぞれのクックブックの詳細を見ていきます。

Fluentd

クックブック

Fluentd (td-agent) のクックブックはOpscodeのサイトにないため、GitHubから取得します。

cookbook 'td-agent', :git => 'https://github.com/treasure-data/chef-td-agent.git'

設定

Elasticsearchにデータを投入するためにelasticsearchプラグインを使います。設定が必要なので、td-agent::elasticsearch というレシピを追加しました。

以下のように es.* にマッチするタグをElasticsearchに渡すようにしてみました。

<match es.*>
  type elasticsearch
  logstash_format true
  flush_interval 10s
</match>

Elasticsearch

クックブック

Opscodeのサイトから取得します。

cookbook 'elasticsearch'

デフォルトのレシピ elasticsearch::default はパッケージを利用しません。 elasticsearch::debelasticsearch::rpm はパッケージを利用しますが、設定ファイルの変更を行わないため自分でレシピを書く必要があります。今回はデフォルトのレシピを使用しました。

設定

JDK 7のインストールが必要なので、以下のように設定します。

"java": {
     "install_flavor": "openjdk",
     "jdk_version": "7"
},
"elasticsearch": {
     "cluster_name": "YOUR_CLUSTER_NAME",
     "bootstrap.mlockall": false
}

Kibana

Ruby製のKibana 2とHTML+JavaScript製のKibana 3があります。 今から使うのであればKibana 3が良いでしょう。

クックブック

クックブックは色々あります。

  1. Opscodeコミュニティクックブック 
    • 古くてKibana 2のみ対応
  2. https://github.com/realityforge/chef-kibana
    • 1のリポジトリで、最新のコミットでKibana 2と3を選択できるようになったばかり
  3. https://github.com/lusis/chef-kibana
    • Kibana 3のみに対応

ここでは3のlusisさんのクックブックを利用します。

cookbook 'kibana', :git => 'https://github.com/lusis/chef-kibana.git'

設定

このクックブックでは、Webサーバーとしてデフォルトでnginxがインストールされます。

  • node['kibana']['webserver']
    • Webサーバーの種類("nginx", "apache", "")を指定します。デフォルトはnginxです。
  • node['kibana']['es_server']
    • Elasticsearchのアドレスを指定します。デフォルトは"127.0.0.1"です。

まとめ

Chefのコミュニティクックブックを利用すると、自分でレシピを書かずに簡単にソフトウェアを導入できますが、特に枯れていないソフトウェアの場合、クックブックが追従できていなかったりするので気をつけましょう。

参考サイト

*1:私は一度しました