【Kibana】canvasで変数を扱う方法を解説

Elastic StackのKibanaは、Elasticsearchに蓄積されたデータを可視化するためのツールです。

Kibanaにはcanvasという機能があり、これを使えばリアルタイムにデータを表示しながらプレゼンテーション等が可能になります。

canvas画面の例
canvas画面の例

上記の例は、Elasticが提供するcanvas画面のサンプルです。

canvasを扱っていると、いろいろな機能を使いたくなります。その中で、「変数」が使えればもっと楽に画面を編集することができるのにと感じたことがありました(実際使えます)。

そこで今回は、canvasでの変数の使い方を紹介していきます。

ベーシックに変数をセット

canvasを編集する際に右側に表示される「ワークパッドの設定」画面で、「変数」タブがあるので、そこを編集します。

この方法では、変数を設定したcanvas画面全体のエレメントに変数を適用することができます

「変数の追加」から変数を追加することができます。

変数の型は、文字列、数値、ブール型のどれかを指定します。そして、変数名、値をセットして変数を保存します。

変数を使う

設定した変数を使うためには、表現エディターに記述する必要があります

表現エディターを開くには、エレメントを選択すると画面右下に表示される「表現エディター」を選択します。

今回は、マークダウンで設定した変数を表示してみましょう。

マークダウンのデフォルトの構文は以下の通りです。

filters
| demodata
| markdown "### Welcome to the Markdown element

Good news! You're already connected to some demo data!

The data table contains
**{{rows.length}} rows**, each containing
 the following columns:
{{#each columns}}
 **{{name}}**
{{/each}}

You can use standard Markdown in here, but you can also access your piped-in data using Handlebars. If you want to know more, check out the [Handlebars documentation](https://handlebarsjs.com/guide/expressions.html).

#### Enjoy!" | render

変数を表示するために、markdown以下を編集します。

変数は、{var “変数名”}のように表現します。

markdown以下を上書きして

filters
| demodata
| markdown {string "変数の値は" {var "sample1"} "です。"}
| render

ここで重要なポイントは、変数を含む文字列全体を {string }で囲っている点です。この処理によって、変数を含めた全体を1つの文字列として認識してくれます。

実行結果は以下の通りです。

表現エディターで変数をセット

表現エディターの中で変数を設定することもできます。この方法では、変数を設定したエレメント内でのみ変数を使うことができます

変数の宣言には var_set を用います。

filters
| demodata
| var_set name="sample2" value="もらい泣き"
| markdown {string "変数の値は" {var "sample2"} "です。"}
| render

nameに変数名、valueに値を与えます。結果は以下の通り。

valueには直接値を入れるほか、Elasticsearch SQLを用いてインデックスから値を引っ張ってくることも可能です。

filters
| var_set name="sample2" value={essql query="SELECT DestCityName FROM kibana_sample_data_flights LIMIT 1" | getCell "DestCityName"}
| demodata
| markdown {string "変数の値は" {var "sample2"} "です。"}
| render

別ページに変数を渡す

複数のcanvas画面を使って動的に画面表示をしたい場合に遷移先のページに変数を渡すこともできます。

値は、URLを介して渡します

マークダウンエレメントでは、リンクを作成することができるので、それを例に紹介します。

[ 表示するテキスト ]( 遷移先URL )の形式で記述すると、リンクを作成できます。

filters
| var_set name="sample2" value={essql query="SELECT DestCityName FROM kibana_sample_data_flights LIMIT 1" | getCell "DestCityName"}
| demodata
| markdown {string "<span class="red">[</span>変数の値は" {var "sample2"} "です。<span class="red">](</span>http://localhost:5601/app/canvas#/workpad/workpad-7c8b68a8-9ea1-4697-bd5b-e97a810e169e/page/2<span class="red">)</span>"}
| render

変数を渡すには、URL内の”canvas#”の箇所に手を加えます。

filters
| var_set name="sample2" value={essql query="SELECT DestCityName FROM kibana_sample_data_flights LIMIT 1" | getCell "DestCityName"}
| demodata
| markdown {string "[変数の値は" {var "sample2"} "です。](http://localhost:5601/app/canvas<span class="red">?sampleVar=" {var "sample2"} "</span>#/workpad/workpad-7c8b68a8-9ea1-4697-bd5b-e97a810e169e/page/2)"}
| render

sampleVarは変数名です。もちろん、固定の値を渡すこともできます。

変数を受け取る

変数を受け取る際は、{urlparam }を用います。

遷移先で受け取った変数をマークダウンで表示します。

filters
| demodata
| markdown {string "受け取った変数は" {urlparam param="sampleVar"} "です。"}
| render

param= では、変数名を指定します。

まとめ

Kibanaのcanvasで変数を使う方法を紹介してきました。

  • 1つの画面で同じ値を使うエレメントが大量にある場合
  • 複数画面で動的に画面表示をしたい場合

等の場合、変数を使うことは非常に有効です。使いこなして、頑張って作った素敵な画面のメンテナンスを楽にしておきましょう^^

ではでは👋