はじめに
ここまでのシリーズ記事でinfluxdbとgrafanaを使って株価のローソク足パネルを作ってきました。
この記事では、grafanaの変数定義とパネルの複製機能を使って、簡易に各tickerのパネルを生成できる様に設定をします。
設定
変数の定義
Dashboard settingsを開いて(Dashboard上部のギアのマーク)、Variablesを選択、Newをクリック
- Name : Tickerと入力
- Type : Queryを選択
- Queryのテキストフィールドに下記を入力
from(bucket: "influxdb_stock_prices_ver01") // 自分のbucket名に合わせる
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r["_measurement"] == "stock prices")
|> group(columns: ["SYMBOL"]) // tickerに対応するタグ名に合わせる
|> distinct(column: "SYMBOL") // 同上
|> keep(columns: ["_value"])
- Refresh : "On dashboard load"を選択
- Selection option : Multi-valueのスイッチをonにする
- Preview of valuesにtickerの例が表示されていることを確認
- Updateをクリック
パネル設定での変数の利用、複製の設定
上記作業で、Dashboardの表示に戻ると、上部に変数選択のドロップダウンリストが追加されているはずです。このドロップダウンリストで選択した内容は、Dashboardの各種設定で、$tickerという変数名で使えるようになります。
また、パネルの設定のRepeat機能を使うことで、同じ形式のパネルを選択した変数の個数分複製することが出来るようになります。
-
複製の設定
- Panel optionsの中にRepeat optionsの部分でRepeat by variableで複製を作りたい変数名を選択(ここではticker)
-
Queryでの変数の利用
パネル設定のQueryで定義された変数を使います。${ticker}で変数が展開されます。クォーテーション""で囲うのを忘れずに。
from(bucket: "influxdb_stock_prices_ver01") // bucket名に合わせる
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r["_measurement"] == "stock prices")
|> filter(fn: (r) => r["SYMBOL"] == "${ticker}")
|> filter(fn: (r) => r["_field"] == "close" or r["_field"] == "high" or r["_field"] == "low" or r["_field"] == "open" or r["_field"] == "volume" or r["_field"] == "SMA" or r["_field"] == "Upper Bollinger Band" or r["_field"] == "Lower Bollinger Band")
Dashboard画面をリロードしないと反映されないのでご注意ください。
参考にした記事
不明点など
- legendのoverride設定がうまく複製されたパネルに反映されていないかもしれません。そもそもlegendがすぐ消えてしまったりといった挙動について良く把握できてません。