カタカタブログ

SIerで働くITエンジニアがカタカタした記録を残す技術ブログ。Java, Oracle Database, Linuxが中心です。たまに数学やデータ分析なども。

Fluentd + Elasticsearch + Kibanaで遊んでみた(その3) 〜家計簿データのKibana 4での可視化まで〜

前回、前々回とOS 7にFluentd (td-agent 2.3.0) + Elasticsearch 2.1.1 + Kibana 4.3.1 を構築して、Zaimの家計簿データをFluentd経由でElasticsearchに登録するところまでを見た。

今回は続きとして、Elasticsearchに登録した家計簿データをKibana 4で可視化するところをやる。

Kibana可視化の流れ

Kibanaを起動している状態で、以下にアクセスする。
http://vmdev:5601/
vmdevはKibanaが起動しているサーバのホスト

Kibanaのページを開くと、このような画面が出る。メニューバーにある項目の通り、可視化の流れは以下になる。

  1. Settings : インデックスパターンを登録する
  2. Discover : データを検索する
  3. Visualize: 検索したデータをグラフ化する
  4. Dashboard : グラフ化したデータをパネルとして並べる

以下は、流れに従って可視化を行ってみる。

Settings : インデックスパターンを登録する

最初にKibanaにアクセスするとインデックスパターンがないから設定しろ、と言われる。
「Index name or patten」にzaim-*zaim-moneyがヒットすれば何でも良い)と入力すると、「Time-field name」は自動で@timestampが入ったので、そのままCreateする。
f:id:osn_th:20160107112422p:plain

Discover : データを検索する

インデックスパターンが作成されたので、Discoverページに移動する。
しかし、データはElasticsearchにあるはずなのに、「No results found」と出てしまった。
f:id:osn_th:20160107112426p:plain

これは画面右上のtime pickerがデフォルトだと「Last 15 minutes」になっているためである。
time pickerをクリックすると時間範囲を変更できるので、まずはこれを登録したデータが十分含まれるように、今回は「Last 6 months」に変更した。すると、以下のようにデータがヒットして、グラフが表示される。
f:id:osn_th:20160107112411p:plain

Visualize: 検索したデータをグラフ化する

検索データがヒットした状態で、そのままメニューバーから「Visualize」をクリックすると、以下のように様々な可視化の種類が選択できる。ここでは普通の棒グラフを出すために、「Vertical bar chart」を選択する。
f:id:osn_th:20160107112416p:plain
次に「Select a search source」が聞かれるが、今回は初めてなので「From a new search」を選ぶ。
すると、こんな画面が出た。ここからY軸、X軸を定義したり、項目をドリルダウンしてグラフを作っていく。
f:id:osn_th:20160107112429p:plain
今回は1ヶ月後ごとの支出金額の合計をカテゴリ別に表示するグラフを作ってみる。
最初にY-AxisでAggregationをSum、Fieldをamountにする。これでグラフの縦軸は「amount(金額)の合計」が表示されるようになった。緑背景の三角ボタンを押すと、グラフが再描画される。
f:id:osn_th:20160107112433p:plain
続いて、bucketsからX軸の設定をしていく。まず横軸に時間軸をとりたいので、「X-Axis」を選択する。
f:id:osn_th:20160107112437p:plain
Aggregationを「Date Histogram」に、Fieldを「@timestamp」に、Intervalを「Monthly」にすると、棒グラフが月ごとに表示されるように変わった。
f:id:osn_th:20160107112441p:plain
※ここからは縦軸の具体的な数値は念のため伏せます。あしからず。

さて、次はグラフをカテゴリ別の積み上げ棒グラフにしてみる。
「Add sub-buckets」からbucketsを追加し、Split Barsを選択する。
Sub Aggregationを「Terms」に、Fieldを「category_name」にして再描画すると、以下のようにカテゴリ別に色分けされた!
f:id:osn_th:20160107112444p:plain
よく見ると、給与所得というカテゴリがある。Zaimは収入も登録できるので、これは支出と分けて表示したい。
そこで、さらにbucketsを追加して今度は「Split Chart」を選ぶ(これしか選べないはず)。
Sub AggregationをFilterにして、Filter 1にはcategory_name:給与所得をAdd FilterからFilter 2には
-category_name:給与所得とする(先頭の-はElasticsearchフィルタのNOT演算子を表す)。
こうして再描画すると、以下のように収入と支出のカテゴリ別積み上げグラフにできた!
f:id:osn_th:20160107112449p:plain

最後に、作ったグラフをフロッピーアイコンから保存する。
f:id:osn_th:20160107112456p:plain
名前は適当に「カテゴリ別」として、Save。
f:id:osn_th:20160107112453p:plain
これでVisualizeは完成。今回は棒グラフの「Vertical bar chart」を選んだが、他のタイプでもグラフの作り方は似たようなものなので、色々動かしてみるとよいと思う。

Dashboard : グラフ化したデータをパネルとして並べる

最後に作ったグラフをダッシュボードに並べる。
といっても簡単でDashboardページの右上の「+」アイコンをクリックすると作成したグラフを選べるので、今回作った「カテゴリ別」グラフを選ぶだけ。
いろいろなグラフを作って、複数並べることで、分析しやすい・見やすいボードを作ることができる。
f:id:osn_th:20160107112735p:plain
最後に、ダッシュボード自体にも名前をつけて保存できる。
これでKibanaのデータ可視化作業が一通り完了した!

まとめ

以上、Zaimの家計簿データをFluentdでElasticsearchに登録し、Kibanaで可視化するまでの一連の流れを見た。
どのミドルウェアもセットアップから設定、実際に使って見るところまで、非常に洗練されていて最初の一歩を踏み出す敷居は高くないと感じた。
一方で、使いこなす上では他にもたくさんの機能があるため、より複雑なこともできそうだなという感触を得た。

また、家計簿データをリアルタイムで可視化するというのも家計の財務状況監視のためには有効なのではないかと思う。

以上!

関連記事