LoginSignup
39
39

More than 5 years have passed since last update.

Fluentd, ElasticSearch, KibanaでKPIログを可視化する

Posted at

install手順や基本設定は割愛します.
KPIログを可視化する上で必要な主にKibanaの使い方メモです.

Goal

  • KPIとなる指標をログ出力し、Kibanaで可視化する
  • アプリケーション => fluentd => elasticsearch <- kibana
  • KPIは複数設定され、指標はそれぞれ異なるため、KPIの種類によってデータ構造が変更できなければいけない
  • 1つのKPIを様々な軸で集計可能にしたい

ログ送信

今回はfluent-logger-rubyを使う.
https://github.com/fluent/fluent-logger-ruby

簡単に以下のようにログを送信します.

log = Fluent::Logger::FluentLogger.new(nil, host: 'localhost', port: 24224)

log.post("kpi.user_login", {user_id: user_id, user_email: user_email})
log.post("kpi.user_register", {user_id: user_id, user_email: user_email})

Fluentd Out

fluent-plugin-elasticsearchを使ってelasticsearchにstoreする.
https://github.com/uken/fluent-plugin-elasticsearch

/etc/td-agent/td-agent.conf
<match kpi.user_register>
  type copy
  <store>
    type elasticsearch

    index_name kpi
    type_name user_register

    include_tag_key true
    tag_key @log_name

    host localhost
    port 9200

    logstash_format true
    logstash_prefix kpi.user_register

    flush_interval 3s
  </store>

  <store>
    type file
    path /var/log/td-agent/kpi.user_register.log
  </store>
</match>

<match kpi.user_login>
  type copy
  <store>
    type elasticsearch

    index_name kpi
    type_name user_login

    include_tag_key true
    tag_key @log_name

    host localhost
    port 9200

    logstash_format true
    logstash_prefix kpi.user_login

    flush_interval 3s
  </store>

  <store>
    type file
    path /var/log/td-agent/kpi.user_login.log
  </store>
</match>

logstash_format trueにしないとkibanaが想定した形にならない.
logstash_prefixを指定しないと、user_registerもuser_loginも同じindexに同じスキーマでつっこまれる.
デバッグにも使えるのでtype copyでelasticsearch以外にも別fileに書き出しておくと便利.

ElasticSearch

elasticsearchにデータが投入されていることを、headプラグインなどで確認.

スクリーンショット 2015-08-24 21.54.08.png

kpi.user_login-YYYY.MM.DD
kpi.user_register-YYYY.MM.DD
といった名前のindexが日毎に作成される.

日付がかわると新規indexになるが、このときjsonデータがかわるとスキーマがかわってしまい、kibanaダッシュボードで使われている属性が変更削除されているとダッシュボードも見れなくなるので注意.

logstashの日付の粒度変更したい場合、以下の記事参考になりそうです.
http://y-ken.hatenablog.com/entry/fluentd-elasticsearch-kibana-index-partitioning

スクリーンショット 2015-08-24 21.58.26.png

headプラグインのBrowserタブで、index/typeを指定するとデータが確認できるので、スキーマがうまく作れてるかなど簡単に確認できる.

Kibana

Index登録

Settings > Indicesでelasticsearchに作成されたindexを指定して保存する.
日付部分はワイルドカードで.
※Indicesはindexの複数形です!

スクリーンショット 2015-08-24 22.00.10.png

Search条件登録

Discoverタブに遷移. 左上に表示されるIndexワイルドカード名のプルダウンを開くと別のindexを選択できるので、ここでindexをざっくり選んで、一番上バーに"*"とだけなってるエリアに検索条件を指定することでさらに絞りこみが可能(今回は全件取得).
右上のSave Searchボタンで検索名をつけて保存する.

スクリーンショット 2015-08-24 22.06.24.png

作成した検索条件は、Settings > Objects > Searchesで確認できる.

スクリーンショット 2015-08-24 22.16.27.png

可視化ルール登録

(Step1)Vertical Bar Chartを選んで、(Step2)From a saved search(さっき作成した検索条件)を選ぶ.

スクリーンショット 2015-08-24 22.18.23.png

Y-Axis: countとすると、単純にログの総数がY軸の値になる.
X-Axis: Aggregation=Date Histogramとすると、X軸を@timestampで並べる.
再生ボタンを押すとグラフプレビューが更新される.
グラフがおかしければ右上の時間範囲を確認する.

スクリーンショット 2015-08-24 22.21.02.png

Search条件登録したときのようにVisualizeも右上のボタンから名前をつけて保存しておく.
他にもユーザ属性があればもちろん円グラフで比率を監視することも可能.

ダッシュボード登録

右上の+ボタンでVisualizeを選んで好きな位置に配置する.
同じ要領でダッシュボード名をつけて保存する.

スクリーンショット 2015-08-24 22.41.46.png

References

39
39
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
39
39