Kibana4のVisualizeを色々と試してみた

## はじめに

Kibana4ではKibana3から全面的にグラフの作り方が変わっているので、どんなグラフが作れるのだろう？と思って色々やってみた. Kibana4自体のセットアップや全体的な使い方は[こちらの記事](http://qiita.com/harukasan/items/3737a1cc0bed2facc14e)にまとまっている. 以下で作成するグラフのデータについても、この記事の中で利用されているテストデータ[harukasan/kibana-testdata](https://github.com/harukasan/kibana-testdata)を使わせて頂いた. Kibanaは現時点での最新版であるKibana4beta3を使用した.

## Kibana4におけるVisualizeの基本

以下の順番でVisualizeを行う

1. 対象となるデータを選択する. 新しく検索を行う、既存の検索結果を使う、既存のVisualizeを元にする、と言う選択肢がある
2. Visualizeの種類を選択する. 面グラフ、線グラフ、等など
3. 表示する値(Y軸やmetric)を選択する
4. X軸やSub aggregationを選択する.

Visualizeの種類によっては、Y軸を複数選択して同じグラフに表示したり、Sub aggregationを使ってデータをより詳細に集計して可視化することができる. 

## Area Chart

積み上げグラフ. Y軸はCount, Average, Sum, Min, Max, Unique count,Sub aggergationはX-Axis, Split Area, Split Chartを選ぶことができる.
例えば、ユニークユーザ数(user_name数)とその年令(user_age)分布を時系列で見たい、とした場合Y-AxisにDate Histogram→Unique Count→Field:user_name, Sub aggregationでX-Axis→Date histogram→Field@timestampと、更にSub aggregationを追加してSplit area→Histogram→Field:user_age→interval:10と選ぶ. すると以下の様なグラフになる.

![kibana_stacked1.png](https://qiita-image-store.s3.amazonaws.com/0/30516/b7af43fd-c982-1a03-811c-2135f228793a.png)

更に、これを男女別に見たい、としたらSub aggregationを追加しSplit Chart→Terms→Field:user_sexとする.

![Kibana_stacked2.png](https://qiita-image-store.s3.amazonaws.com/0/30516/a74ca731-6e6e-1088-302c-098ccebd06e2.png)

また、view optionsを変更すると積み上げ以外の表現もできる. 例えば、percentageを選ぶと全体を100%としたときの割合で可視化することができる.

![Kibana_area3.png](https://qiita-image-store.s3.amazonaws.com/0/30516/1aa29b22-e856-51e9-3dd5-29de43cd2876.png)

## Line Chart

線グラフ. Y軸で選べるものはArea chartと同じ. 例えば、平均年齢と最大年令を時系列で見る場合は、Y-AxisにAverage→Field:user_age, 更にY-Axisを追加してMax→Field:user_age、Sub aggregationでX-axis→Date histogram→Field@timestampとする. 出来上がるのはこんな感じ. Kibana3だと同一レコードの複数系列を同じグラフにするのはできなかったのだが、Kibana4だと単純にY-Axisを追加すればできるようになっている.

![Kibana_line1.png](https://qiita-image-store.s3.amazonaws.com/0/30516/46f24deb-9b47-d1e8-510e-303f4edd0df0.png)

更に、これに対してクエリを条件に系列を分けてみる. 全体のをそのままに、user_countryが"cn"かつ性別が女性のものを別系列とする. この場合、Sub aggregationにSplit lines→Filter→Query1:`*`, Query2:`user_country:"us" AND user_sex:"f"`と指定する.

![Kibana_line2.png](https://qiita-image-store.s3.amazonaws.com/0/30516/16b387c4-cd13-d5c7-c11e-7ab0653d4ea4.png)

## Data table

データを表形式で表示する. Area chartやLine chartと同様にmetrics(ChartのY軸に相当)とsub aggregationが指定可能. 1つ目のmetricにCount, 2つ目にUnique Count→Field:user_country, Sub aggregationはSplit Rows→Range→Field:user_age From 0 to 30, From 30 to 999, 更にSub aggregationを追加してSplit Rows→Terms→Field:user_sex とした結果が以下.

![Kibana_table1.png](https://qiita-image-store.s3.amazonaws.com/0/30516/fea2e975-bba5-0080-a8d7-3e1b1ec3865c.png)

Exportをクリックすると、表形式のままCSVでダウンロードすることができる. ちなみに、chartを表示している場合でもグラフ下の矢印をクリックすることで、Data table形式の表示にすることは可能.

## Metric

単一の数値を表示する. Sub aggregation等は無い.

![Kibana_metric1.png](https://qiita-image-store.s3.amazonaws.com/0/30516/c5b55c3b-d020-8fa0-e100-920c6d8d878a.png)


## Pie chart

円グラフ. 時系列の推移ではなく、対象データ全体における特定のデータの割合を表現する. metricsはCountとSumしか指定できない. Sub aggregationは他と同様. metricsにCount of Documents, Sub aggregationでSplit slices→Terms→Field:user_country (top 10)、Sub aggregationを追加してSplit slices→Terms→Field:user_sexとしたグラフが以下.

![Kibana_pie1.png](https://qiita-image-store.s3.amazonaws.com/0/30516/964cda74-466c-eb22-1ac4-ecb0323b614a.png)

## Vertical bar chart

縦棒グラフ. グラフの作り方はArea chartやLine chartと同じ. 例えばuser_country毎のevent数を、user_sexでごとに表示したい、とした場合はY-AxisにCount, Sub aggregationはX-Axis→Terms→Field:user_country(top 10)と、Split bar→Terms→Field:user_sexの２つを指定する. と、以下のようになる.

![Kibana_bar1.png](https://qiita-image-store.s3.amazonaws.com/0/30516/2890ad07-7db7-53f2-252a-d793632b1fff.png)

Area chartと同様にview optionsを指定することが可能. 同じグラフでgroupedを選択すると上記のような積み上げではなく、X-Axisの値ごとにグループ化された形で表示される.

![KIbana_bar2.png](https://qiita-image-store.s3.amazonaws.com/0/30516/bf2d0c98-b6ce-b364-0123-3c037b172227.png)

## 最後に
 
Aggregationが可能になったことで、Kibana3よりも色々な切り口での可視化が可能になっていると感じた. Kibana3を触り始めた時、"こんなグラフ作りたいのだけど、できないなぁ"と思っていたようなグラフが作れるようになっている(ついでに、Visualizationの話ではないがScripted Fieldsの機能を使うと、既存フィールドを元に加工した結果を新しいフィールドとして扱うことができるので、これもかなり強力そう). Kibana3にしかできないこともあるが、Kibana3, 4の併用も可能なので両方利用可能にしておいて、Kibana4を積極的に活用していきたい.