Kibanaで簡単! サクサク ビジュアライズしよう！


# 1.Kibanaとは？

[Kibana](https://www.elastic.co/jp/products/kibana)はElastic社が開発しているビジュアライゼーションのためのツールで、[Elasticserach](https://www.elastic.co/jp/products/elasticsearch)というデータベースに入っているデータを様々な形式で描画することができます。Elasticsearch、Kibanaには少し癖がありますが、その考え方さえ覚えてしまえば、とても柔軟で使いやすいツールです。 **あなたのビジュアライゼーションの自動化を助けるツール**として役立つこと間違いありません。

Kibanaは日本語での文献が少ないので、最初の取り掛かりに苦労することもあるかもしれません。そこで本稿ではその障壁を取り除くべく、 **スクリーンキャプチャを使って、極力わかりやすい説明**をしたいと思います。

![elasticsearch_and_kibana.png](https://qiita-image-store.s3.amazonaws.com/0/35954/c5b5cc09-1545-2814-6f78-ca42c134229a.png "elasticsearch_and_kibana.png")

**覚えておこう**

|用語|意味|
|:--|:--|
|Elastic|ElasticsearchやKibanaの開発企業|
|Elasticsearch|Elastic社の開発している、とても柔軟なデータベースのこと|
|Kibana|Elasticsearch内のデータをビジュアライズするツール|

# 2.Elasticsearchのインストールと実行

[ダウンロードサイト](https://www.elastic.co/downloads/elasticsearch)からElasticsearchをダウンロードしてください。

それを解凍し、解答したフォルダに移動し、以下のコマンドを実行します。

```
> bin/elasticsearch

```

これで9100番ポートを使ってElasticsearchが起動します。


# 3.Kibanaのインストールと実行

こちらも同様に[ダウンロードサイト](https://www.elastic.co/jp/downloads/kibana
)からKibanaをダウンロードしてください。

それを解凍し、解答したフォルダに移動し、以下のコマンドを実行します。

```
> bin/kibana

```

これで5600番ポートを使ってKibanaが起動します。ブラウザで[http://localhost:5600/](http://localhost:5600/)にアクセスしてみましょう。

![kibana_init.png](https://qiita-image-store.s3.amazonaws.com/0/35954/afb3cdf7-5256-ec61-671a-4f21ccbcc8c2.png "kibana_init.png")

# 4.Kibanaの手順

Kibanaでは大きく下図の４つのステップで描画をします。特に１の部分を自動化しておくと、さまざまなデータをインテリジェントにモニターできるようになります。

![kata.001.png](https://qiita-image-store.s3.amazonaws.com/0/35954/c0e89259-920b-ae42-c765-a5e72db8001e.png "kata.001.png")


## 4.1.データの投入

Elastisearchへのデータ投入は実際にはCSVファイルやDBから投入します。（参考：[こちら](http://easyramble.com/install-elasticsearch-import-data.html)）本来は大きなデータを扱うので、手入力では不可能なのですが、今回は手入力で行ってみましょう。

今回は日々の体重と体脂肪データを記録するようにしてみます。

ElasticsearchではJSONデータをPOSTすることでデータを登録することが出来ます。Dev Toolsを選択し、Consoleに次のように入力しましょう。

![dev_tools.png](https://qiita-image-store.s3.amazonaws.com/0/35954/71c9708e-40aa-2223-2405-18e76f96b136.png "dev_tools.png")


```
POST weight/data/1
{
	"id":1,
	"date":"2017-02-19",
	"weight": 70.0,
	"body_fat": 20.0
}
```

POSTはドキュメントを保存のメソッドで、「weight」というインデックス(データベース)の「data」というタイプ(データ型)の1番目としてデータを保存する指示になります。命令を実行をしてみましょう。

![post_data.png](https://qiita-image-store.s3.amazonaws.com/0/35954/492c7057-9997-7b8e-4ef6-cdbc25149fa3.png "post_data.png")

あわせて5つくらいのデータにしておきます。


```
POST weight/data/2
{
	"id":2,
	"date":"2017-02-20",
	"weight": 70.5,
	"body_fat": 20.1
}

POST weight/data/3
{
	"id":2,
	"date":"2017-02-21",
	"weight": 70.0,
	"body_fat": 20.0
}

POST weight/data/4
{
	"id":2,
	"date":"2017-02-22",
	"weight": 71.0,
	"body_fat": 20.2
}

POST weight/data/5
{
	"id":2,
	"date":"2017-02-23",
	"weight": 72.0,
	"body_fat": 20.5
}

```

これで毎日のデータが入っているようになりました。

**覚えておこう**

|用語|意味|
|:--|:--|
|インデックス|RDBMSのデータベース名に相当|
|タイプ|RDBMSのスキーマに相当|
|ドキュメント|1つのデータ(行)に相当|

## 4.2.検索式をつくる

まずはManagement画面にて、これから取り扱いたいデータのインデックス（データベース名）を設定します。今回はweightインデックスでしたね。早速、Management画面から設定してみましょう。

どのインデックスのデータ処理をするかを決めるには、Index Patternsメニューを選択します。

![management.png](https://qiita-image-store.s3.amazonaws.com/0/35954/f1c087cd-a8c9-5bf5-feee-0949f60f3a72.png "management.png")


weightを入力すると、dateフィールドが自動検出されたのがわかります。このインデックスを使用したいので作成して進めてみましょう。

![configure_index.png](https://qiita-image-store.s3.amazonaws.com/0/35954/34a33060-2e05-96a5-e916-7f556ecd81b2.png "configure_index.png")

作成が完了すると、星のついたインデックスができます。これでweightが対象状態になりました。

![created_index.png](https://qiita-image-store.s3.amazonaws.com/0/35954/a6fed1c7-6539-4aab-6114-4af454809976.png "created_index.png")


これでKibanaでweightデータベース（インデックス）を使うことができるようになりましたので、Discover画面をみてみましょう。

![discover.png](https://qiita-image-store.s3.amazonaws.com/0/35954/ab1b69cb-c5e0-c1cb-25c7-24a81d47ed15.png "discover.png")


データが追加されていることがわかりますね。なお、複雑なデータは、このDiscover画面やDev Tools画面を使って検索条件「アタリ」をつけていきます。

# 4.3.表示方法を決める。Visualize

データが追加されていたので、次はグラフにしてみましょう。

### 4.3.1. 日々のデータ推移を描画する。(Line chart)

まずは日々のデータ推移を描画するパターンです。このパターンが描画できると、さまざまなことが見えてきます。今回は毎日の体重/体脂肪の推移に取り組んでみたいと思います。

まずはVisualize画面を選択し、次にLine（折れ線グラフ）を選択します。

![Line.png](https://qiita-image-store.s3.amazonaws.com/0/35954/eb79e021-95c5-611e-cb70-08a3f6023198.png "Line.png")


次に描画するデータベース(index)を選びます。今回は当然、weightですね。

![choose_index.png](https://qiita-image-store.s3.amazonaws.com/0/35954/562d6893-4982-af8f-840a-49071cb049c3.png "choose_index.png")


次にグラフデータを描画する方法を選ぶことになります。 **日ごとのプロット**は 毎日、１個データがアップされているのことを考えると、 **日ごとにデータを取得し、そのデータの最大値のグラフを描画** しても実質、同義となります。

Y軸(Y-Axis)のAggregation指定をMAXにしてみましょう。そして、データ項目に体重を選択します。Custom Labelはわかりやすく体重と入れておきます。

ここで一旦グラフに反映してみましょう。今までの操作をグラフに反映するには、再生のボタンを押します。

![line_y_axis.png](https://qiita-image-store.s3.amazonaws.com/0/35954/4d261567-1eb2-d465-b803-b72a758031af.png "line_y_axis.png")


全てのデータの最大値が表示されてしまいました。それではX軸を設定しましょう。X軸は毎日、範囲を更新するデイリーヒストグラムを選びます。これにより、毎日の範囲の中で最大値を描くというグラフが完成し、毎日の推移がグラフ化されます。

![x_axis_graph.png](https://qiita-image-store.s3.amazonaws.com/0/35954/aa7768c4-d9d5-10db-4227-346712800d2f.png "x_axis_graph.png")

もう一個、データを足してみましょう。add metricsでY-Axisにさきほどの体重同様にbodyfat(体脂肪)を追加してみてください。２本のグラフが見事に完成しますね。

![body_fat.png](https://qiita-image-store.s3.amazonaws.com/0/35954/b9db8cfb-2a53-a057-9c1e-88dabd4b47ad.png "body_fat.png")


グラフが完成したらSaveボタンを押して登録をしておきましょう。

![save_graph.png](https://qiita-image-store.s3.amazonaws.com/0/35954/3399fc22-1758-a39a-4f16-960527f30749.png "save_graph.png")




### 4.3.2. 最新の棒グラフを表示する。(Vertical Bar)

最新の体重と体脂肪を並べる棒グラフを描画してみましょう。体重と体脂肪データを並べる意味あまりないのですが、他のデータでは頻出パターンと思われます。よく出る形式なので肩慣らしとして練習しておきましょう。


棒グラフを描画する場合はVertical Barを選択します。

![vertical_bar.png](https://qiita-image-store.s3.amazonaws.com/0/35954/930f758e-2d39-2347-4765-06f5c5ea785b.png "vertical_bar.png")


次に表示するデータですが、先程と同様にweightを選択しますので画像はスキップします。今回も前回同様にY-Axisを設定します。

![y_axis_vertical_bar.png](https://qiita-image-store.s3.amazonaws.com/0/35954/7ddfbd2a-83ce-7267-34f0-8de5aab1c672.png "y_axis_vertical_bar.png")

次にadd metricsで体脂肪も同様に設定します。
![y_axis_vertical_bar2.png](https://qiita-image-store.s3.amazonaws.com/0/35954/a338eb0d-7ac1-7302-bb09-141fe1bd6826.png "y_axis_vertical_bar2.png")


積み上げグラフになっているので、グループごとのグラフにしましょう。Optionsからbar modeをgroupedに設定します。

![y_axis_vertical_bar3.png](https://qiita-image-store.s3.amazonaws.com/0/35954/1c1952c5-7f7b-1621-d9ac-0ae047c6d4f7.png "y_axis_vertical_bar3.png")


以上までで、全期間のデータの最大値がグループ分けされました。bucketsの設定を使って、データを最新のものだけに絞り込むことで最新値での棒グラフを描いてみましょう。

buckets側を少し長いですが、以下のように設定してみましょう。日付の最大値を降順で1つのみすることで、日付の最大値=最新のデータのみが残ります。
<img src="https://qiita-image-store.s3.amazonaws.com/0/35954/c047aee9-8aec-694a-db1c-9bc738fc5518.png" width=500px>


このVisualize結果も、もちろんSaveしておきます。

## 4.4.データを素早く見られるようにする(Dashboard)


今までデータを見るグラフを2つ作成しました。そこで、次に今までSaveしてきたグラフを組み合わせてダッシュボードを作成してみましょう。ダッシュボード画面をSaveしておくことで、希望のグラフを素早くビジュアルで閲覧できるようになります。

![dashboard_add.png](https://qiita-image-store.s3.amazonaws.com/0/35954/93507eb1-2c4a-cd7f-d150-60375bac7f35.png "dashboard_add.png")

グラフを大きさを変えたり、位置を調整しましょう。
![dashboard_arrange.png](https://qiita-image-store.s3.amazonaws.com/0/35954/f302ef3a-d7db-2acd-53b8-38e4f7b18b3c.png "dashboard_arrange.png")

最後にSaveして完成です！

![dashboard_save.png](https://qiita-image-store.s3.amazonaws.com/0/35954/9e69835e-c598-3211-ec24-5508e50c07d4.png "dashboard_save.png")

# 5.まとめ

本稿ではKibanaを使って、さまざまなグラフを描画してみました。今回取り上げたのは最大値をベースに描画し、その際にデータを絞り込むといったパターンで描画を行いました。

Elasticsearchは非常に柔軟なデータベースで、さまざまなツールからデータの形式をほとんど気にしないで、どんどんデータを追加することが出来ます。

たとえば自動化したツールの出力先をElasticsearchにしてみましょう。さまざまなデータの可視化があっという間に完成するでしょう。もっとKibanaを使ってみましょう。