ElasticsearchとKibanaをEC2上にSetupする手順

Elasticsearch, Kibanaを初めて触る人が、Amazon EC2上でまず動かして見る為のSetup手順です。Elasticsearch, Kibana, nginx(reverse proxy用)を、1個のEC2 instance上にSetupします。極力コピペで手順がなぞれる様にしています。

なお、Qiita初投稿なので、色々ご容赦ください。

# 必要な環境+準備
<dl>
  <dt>EC2 Instance * 1</dt>
  <dd>t2-microとか一番小さい奴でOK</dd>
  <dd>EBSを10GBぐらい</dd>
  <dd>AMIはLinux系なら何でも (ここではUbuntu14.04 64bitとして書いています)</dd>
  <dt>EC2にssh loginできる環境</dt>
  <dd>Port 22/80/443はアクセス出来る様に、Security policyの設定をする</dd>
  <dt>EC2のURLを確認しておく</dt>
  <dd>ここでは『http://ec2-xxxx.compute.amazonaws.com』と表記しています</dd>
</dl>

# 全体の流れ
以下の流れで進めます。
1. Elasticsearch Setup
2. nginx Setup
3. Kibana Setup
4. Kibana, Elasticsearchへのアクセス確認
5. Sample LogをElasticsearchに登録する

# Elasticsearch Setup
ここではElasticsearchのv1.4.2を使っています(この記事を書いた時点での最新)。適宜verは読み替えてください。

### Install
以下のSetupで、Elasticsearchにはlocalhost port 9200でアクセス出来る様になります。

```
$sudo su
#apt-get update
#apt-get install git-core build-essential ruby1.9.3 openjdk-7-jdk
#wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.4.2.deb
#dpkg -i elasticsearch-1.4.2.deb
#service elasticsearch start
```

### 動作確認
Elasticsearchにアクセスできるかの確認をします。
curlのresponseの"status"が200になっている事を確認してください。
なお、"name"はアメコミのキャラクターの名前がランダムに付与されるらしいです。

```
#curl localhost:9200
{
  "status" : 200,
  "name" : “Dan Ketch",
  "cluster_name" : "elasticsearch",
  "version" : {
    "number" : "1.4.2",
    "build_hash" : "927caff6f05403e936c20bf4529f144f0c89fd8c",
    "build_timestamp" : "2014-12-16T14:11:12Z",
    "build_snapshot" : false,
    "lucene_version" : "4.10.2"
  },
  "tagline" : "You Know, for Search"
}
```


# nginx Setup
nginxのSetup/設定をします、nginxは以下の様なreverse proxyとして設定します。

* http://ec2-xxxx.compute.amazonaws.com/es/ へのHTTPアクセスは、Elasticsearch (localhost:9200)に渡す
* http://ec2-xxxx.compute.amazonaws.com/kibana/ へのHTTPアクセスは、/usr/share/nginx/kibana/index.html を表示する

### Install

```
#apt-get install nginx
#chmod 777 -R /usr/share/nginx
```

### Reverse proxyの設定
/etc/nginx/nginx.confを編集します。元々あった内容は全て削除して、以下の内容をコピペして下さい。

```/etc/nginx/nginx.conf
user ubuntu;
worker_processes 1;

error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;


events {
    worker_connections 1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile             on;
    client_max_body_size 300M;
    send_timeout         300s;
    keepalive_timeout    65;

    server {
        listen 80;
        server_name localhost;

        location /kibana/ {
                root /usr/share/nginx/;
                index index.html;
        }

        location /es/ {
                proxy_pass http://localhost:9200/;
        }
    }
}
```


# Kibana Setup
ここではKibanaのv3.1.2を使っています(この記事を書いた時点での最新)。適宜verは読み替えてください。
ちなみに、Kibanaは単なる静的なjavascript file (html, css, js)です。

### Install
KibanaをDownloadしてきて、/usr/share/nginx/kibana以下に配置しています。

```
#wget https://download.elasticsearch.org/kibana/kibana/kibana-3.1.2.tar.gz
#tar zxf kibana-3.1.2.tar.gz
#mkdir /usr/share/nginx/kibana
#mv ./kibana-3.1.2/* /usr/share/nginx/kibana
```

### 一部js fileの変更
kibanaの/usr/local/kibana/config.jsを編集します。変更内容としては、kibanaに、
『Elasticsearchにアクセスしたければ、http://ec2-xxxx.compute.amazonaws.com/es/ 以下にアクセスしてね』
と言う事を教えてあげる為のものです。

```/usr/share/nginx/kibana/config.js

24-26行目辺りに、以下の様な行が有るので変更します。

オリジナル
elasticsearch: "http://"+window.location.hostname+":9200",

変更後
elasticsearch: "http://"+window.location.hostname+"/es",
```

### nginxの再起動
nginxの設定を変えたので、restartします。

```
#service nginx restart
```

# Kibana, Elasticsearchへのアクセス確認
Elasticsearch, nginx, Kibanaのsetupが終わりましたので、Browser経由でちゃんとアクセスできるか確認します。

### Elasticsearchへのアクセス確認
Browser上で、http://ec2-xxxx.compute.amazonaws.com/es/_nodes?pretty=true にアクセスします。
Elasticsearchからのjson response (cluster_nameやnodesの情報が含まれた物)が返ってくる事を確認して下さい。

### Kibanaへのアクセス確認
Browser上で、http://ec2-xxxx.compute.amazonaws.com/kibana/ にアクセスします (URLの最後の/を忘れずに！)。
KibanaのTop画面がでる事を確認して下さい。"Sample Dashboard"のlinkをclickすると、Sample Dashboardに行きます
(が、Elasticsearchに何もDataが入って居ないので、何もLog Dataは表示されないと思います)。

# Sample LogをElasticsearchに登録する
### Sample Log fileの入手
ここ https://github.com/harukasan/kibana-testdata から、events.json というfileをDownloadします。
25MBぐらいのファイルで、50,000件ぐらいのaccess logが入って居ます。
これをSampleとしてElasticseachに登録して見ましょう。

### Sample Log fileをElasticsearchに登録する
以下の様にcurlでevents.jsonをPOSTで送りつけると、Elasticsearchに登録がされます。

```
curl -s -XPOST http://ec2-xxxx.compute.amazonaws.com/es/_bulk --data-binary @events.json
```

### Kibana上で確認する
Browser上で、先ほどの"Sample Dashboard"に行ってみると、Sample Logが登録されているはずです。
真ん中の辺りでeventのカウントが54857とかに成っていれば成功です。

# 最後に
とりあえず、KibanaのSample Dashboardまでを辿り着けたでしょうか？
この次にやる事として、Kibanaをカスタマイズしてみて、いろんなChartやDashboardを作ってみる事だと思います。

Kibanaは便利なツールですが、GUIの見方や、Chart/Dashboardの設定は多少慣れが必要です。
この記事では割愛しますが、以下のSlideshareがわかりやすかったです。

http://www.slideshare.net/akiraotsuka142/kibana3