はじめに
Elastic の Kibana では、これまでグラフごとに集計項目を固定して作成する必要がありました。
しかし、Elastic Stack 8.18 以降(または 9.0 以降)で強化された「Variable control」機能と ES|QL を組み合わせることで、一つのパネルで集計項目を動的に切り替えることが可能になりました。
ダッシュボード上でプルダウンメニューを操作するだけで集計項目を変えられるため、似たようなグラフを何個も作る必要がなくなり、分析の柔軟性が大幅に向上します。本記事では、その具体的な実装手順をご紹介します。
準備作業
環境
以下の環境を使用します。
- Elasticsearch / Kibana : 8.18以降 または 9.0以降
– 本記事では、バージョン 9.2.0 で検証しています。
サンプルデータの取り込み
下記の記事などを参考に、「Sample web logs」データを Kibana に取り込んでください。
ダッシュボードの作成
1. ダッシュボードの新規作成
1.1. メインメニューの Analytics / Dashboards をクリックし、Dashboard 一覧画面へ遷移します。
1.2. 右上の [+ Create dashboard] をクリックします。

ダッシュボードの新規作成画面へ遷移します。
1.3. 対象期間を調整します。(例: Last 15 minutes を、Last 7 days に変更)

1.4. [(+) Add] > New Panel を選択します。


1.5. パネルの種類として、ES|QL を選択します。

ES|QLの入力画面に切り替わります。

1.6. ES|QL の入力欄に以下のクエリーを貼り付けます。
まずは、ベースとなるグラフを作成するため、geo.dest (宛先地域)ごとのアクセス数を集計するクエリーを入力します。
FROM kibana_sample_data_logs
| STATS count = count() BY geo.dest
| SORT count DESC
| LIMIT 101.7. 右上の [▷ Run Query] をクリックし、グラフが描画されることを確認します。


1.8. 右下の [✓ Apply and close] をクリックします。
2. Variable control の作成
次に、先ほどのグラフの集計項目を簡単に変更できるようにするための Variable control を追加します。
2.1. 画面上部の [(+) Add] をクリックし、Controls > Variable control を選択します。



Variable control の新規作成画面が表示されます。

2.2. Variable control の設定画面で以下のように入力します。
- Type を Values from a query から Static values に変更します。

- Name を ??stats_field に変更します。

- Values に集計対象としたいフィールド名を入力していきます。
- agent
- clientip
- geo.dest
- host
- machine.os
- response
- tags
- url

2.3. 右下の [Save] をクリックします。ダッシュボードに stats_field の control が追加されます。

3. グラフと Variable control の紐づけ
作成した Variable control の値に応じてグラフが変化するように、クエリーを修正します。
3.1. 作成したグラフパネルの右上のオプションから鉛筆アイコンをクリックします。

グラフ部分の編集画面へ遷移します。
3.2. ES|QL クエリー内の geo.dest 部分を削除します。
| STATS count = count() BY geo.dest <-- この geo.dest を削除3.3. 削除した箇所でキーボードのスペースバーを押すと、候補が表示されます。
選択肢の中から、先ほど作成した、??stats_field を選択します。

3.4. [▷ Run query] をクリックします。グラフの Horizontal axis (横軸)が ??stats_field に変わり、グラフが再描画されます。


3.5. 右下の [✓ Apply and close] をクリックします。
3.6. ダッシュボード右上の [Save] をクリックし、タイトル(例:”variable control test”)を入力して保存します。


動作確認
実際に Variable control を操作してみましょう。
ダッシュボード上の stats_field プルダウンを clientip に変更すると、クライアント IP ごとの集計結果に切り替わります。

同様に、stats_field を、geo.dest, host, machine.os, response, tags, url に変えると、それぞれのフィールドに基づいた集計結果が即座に表示されます。
まとめ
Variable control を活用することで、1つのグラフパネルであっても多角的な視点での分析が可能になることがお分かりいただけたかと思います。これにより、ダッシュボードの表示領域を節約しつつ、インタラクティブなデータ探索が可能になります。
今回は「集計フィールド(BY句)」を変数化する例を紹介しましたが、この機能は「集計関数(STATS句)」や「フィルタ条件(WHERE句)」などにも応用可能です。ぜひ皆さんの環境でも試してみてください。
参考URL: https://www.elastic.co/search-labs/blog/kibana-dashboard-interactivity-variable-controls-overview


