目的
Kibanaの「Data Table」に同一フィールドの集計結果を異なる条件ごとに横一列に並べたい。
具体的には以下のように、商品ごとに購入回数を表示するテーブルを作りたい
ログの構造
ユーザーの商品購入を考える
ユーザーがとあるお店で、商品を購入したと想定
東スーパー、西コンビニ、南商店、北デパートと4つのお店が存在し、以下の商品を購入
商品名 | 単価 |
---|---|
キノコの山 | 120円 |
コアラのマーチ | 92円 |
杉のこ村 | 111円 |
たけのこの里 | 140円 |
ハーゲンダッツ | 1000円 |
Kibanaでこの商品名ごとに購入回数を表示したい。
ログはjson形式で登録されており以下のような構造になっている。
ユーザーがお店に行ったら作られるログ
{"user_id": 52, "kind_name": "アクセス", "place": "北デパート", "@timestamp": "2019-06-13T19:55:23+09:00:00"}
ユーザーが購入したら作られるログ
{"user_id": 43, "kind_name": "購入", "price": 140, "place": "南商店", "total_price": 280, "total_price_with_tax": 302.4, "product": "たけのこの里", "p_value": 2, "@timestamp": "2019-06-29T05:42:17+09:00:00"}
今回は2019/6/1~2019/6/3までの**"kind_name": "購入"ログの数をproduct**ごとに表示させたい。
KibanaのData Tableで商品別に購入回数を表示手順
集計値を1日ごとにまとめる
Bucketsを編集し、AggregationにDate Histogramを選択、
Fieldに*@timestampを選択、IntervalにDaily*選択。
購入数を商品ごとに表示させる
たけのこの里の購入回数を表示
Metricsに新規Metricを追加。Filtersで絞込条件を指定したいので、Aggregationは
Average Bucket、Max Bucket、Min Bucket、Sum Bucketの中から適当に選択 1
ログの数が1日ごとにカウントされている。
Date Histogramで時系列データをグループ化する。
Dailyで、1日単位でグループ化する。HourlyやMinuteを選択すれば、1時間単位や、1分単位でグループ化できる。
BucketのSub AggregationでFilters選択し、Filter1に選択条件を入れる
たけのこの里の購入数回数を表示させたいので、product.keyword:たけのこの里といれて条件を絞る
MetricのAggregationはCountを選択
ほかの商品も同じように設定をすれば、商品ごとの購入回数をKibanaのData Tableで表示できる
おわりに
Add a filter でログ全体を絞る方法は知っていたが、項目ごとに絞る方法がよくわからなかったので、今回画像付きで手順を書いてみた。
-
Average Bucket、Max Bucket、Min Bucket、Sum Bucketは、検索結果を指定した条件に分類し、平均値、最大値、最小値、合計値を取得するが、Filtersで検索条件が1つの場合、結果は1つなので平均値、最大値、最小値、合計値どれをもとめても、同じ値になる。 ↩