Elasticsearchの3台構成のクラスタを作る + Kibanaを使えるようにするところまで書く。

環境

  • Vagrant
  • CentOS7のVMを3つ
  • Elasticsearch 2.4.0
  • Kibana 4.6.1
  • Java8

Vagrantの設定

Vagrantfileは次の通り。VMを3台作成する。ついでにJava8をインストールしておく。

Vagrant.configure("2") do |config|
config.vm.box = "centos/7"
config.vm.provision "shell", inline: <<-SHELL
sudo yum update -y
sudo yum groupinstall "development tools" -y
sudo yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel -y
SHELL
config.vm.define :node1 do |node|
node.vm.network :private_network, ip: "192.168.33.10"
node.vm.provider "virtualbox" do |vb|
vb.memory = "2048"
end
end
config.vm.define :node2 do |node|
node.vm.network :private_network, ip: "192.168.33.11"
node.vm.provider "virtualbox" do |vb|
vb.memory = "2048"
end
end
config.vm.define :node3 do |node|
node.vm.network :private_network, ip: "192.168.33.12"
node.vm.provider "virtualbox" do |vb|
vb.memory = "2048"
end
end
end

VMを起動しておく。

$ vagrant up
$ vagrant ssh node1

Elasticsearch

インストール

公開されているrpmファイルを使って3VMに対してそれぞれインストールする。

$ sudo yum install -y https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/rpm/elasticsearch/2.4.0/elasticsearch-2.4.0.rpm

設定

ほぼデフォルトで必要最低限の設定をする。クラスタにしたいのでクラスタ名とクラスタに参加させるノードのIPアドレスを設定しておく。

$ sudo cd /etc/elasticsearch
$ sudo cp elasticsearch.yml elasticsearch.yml.origin
$ sudo grep -v "^#" elasticsearch.yml
cluster.name: my-application
network.host: _eth1:ipv4_
discovery.zen.ping.unicast.hosts: ["192.168.33.10", "192.168.33.11", "192.168.33.12"]

デフォルトでは、shard:5とreplica:1が設定される。

プラグイン

shardとreplicaの配置がブラウザで見られると便利なのとクエリが実行できるので、elasticsearch-headをインストールする。

$ rpm -qs elasticsearch | grep plugin
normal /usr/share/elasticsearch/bin/plugin
$ /usr/share/elasticsearch/bin/plugin install mobz/elasticsearch-head

起動

3つのVMでelasticsearchを起動する。

$ sudo /etc/init.d/elasticsearch start

確認

クラスタの設定がうまく行っていると3つのノードが表示される。

$ curl http://192.168.33.10:9200/_cat/nodes
192.168.33.11 192.168.33.11 4 76 0.05 d m Danielle Moonstar
192.168.33.10 192.168.33.10 4 76 0.18 d m Masked Marvel
192.168.33.12 192.168.33.12 4 76 0.03 d * She-Thing

http://192.168.33.10:9200/_plugin/head/に接続するとElasticsearchのステータスが確認できる。

最初は何も作っていないので何も表示されないはずですがデータがあるとshardとreplicaの配置が確認できます。

Kibana

インストール

node1だけにRPMを使ってインストールする。

$ yum install -y https://download.elastic.co/kibana/kibana/kibana-4.6.1-x86_64.rpm

設定と起動

何も設定せずに起動すると以下の様にElasticsearchにつながらないと言われてしまうので接続先だけ設定する。
Unable to connect to Elasticsearch at http://localhost:9200.

/etcにkibanaの設定ファイルがないので探して設定する。

$ rpm -qs kibana | grep kibana.yml
normal /opt/kibana/config/kibana.yml
$ grep -v -e "^$" -e "^#" /opt/kibana/config/kibana.yml
elasticsearch.url: "http://192.168.33.10:9200"

起動する。

$ /etc/init.d/kibana start

デフォルトのポートは5601なのでhttp://192.168.33.10:5601に接続するとkibanaの画面が表示される。

Marvel

elasticsearch-headはshard/replicaの確認、クエリ実行ができたが、marvelはshard/replicaの配置と各種メトリクスの確認ができるプラグインです。ライセンスの登録が必要ですが、プロダクション環境でも無料で使えます。マルチクラスタのモニタリングサポートが必要な場合だけ商用ライセンスが必要です。

licenseとmarvel-agentをクラスタのすべてのノードにインストールします。

$ /usr/share/elasticsearch/bin/plugin install license
$ /usr/share/elasticsearch/bin/plugin install marvel-agent
$ /etc/init.d/elasticsearch restart

kibanaにmarvelをインストールします。

$ /opt/kibana/bin/kibana plugin --install elasticsearch/marvel/latest
$ /etc/init.d/kibana restart

http://192.168.33.10:5601/app/marvelに接続すると以下の様な画面が表示されます。

indexを選ぶと、次のようにステータスとshardやreplicaの状況が見られます。

適当なデータをインポートする

時系列データではないがここにあるデータをインポートしてみる。

{
"account_number": 0,
"balance": 16623,
"firstname": "Bradshaw",
"lastname": "Mckenzie",
"age": 29,
"gender": "F",
"address": "244 Columbus Place",
"employer": "Euron",
"email": "bradshawmckenzie@euron.com",
"city": "Hobucken",
"state": "CO"
}

ココで上記のjsonデータが2000件入ったファイルがダウンロードできる。ダウンロードしてzipファイルを解答した後にインポートする。

$ ls accounts.json
accounts.json
$ curl -XPOST '192.168.33.10:9200/bank/account/_bulk?pretty' --data-binary "@accounts.json"

ageをパイチャートに表示してみる。

Logstashとかfluentdも近いうちに。

おわり。

参考

  1. https://www.elastic.co/products/elasticsearch
  2. https://www.elastic.co/jp/products/kibana
  3. https://www.elastic.co/guide/en/elasticsearch/reference/current/_exploring_your_data.html