【Elasticsearch入門】環境構築 コンテナ編

# 本記事のゴール
Elasticsearchを勉強していこうという人向けにElasticsearch＋Kibanaの環境構築方法をまとめます。

# 前提
dockerを使える状態にしておいてください

# バージョン等
- Elasticsearch: 7.6.2
- kibana: 7.6.2

# 使うもの
- docker
- Elastic Stack
    - Elasticsearch
    - Kibana

# コンテナ環境の構築
「Elasticsearch」、「Kibana」コンテナを作成します。
それぞれの製品に関してElastic社からコンテナイメージを提供されていますが、今回はCentOSコンテナを作成しその上でそれぞれの製品をインストールしていこうと思います。

## docker networkの構築
今回はコンテナ間での通信が必要となるため、docker networkを作成する必要があります。

```
$ docker network create elasticstack
```

```
$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
39612814bc52        bridge              bridge              local
b5c7f801ff0b        elasticstack        bridge              local
b6ca1bb92159        host                host                local
0dc929d2724d        none                null                local
```

## コンテナの作成
実際にコンテナを作成していきます
上記でも説明した通り、今回は３つのコンテナを作成していきます。
それぞれのコンテナの要件は以下となります

- elasticsearchコンテナ
    - name: elasticsearch
    - network: elasticstack
    - port: 9200:9200
    - イメージ: centos:centos7
- kibanaコンテナ
    - name: kibana
    - network: elasticstack
    - port: 5601:5601
    - イメージ: centos:centos7

それぞれの設定を踏まえた上でコンテナを作成します。

```
$ docker run -it -d --network elasticstack -p 9200:9200 --name elasticsearch --privileged centos:centos7 /sbin/init
$ docker run -it -d --network elasticstack -p 5601:5601 --name kibana --privileged centos:centos7 /sbin/init
```

たちがってることを以下のコマンドで確認できます。

```
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
479654a004cb        centos:centos7      "/sbin/init"        4 minutes ago       Up 4 minutes        0.0.0.0:5601->5601/tcp   kibana
977d952a52a8        centos:centos7      "/sbin/init"        4 minutes ago       Up 4 minutes        0.0.0.0:9200->9200/tcp   elasticsearch
```

## Elastic Stackの構築
それぞれのコンテナの設定をしていきます。
### Elasticsearchコンテナ
#### Elasticsearchの構築
以下のコマンドによりコンテナ内に入って作業を行います。

```
$ docker exec -it elasticsearch /bin/bash
```

javaのインストールとElasticsearchのrpmをインストールします。rpmのインストールではelasticsearchインストール用のrpmが必要ですのでそれを入手するためにもwgetもインストールします。
今回はJavaのバージョンは11系、Elasticsearchは7.6.2で行っていこうと思います。

```
# yum install -y java-11-openjdk
# yum install -y wget
# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.2-x86_64.rpm
# rpm --install elasticsearch-7.6.2-x86_64.rpm
```

#### Elasticsearchの設定
今回の構成ではElasticsearchがシングルクラスタであることやコンテナ上で起動していることからElasticsearhにいくつかの設定をしてあげる必要があります。ここではその設定を行っていきます。
##### elasticsearch.ymlの設定
elasticsearch.ymlを開いてください。

```
# vi /etc/elasticsearch/elasticsearch.yml 
```

elasticsearch.ymlの一番最後の行に以下を追加してください。

```
cluster.name: my_cluster
node.name: elasticsearch
network.host: _site_
cluster.initial_master_nodes: ["elasticsearch"]
```
今回はシングルクラスタなのでcluster.name、node.name はあまり設定する必要がないですが、自分で設定する方が後々便利なので設定します。
network.host はリッスンするホストを指定します。今回はリンクローカルアドレスということで_site_を指定します。
cluster.initial_master_nodesはシングルクラスタ構成をとるには必ず必要な設定となりますので設定してください。簡単にいうとマスターノードを選定するために最低限必要なノードをここで指定します。

設定を終えたらelasticsearchを起動してみます。

```
# systemctl restart elasticsearch.service
```

以下のコマンドを打つと起動できたことを確認できます。

```
# curl elasticsearch:9200
{
  "name" : "elasticsearch",
  "cluster_name" : "my_cluster",
  "cluster_uuid" : "l_xjt09CSu-43BUdBM4fkg",
  "version" : {
    "number" : "7.6.2",
    "build_flavor" : "default",
    "build_type" : "rpm",
    "build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",
    "build_date" : "2020-03-26T06:34:37.794943Z",
    "build_snapshot" : false,
    "lucene_version" : "8.4.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}
```

### Kibanaコンテナ
#### Kibanaの構築
以下のコマンドによりコンテナ内に入って作業を行います。

```
$ docker exec -it kibana /bin/bash
```

javaのインストールとkibnaのrpmをインストールします。rpmのインストールではkibanaインストール用のrpmが必要ですのでそれを入手するためにもwgetもインストールします。
今回はJavaのバージョンは11系、kibanaは7.6.2で行っていこうと思います。

```
# yum install -y java-11-openjdk
# yum install -y wget
# wget https://artifacts.elastic.co/downloads/kibana/kibana-7.6.2-x86_64.rpm
# rpm --install kibana-7.6.2-x86_64.rpm
```

#### Kibanaの設定
コンテナ上で起動していることのでKibanaにいくつかの設定をしてあげる必要があります。ここではその設定を行っていきます。
##### kibana.ymlの設定
kibana.ymlを開いてください。

```
# vi /etc/kibana/kibana.yml 
```

kibana.ymlの該当箇所を探して以下の設定に変更してください。

```
server.host: 0.0.0.0
elasticsearch.hosts: ["http://elasticsearch:9200"]
```

設定を終えたらelasticsearchを起動してみます。

```
# systemctl restart kibana.service
```

ここまでくるとkibanaを起動できるようになっています
以下のURLにアクセスして疎通確認をしてみましょう

```
http://localhost:5601
```

kibanaに接続後左側にあるサイドバーの「Dev Tools」に移動してください。
そうするとコンソール画面が出てくるのでそこで以下の入力を行った後、再生ボタンを押下してみてください

```
GET /
```
以下のような画面が出てくればKibana → Elasticsearchの接続も完了です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119747/648f9fcf-faa4-973b-e59d-1e1016c670c6.png)

以上がKibana＋Elasticsearchお試し環境の構築方法となります。

# おすすめ教材


- [はじめてのElasticsearch](https://www.udemy.com/course/elasticsearch/?couponCode=3BE4592DF570D6DA69CF)
- [はじめてのKibana](https://www.udemy.com/course/kibana-jap/?couponCode=E59890B71A886D5A1CED)