Dockerを利用して Elasticsearch + Kibana の環境を作る

## 環境
オフィシャルのDocker コンテナを利用して環境を作ります。

### バージョン
* [Elastic Search](https://hub.docker.com/_/elasticsearch/) 5.1
* [Kibana](https://hub.docker.com/_/kibana/) 5.1
* [Docker composer](https://docs.docker.com/compose/) 1.8.1
 
### プラグイン
#### X-Pack
クラスタの状態をKibanaからみられる様に Elastic SearchとKibanaの両方にインストールします。
Elastic Searchのバージョン5以降は 関連プロダクトも含めてElastic Stackとして整備されました。それ以前は有償プラグインとして提供されていた Marvel(モニタリング)、Shield(セキュリティ)、Watcher(アラートと通知)、Graph(可視化) を一まとめにしたものです。

今回はX-Packをインストール後にモニタリングだけを有効にしておきます。

#### kuromoji

形態素解析のために kuromoji をプラグインからインストールします。

## Docker のファイルを準備

利用するファイルの品揃えは下の通りです。

```
.
┣━━ docker-compose.yml
┣━━ es
┃　 ┣━━ Dockerfile
┃　 ┗━━ config
┃　     ┣━━ elasticsearch.yml
┃　     ┣━━ log4j2.properties
┃　     ┗━━ scripts (空ディレクトリ)
┗━━ kibana
    ┗━━ Dockerfile
```

### docker-compose.yml

```yaml:docker-compose.yml
version: '2'
services:
  elasticsearch:
    build: es
    volumes:
        - es-data:/usr/share/elasticsearch/data
        - ./es/config:/usr/share/elasticsearch/config
    ports:
        - 9200:9200
    expose:
        - 9300
    ulimits:
        nofile:
            soft: 65536
            hard: 65536
        # https://github.com/docker-library/elasticsearch/issues/111
        # uliimit
  kibana:
    build: kibana
    links:
        - elasticsearch:elasticsearch
    ports:
        - 5601:5601

volumes:
    es-data:
        driver: local
```

* コンテナ外からアクセスを行えるように、Elastics Searchの9200番ポートとKibanaの5601番ポートを `ports`に指定します。
* システム要件として `nofile` を `65536` することが[書かれている](
https://www.elastic.co/guide/en/elasticsearch/reference/master/setting-system-settings.html) ので　`ulimits` で設定を行います。
* Elastics Searchのデータを残すために データボリュームを割り当てます。
* Elastics Searchの設定をカスタマイズするので、設定ファイルを置いてある es/config ディレクトリを マウントします。

### es/Dockerfile

``` docker:es/Dockerfile
FROM elasticsearch:5.1

# x-pack をインストール
RUN elasticsearch-plugin  install --batch x-pack

# kuromojiをインストール
RUN elasticsearch-plugin  install analysis-kuromoji
```

名前が``plugin```から変更された````elasticsearch-plugin```コマンドで x-packとkuromojiをインストールします。

### es/config/elasticsearch.yml
``` yaml:es/config/elasticsearch.yml
http.host: 0.0.0.0

# Uncomment the following lines for a production cluster deployment
#transport.host: 0.0.0.0
#discovery.zen.minimum_master_nodes: 1

### x-pack functions
xpack.security.enabled: false
xpack.monitoring.enabled: true
xpack.graph.enabled: false
xpack.watcher.enabled: false
```
オフィシャルコンテナの `/usr/share/elasticsearch/config/elasticsearch.yml` をコピーして、x-packに含まれる機能の有効/無効(xpack.xxx.enabled)を追加しました。

### es/config/log4j2.properties
``` properties:es/config/log4j2.properties
status = error

appender.console.type = Console
appender.console.name = console
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1.}] %marker%m%n

rootLogger.level = info
rootLogger.appenderRef.console.ref = console
```

オフィシャルコンテナの `/usr/share/elasticsearch/config/log4j2.properties` のコピーです。

### kibana/Dockerfile
``` docker:kibana/Dockerfile
FROM kibana:5.1

# x-pack をインストール
RUN kibana-plugin install x-pack
```
プラグインのx-packをインストールします。

## ビルドと実行
`docker-compose.yml`を置いてあるディレクトリで `docker-compose build` を行い、成功したら `docker-compose up`で起動します。

## kibana の画面にアクセス
ブラウザで `http://serverホスト名orIPアドレス:5601/` でアクセスします。
![kibana01.PNG](https://qiita-image-store.s3.amazonaws.com/0/145742/2ea88e7f-22ba-2145-a5a3-1905afce31a7.png)

左側にある「Monitor」を選択すると クラスタの状態を見られます。
![kibana02.PNG](https://qiita-image-store.s3.amazonaws.com/0/145742/96ee3960-22ef-22a5-be80-48086621b5f7.png)