CLOVER🍀

That was when it all began.

ElasticのDockerイメージを使って、ElasticsearchとKibanaを使う

最近ElasticsearchとKibanaのDockerイメージに、DockerHubのものを使ってみたのですが

elasticsearch (OFFICIAL REPOSITORY)

kibana (OFFICIAL REPOSITORY)

@johtaniさんに怒られまして…。

あー、そういえば、あるって聞いたことあったような…。

調べてみると、確かに…。

Install Elasticsearch with Docker

Running Kibana on Docker » Pulling the image

Running Kibana on Docker » Configuring Kibana on Docker

Logstashもあるっぽい。

Running Logstash on Docker

Docker Hubにあるわけじゃないんですねー(docker.elastic.co/elasticsearch/elasticsearch)。

日本語記事もあるし!

Elastic社公式のDockerイメージ(Beta版)が提供されるようになりました | Developers.IO

せっかくなので、試してみましょう。

Elasticsearch

ElasticsearchのDockerイメージをとりあえず使うには、こんな感じかと。
※-itと--rmは、好みで付けています

$ docker run -it --rm -p 9200:9200 -p 9300:9300 \
-e "http.host=0.0.0.0" -e "transport.host=127.0.0.1" \
docker.elastic.co/elasticsearch/elasticsearch:5.1.1

以下の「Development mode」を参考にしています。
Running Elasticsearch from the command line

これで、ElasticsearchのDockerイメージが起動します。

とりあえず、インデックスの一覧を見てみましょう。

$ curl http://localhost:9200/_cat/indices?v
{"error":{"root_cause":[{"type":"security_exception","reason":"missing authentication token for REST request [/_cat/indices?v]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}}],"type":"security_exception","reason":"missing authentication token for REST request [/_cat/indices?v]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}},"status":401}

すると、怒られます。このDockerイメージにはX-Packが入っているらしいので、Basic認証が必要ですと。

elasticユーザーのデフォルトのパスワードは、「changeme」だそうなので、こちらを指定することで確認できます。

$ curl -u elastic:changeme http://localhost:9200/_cat/indices?v
health status index                       uuid                   pri rep docs.count docs.deleted store.size pri.store.size
yellow open   .monitoring-data-2          fdM11f1ZQbeXNzL_sUet-A   1   1          2            0      4.1kb          4.1kb
yellow open   .monitoring-es-2-2016.12.23 Z5u9HLHzQ7y3GWhPZQjKEA   1   1         93            4     81.1kb         81.1kb

ここでインストールされているX-Packはトライアル版なので、30日でexpireしますと。その場合は、サブスクリプション
入手するか、X-Packを無効にするかを行う必要があるようです。

ここでは、X-Packを無効にしてみましょう。
Security Settings

「xpack.security.enabled=false」をelasticsearch.ymlに設定するか、環境変数に加えます。

$ docker run -it --rm -p 9200:9200 -p 9300:9300 \
-e "http.host=0.0.0.0" -e "transport.host=127.0.0.1" -e "xpack.security.enabled=false" \
docker.elastic.co/elasticsearch/elasticsearch:5.1.1

これで、Basic認証なしでもアクセスできるようになります。

$ curl http://localhost:9200/_cat/indices?v
health status index                       uuid                   pri rep docs.count docs.deleted store.size pri.store.size
yellow open   .monitoring-data-2          Y97UMRbCSrap0j1M0Od2TA   1   1          2            0      3.9kb          3.9kb
yellow open   .monitoring-es-2-2016.12.23 ZzD-1-zaRpmTq5I8rcRkGw   1   1         37            4    141.7kb        141.7kb

自分はとりあえずお試し的に使っているので、こちらでもよいでしょう。

その他、elasticsearch.ymlの差し替え方などは、ドキュメントを参照してください、と。

Kibana

続いて、Kibana。とりあえず、こちらで起動します。

$ docker run -it --rm -p 5601:5601 docker.elastic.co/kibana/kibana:5.1.1

が、Elasticsearchとの接続も気になるので、Dockerコンテナのデフォルトを設定を見ると…

Docker defaults

http://elasticsearch:9200 に、 elastic:changeme で接続しにいくようなので、Elasticsearchもコンテナ名「elasticsearch」で起動します。
※ここでは、X-Packは有効にしたままです

$ docker run -it --rm --name elasticsearch \
-p 9200:9200 -p 9300:9300 \
-e "http.host=0.0.0.0" -e "transport.host=127.0.0.1" \
docker.elastic.co/elasticsearch/elasticsearch:5.1.1

続いて、Kibana。Elasticsearchとリンクさせます。

$ docker run -it --rm -p 5601:5601 --link elasticsearch docker.elastic.co/kibana/kibana:5.1.1

この状態でKibanaにアクセスすると(http://localhost:5601/)、次のようなページが現れます。

ログインに関する情報は、デフォルトでElasticsearchと同様に「elastic / changeme」です。

ログインすれば、Kibanaの画面が現れます。

X-Packについては、Elasticsearchの方で無効にすると、Kibanaにアクセスした際にはログインを
求められなかったみたいですが…?

kibana.ymlの差し替え方なども、ドキュメントを参照してください、と。

Docker Compose

Elasticsearch、Kibanaともにドキュメントに設定の方法が書いてあるので、こちらを参考にすると
よいかもです。

docker-compose.yml

Environment variable configuration

とりあえず、手元で簡単に遊ぶ分には、こんなのでいいかなぁ?
docker-compose.yml

elasticsearch:
  image: docker.elastic.co/elasticsearch/elasticsearch:5.1.1
  ports:
    - "9200:9200"
    - "9300:9300"
  container_name: elasticsearch
  hostname: elasticsearch
  environment:
    - "ES_JAVA_OPTS=-Xms1g -Xmx1g"
    - "http.host=0.0.0.0"
    - "transport.host=127.0.0.1"
    - "xpack.security.enabled=false"
kibana:
  image: docker.elastic.co/kibana/kibana:5.1.1
  ports:
    - "5601:5601"
  container_name: kibana
  links: 
    - elasticsearch