EC2上にElasictsearchとKibanaをインストールする手順

Amazon Elasticsearch Serviceでは、Elasticsearchのプラグインのインストールに制限があるので、EC2上にElasicsearchを構築した際のメモ。

## 手順

### インスタンス追加

まずはGUI等からEC2インスタンスを作成。

### swap領域追加

メモリを多く使うことが想定されるので、念のためswap領域を追加。

対象のEC2にsshで接続して、`root`ユーザで`1024MB`のswap領域を追加。
検証用で`t2.nano`を使っていたので多めに設定したが、適宜変える。

参考: http://qiita.com/waytoa/items/7010cfe2852d816c9513

以下のような状態にする。

```
$ free -m
             total       used       free     shared    buffers     cached
Mem:           489        484          5          0          8        416
-/+ buffers/cache:         59        430
Swap:         1023          0       1023
```

### Elasticsearchインストール

ここからは全て`ec2-user`での作業を想定。

#### Java 8をインストール

```
$ sudo yum install -y java-1.8.0-openjdk-devel
$ sudo /usr/sbin/alternatives --config java
```

確認。

```
$ java -version
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-b11)
OpenJDK 64-Bit Server VM (build 25.131-b11, mixed mode)
```

#### rpmでインストール

今回は`5.5.0`をインストール。バージョンは適宜変えること。

```
$ mkdir ~/src
$ cd ~/src
$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.0.rpm
$ sha1sum elasticsearch-5.5.0.rpm
$ sudo rpm --install elasticsearch-5.5.0.rpm
```

#### プラグインをインストール

必要に応じてインストールする。今回はスキップ。

AWS上でクラスタを組みたいなら`cloud-aws`を入れる。

#### JVMの設定を変更

`t2.nano`想定でメモリ総量の半分である`256M`を設定。

```
$ sudo cp -a /etc/elasticsearch/jvm.options{,org}
$ sudo sed -i -e s/Xms2g/Xms256M/g -e s/Xmx2g/Xmx256M/g /etc/elasticsearch/jvm.options
```

確認。

```
$ sudo diff /etc/elasticsearch/jvm.options{,org}
22,23c22,23
< -Xms256M
< -Xmx256M
---
> -Xms2g
> -Xmx2g
```

#### Elasticsearchの設定を変更

localhost以外からのアクセスを許可する。

```
$ sudo bash -c 'echo "network.host: 0.0.0.0" >> /etc/elasticsearch/elasticsearch.yml'
$ sudo diff /etc/elasticsearch/elasticsearch.yml{,.org}
89d88
< network.host: 0.0.0.0
```

#### ulimitを変更

上記ネットワーク設定を変えると以下の設定も必要。

```
$ sudo cp -a /etc/security/limits.conf{,.org}
$ sudo vim /etc/security/limits.conf
```

確認。

```
$ diff /etc/security/limits.conf{,.org}
61,63d60
< elasticsearch   soft    nproc           2048
< elasticsearch   hard    nproc           2048
< 
```

#### 自動起動設定を追加

```
$ sudo chkconfig --add elasticsearch
```

#### 起動

```
$ sudo -i service elasticsearch start
```

#### アクセス確認

```
$ curl localhost:9200
{
  "name" : "xuyWBNK",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "oSCaIbFRRH6Y4T-wXfmwTg",
  "version" : {
    "number" : "5.5.0",
    "build_hash" : "260387d",
    "build_date" : "2017-06-30T23:16:05.735Z",
    "build_snapshot" : false,
    "lucene_version" : "6.6.0"
  },
  "tagline" : "You Know, for Search"
}
```

### Kibanaのインストール

#### インストール

```
$ cd ~/src
$ wget https://artifacts.elastic.co/downloads/kibana/kibana-5.5.0-x86_64.rpm
$ sha1sum kibana-5.5.0-x86_64.rpm
$ sudo rpm --install kibana-5.5.0-x86_64.rpm
```

#### localhost以外からのアクセスを許可する設定を追加

```
$ sudo cp -a /etc/kibana/kibana.yml{,.org}
$ sudo vim /etc/kibana/kibana.yml
```

確認。`server.host`にはロードバランサーのDNSやElasic IPと紐付けたパブリックIPを入れる。

``` bash
$ sudo diff /etc/kibana/kibana.yml{,.org} 
8d7
< server.host: ${EC2インスタンスのIP}
```

#### 自動起動設定を追加

```
$ sudo chkconfig --add kibana
```

#### 起動

```
sudo -i service kibana start
```

## 参考

- Elasticsearchのインストール関連
    - https://www.elastic.co/guide/en/elasticsearch/reference/current/rpm.html
    - https://www.elastic.co/blog/running-elasticsearch-on-aws
    - https://www.elastic.co/guide/en/elasticsearch/reference/current/_installation.html
- Kibanaのインストール関連
    - https://www.elastic.co/guide/en/kibana/5.5/rpm.html