Taste of Tech Topics

Acroquest Technology株式会社のエンジニアが書く技術ブログ

Vega利用時によくある7つの疑問

こんにちは、今年7月にElastic Certified Engineer認定を取得したHiroshi Yoshioka です。

この記事は Elastic stack (Elasticsearch) Advent Calendar 2018 の11日目の記事になります。

はじめに

今日のお題はVegaです。
VegaはKibanaの可視化の幅を拡大する優れたフレームワークなのですが、Elastic公式ドキュメントに情報が少ないため、取っつきやすいとは言えません。

そこで本記事では、Vegaを利用時によくある7つの疑問について回答します。 ※Vega-Liteについては扱いませんのでご了承ください。

1. そもそもVegaって何者?

VegaはインタラクティブなVisualizationを作成するための宣言型Web言語。
JSONCSVを読み込み、様々なチャートを可視化することができます。

Vega公式ページにあるサンプルを見るとすぐに分かりますが、表現できるVisualizationの種類が非常に豊富です。

例えば、このチャートを開いてみてください。
一見普通の散布図に見えますが、丸いシンボルをドラッグすると、時間軸を変更することができる!

Vegaを利用すると、このようなインタラクティブな表現をKibanaで実現できるのです。 vega.github.io

2. KibanaとVegaの関係は?

Kibana Ver.6.2.0からVisualizeにVegaを利用できるようになりました。
Vegaで作成したチャートは、Visualizeとして保存したりDashboardへ配置することが可能です。
※Ver.6.2.0以前のKibanaでVegaを利用するには、別途プラグインのインストールが必要になります。

3. 手取り早くKibana上で動くVegaを見るには?

Kibana 6.4.0以降、ワンクリックで可視化可能なサンプルデータが付属しており、VegaのVisualizeも含まれています。
こちらを利用しましょう。(本記事では6.5.0を使用します。)

まず以下をセットアップ。サンプルデータ投入画面を開きます。

  • Elasticsearch 6.5.0
  • Kibana 6.5.0

f:id:acro-engineer:20181211010713p:plain
サンプルデータ投入画面

Sample flight dataの「Add」をクリックして、航空データを投入します。

f:id:acro-engineer:20181211011120p:plain
サンプルデータ投入画面

View dataをクリックしてDashboardをオープン。

f:id:acro-engineer:20181211011233p:plain
航空データダッシュボード

右下にVegaで作られたVisualize(世界地図)があるのでEdit Visualizationを選択。 世界地図にプロットされた空港にマウスカーソルを合わせると、フライト情報のPathとツールチップが表示されます。

f:id:acro-engineer:20181211011658p:plain
航空データのVega Visualize

4. Vegaの公式ページのサンプルがKibanaで動作しないのはなぜ?

Vegaの公式ページには、Vega最新バージョンに関するドキュメントが公開されています。
2018/12/11時点では、Vegaの最新は4.4.0。一方で、Kibana 6.5.0に組み込まれているのはVega 3.3.1です。
だいぶ、バージョンに開きがありますね。

公式ページには、Vega 4.Xで追加された機能を用いたサンプルも公開されていますが、当然ながら、Vega 3.3.1が組み込まれたKibanaでは動作しません。

5. Kibanaに組み込まれたVegaのバージョンを確認する方法は?

ChromeでVegaのVisualize画面を表示し、デベロッパーツールを開きます。続いて、Console画面で以下のコマンドを実行してください。

VEGA_DEBUG

Vegaは3.3.1、Vega-Liteは2.4.0が組み込まれていることが分かります。

f:id:acro-engineer:20181211012945p:plain
Kibanaに組み込まれたVegaのバージョンを確認する

6. ダッシュボードでVegaを操作してダッシュボード全体にフィルタをかける方法は?

ダッシュボードに配置された通常のVisualizeは、クリックすることでContents Filterを作成し、ダッシュボード全体にフィルタをかけることができます。
Vegaの場合も同様にフィルタをかける方法はあるのでしょうか。

はい、あります。

公式ドキュメントには書かれていませんが、Kibana 6.4.0以降ではVegaからContents Filterの追加/削除を行う機能(関数)が組み込まれています。

# ダッシュボードにContents Filterを追加する
# query    :フィルタ内容
# index-pattern  :フィルタするインデックスパターン名
kibanaAddFilter( <query>, <index-pattern>)

先ほど開いた、航空データのVega Visualizeにフィルタ機能を追加してみましょう。

Vegaコードを開き、signals配下に以下を追加して保存します。

    {
      name: filter
      on: [
        {
          events: @airport:click 
          update: '''
            kibanaAddFilter({
                      match: {
                      OriginAirportID : {
                        query: datum.key,
                        type: 'phrase'
                    }}},'kibana_sample_data_flights')
          '''
        }
      ]
    }

f:id:acro-engineer:20181211015802p:plain
Vegaにフィルタ機能を追加

航空データダッシュボードを開いてフィルタ機能を確認してみましょう。
フィルタを実行する前です。データは298件。

f:id:acro-engineer:20181211020053p:plain
Vegaにフィルタ機能を追加したダッシュボード

地図上の適当なシンボルにカーソルを合わせて、クリック。

f:id:acro-engineer:20181211020152p:plain
Vegaにフィルタ機能を追加したダッシュボード

何やら、他のVisualizeの様子が変わりました。

f:id:acro-engineer:20181211020222p:plain
Vegaにフィルタ機能を追加したダッシュボード

ダッシュボード上部をみてみると、Contents Filterが追加されてデータが5件に絞り込まれていることが分かります。

f:id:acro-engineer:20181211020248p:plain
Vegaにフィルタ機能を追加したダッシュボード

他にも、指定したフィルタを解除する関数や、

kibanaRemoveFilter( <query>, <index-pattern>)

全てのフィルタを解除する関数。

kibanaRemoveAllFilters()

TimePickerを操作する関数も用意されています。

kibanaSetTimeFilter(<start>, <end>) 

7. Vegaをデバッグするには?

Vegaのデバッグデベロッパーツールにて「VEGA_DEBUG」オブジェクトを介して行います。 代表的なコマンドを紹介します。

dataの内容を表示する

# valuesの内容を表示
VEGA_DEBUG.view.data('values')

dataの内容をテーブル表示する

# valuesの内容をテーブル表示
console.table(VEGA_DEBUG.view.data('values'))

signalの値を取得する

# heightの値を取得
VEGA_DEBUG.view.signal('height')

signalの内容を任意の値に変更して実行する

# heightの値を100変更
VEGA_DEBUG.view.signal('height',100).run();

scaleの内容を表示する

# scale yの内容を表示
VEGA_DEBUG.view._runtime.scales.y

最後に

本記事ではVega利用におけるよくある7つの疑問に回答しました。 あとは文法を覚えれば(これが大変なのですが)、Vegaを自在に扱うことができるはずです。

Let's enjoy vega life !





Acroquest Technologyでは、キャリア採用を行っています。

  • ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
  • Elasticsearch等を使ったデータ収集/分析/可視化
  • マイクロサービス、DevOps、最新のOSSを利用する開発プロジェクト
  • 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長

少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。

ユーザに最高の検索体験を提供したいエンジニアWanted! - Acroquest Technology株式会社のエンジニア中途・インターンシップの求人 - Wantedlywww.wantedly.com