Elasticsearch+Kibanaでデータ解析（①環境セットアップ編）


# はじめに
##本記事の全体構成について
本記事は、ElasticsearchとKibanaを使った環境のセットアップから、データの投入、データの検索・解析までを紹介する目的で作成した。
記事の構成は下記の通り。


１回目（本記事）：[Elasticsearch+Kibanaでデータ解析（①環境セットアップ編）](http://qiita.com/windows222/private/acb89451d6744e4361a3)
２回目：[Elasticsearch+Kibanaでデータ解析（②スキーマ作成＆データ登録編）](http://qiita.com/windows222/private/1cc5c49d58c2c59bfa81)
３回目：[Elasticsearch+Kibanaでデータ解析（③グラフ＆ダッシュボード作成編）](http://qiita.com/windows222/private/098ded70fb6a6b3c49d2)

ここでは、ElasticsearchとKibanaの紹介と、それらを使った使ったデータ解析の環境の構築する方法を解説する。

#ElasticsearchとKibanaの概要
##Elasticsearch
https://www.elastic.co/products/elasticsearch
ElasticSearchとはElastic社によって開発されたデータの格納＆解析ツールで、分類的にはNoSQLにわけられる製品である。Apache Licenseで公開されており、利用者はサポートが必要なければ無料で利用でき、再配布や改変も自由に行える。

##Kibana
https://www.elastic.co/products/kibana
Kibanaは、同社によって開発されたデータの可視化ツールでElasticsearchと連携をして棒グラフや円グラフなど様々なグラフを出力できる。セットアップもとても簡単にできるように設計されている。同じくApache2ライセンスで提供されている。
<img width="400" alt="rows_as_groups.png" src="https://qiita-image-store.s3.amazonaws.com/0/77722/ecf027c4-5c04-8ec4-4291-d7d986caf654.png">


##どのぐらい早いの？
実際に環境を構築し、データ解析の検証を行ってみたところ、約１億件のデータ解析が5秒程度で完了した。

使ったサーバのスペックは下記の通り。(一台）

| スペック項目 | スペック値 | 備考 |
|:-----------|:------------|:------------|
| OS         |          Redhut Linux 7.2 |            |
| CPU       |        8 cores |    Intel(R) Xeon(R) CPU E5-2620 0 @ 2.00GHz   |
| メモリ     |   16 GB |        |
| HDD       |        200GB |    媒体はHDDを利用。接続はRAID0を使い、ある程度高速化    |

実際にデータ解析を始めるまでに行うには、下記３ステップが必要となる。
ここでは、それぞれのステップを分けて解説する。

　1. 環境セットアップ
　2. Mapping（スキーマ）作成
　3. データ登録


#環境セットアップ
##インストール手順概要
Elasticsearch, Elasticsearchプラグイン, kibana の順にインストールする。
基本的には、ダウンロードして回答すればそのまま動く様になっている為、作業は簡単。

インストール方法には、①Zipファイルをダウンロードし、シェル起動する方法と②サービスとしてインストールする方法と、を動かす方法の２通り存在する。
ここでは①の方法を紹介する。
自分のサーバなどで試しに動かしてみたい場合はこの方法で良いが、サーバにインストールし皆で利用する場合、この方法では問題が有る。自動起動を含めサービスとして起動するようにインストールしたい場合は下記の記事を参考にするとよい。
[Elasticsearch＋Kibanaインストール（プロキシ＆自動起動設定含む） ](http://qiita.com/windows222/items/57423a420d57399cbc3e)
##Elasticsearch
下記の4ステップのみでセットアップが完了する（簡単！）
1.イメージダウンロード
　下記コマンドを実行し、インターネット上からイメージファイルをダウンロードする。

```
curl -x (プロキシアドレス）:（ポート） -L -O https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/2.3.2/elasticsearch-2.3.2.tar.gz
```
2.Zip解凍
　ダウンロードしたファイルを解凍する。

```
tar -xvf elasticsearch-2.3.2.tar.gz
```
3.起動プログラムを実行

```
cd elasticsearch-2.3.2/bin
./elasticsearch
```

　`./elasticsearch.sh` (windowsの場合はelasticsearch.bat)を実行
4. 起動確認
下記メッセージが表示されれば起動成功

```logtalk
[2016-05-13 14:30:50,746][INFO ][node                     ] [Scott Summers] version[2.3.2], pid[16409], build[b9e4a6a/2016-04-21T16:03:47Z]
[2016-05-13 14:30:50,746][INFO ][node                     ] [Scott Summers] initializing ...
[2016-05-13 14:30:59,712][INFO ][plugins                  ] [Scott Summers] modules [reindex, lang-expression, lang-groovy], plugins [], sites []
[2016-05-13 14:30:59,902][INFO ][env                      ] [Scott Summers] using [1] data paths, mounts [[/ (rootfs)]], net usable_space [32.1gb], net total_space [37.4gb], spins? [unknown], types [rootfs]
[2016-05-13 14:30:59,902][INFO ][env                      ] [Scott Summers] heap size [1015.6mb], compressed ordinary object pointers [true]
[2016-05-13 14:30:59,903][WARN ][env                      ] [Scott Summers] max file descriptors [4096] for elasticsearch process likely too low, consider increasing to at least [65536]
[2016-05-13 14:31:06,538][INFO ][node                     ] [Scott Summers] initialized
[2016-05-13 14:31:06,539][INFO ][node                     ] [Scott Summers] starting ...
[2016-05-13 14:31:07,193][INFO ][transport                ] [Scott Summers] publish_address {127.0.0.1:9300}, bound_addresses {[::1]:9300}, {127.0.0.1:9300}
[2016-05-13 14:31:07,209][INFO ][discovery                ] [Scott Summers] elasticsearch/12SFkQOqQlOr2Gw2k5M6fQ
[2016-05-13 14:31:10,375][INFO ][cluster.service          ] [Scott Summers] new_master {Scott Summers}{12SFkQOqQlOr2Gw2k5M6fQ}{127.0.0.1}{127.0.0.1:9300}, reason: zen-disco-join(elected_as_master, [0] joins received)
[2016-05-13 14:31:10,388][INFO ][http                     ] [Scott Summers] publish_address {127.0.0.1:9200}, bound_addresses {[::1]:9200}, {127.0.0.1:9200}
[2016-05-13 14:31:10,389][INFO ][node                     ] [Scott Summers] started
[2016-05-13 14:31:10,521][INFO ][gateway                  ] [Scott Summers] recovered [0] indices into cluster_state
```

　下記URLにアクセスして、リクエストが返ってくることを確認。（status:200が返ってきていればOK)
　![image](https://qiita-image-store.s3.amazonaws.com/0/77722/d8019d7a-6d7e-e941-9c6b-b00e6f8564cc.png)

https://www.elastic.co/guide/en/elasticsearch/reference/current/_installation.html


##Kibana
https://www.elastic.co/guide/en/kibana/current/setup.html
1.イメージダウンロード
　https://www.elastic.co/downloads/kibana
2.TAR解凍
　`tar xfvz kibana-4.5.0-linux-x64.tar.gz`
3.設定ファイルを変更
　config/kibana.ymlを開いて編集
　`vi config/kibana.yml`

```properties:kibana.yml
[kibana-4.5]
...
elasticsearch.url: yourhousname.com
...

```

4.起動プログラムを実行
　``./bin/kibana``

5.起動確認
　``http://yourhost.com:5601``


##Elasticsearchプラグインの紹介とインストール手順
Elastic searchを便利に利用するために、最低限入れたほうが良いプラグインのインストール方法を紹介する。
>！：インストールしたElasticsearchのバージョンが最新の場合、一部プラグインはインストール出来ないことが有ることに注意する。


###Marvel
Elasticsearchのステータスが監視できる。こちらは１ヶ月だけ無償で利用可能だが、引き続き利用するには別途ライセンスの登録が必要となる。

インストール手順：

```bash:command
#Elasticsearchのインストールパスに移動。下記はYumでインストール場合のパス
cd /share/usr/elasticsearch
#プラグインのインストール。まずはElasticsearchのプラグインをインストール
sudo bin/plugin install license -DproxyHost=172.21.1.141 -DproxyPort=12080
sudo bin/plugin install marvel-agent -DproxyHost=172.21.1.141 -DproxyPort=12080
#次に、Kibanaのプラグインをインストール
#まずはKibanaのインストールパスに移動する。下記はYumでインストールした場合のパス
cd /opt/kibana
wget  https://download.elastic.co/elasticsearch/marvel/marvel-latest.tar.gz
bin/kibana plugin -i marvel -u file:./marvel-latest.tar.gz
```
　最後に、ElasticsearchとKibanaをそれぞれ再起動する。

確認：
kibanaのURL＋/app/marvelにアクセスすると、下記の様な画面が表示される。
<img width="400" alt="rows_as_groups.png" src="https://qiita-image-store.s3.amazonaws.com/0/77722/5e7e5bed-8189-ee2d-aa00-1e98d540d977.png">



###Sense
Elasticsearchのコマンドをブラウザから実行できるようになる。コマンドの補完機能や保存機能がついており、何度も同じコマンドを実行したりする場合に便利。

インストール手順：
下記の通り、コマンドを実行する。

```
$ wget https://download.elasticsearch.org/elastic/sense/sense-latest.tar.gz
$ sudo bin/kibana plugin -i sense -u file:./sense-latest.tar.gz
```
確認：
kibanaのURL＋/app/senseにアクセスすると、下記の様な画面が表示される

<img width="400" alt="rows_as_groups.png" src="https://qiita-image-store.s3.amazonaws.com/0/77722/a4be9473-a571-53dd-b33c-4b4d08cd27a9.png">



###Kuromoji
用途：
　Kibana上で日本語を正しく解析する際に必要となるプラグイン

インストール手順:
　下記のコマンドを実行する

```
$ cd /usr/share/elasticsearch
$ sudo bin/plugin install analysis-kuromoji
```

#補足：アプリケーション起動・停止コマンド
Yumでインストールした場合は、Serviceコマンドを使ってアプリケーションの起動・停止が行えるが、Zip解凍したプログラムを起動するやり方だと、少し停止をする場合に手間がかかる。下記の通り、PIDを探して、そのプロセスをKillする必要がある。
##Elasticsearch
|  | 実行コマンド |
|:-----------|:-----------|
| 起動       |    $ELASTIC_HOME/bin/elasticsearch & |
| 停止     |   `ps -ef （縦棒※） grep elastic`で見つけたPID を  kill -9 する

※正しくは ps -ef | grep elastic

##Kibana
|  | 実行コマンド |
|:-----------|:-----------|
| 起動       |    $KIBANA_HOME/bin/kibana & |
| 停止     |   `ps -ef (縦棒） grep kibana` で見つけたPID を  kill -9 する 




スキーマ作成＆データ登録編に続く。
http://qiita.com/windows222/private/1cc5c49d58c2c59bfa81