Open1

Grafanaの変数に表示名を持たせる

js4000alljs4000all

Grafanaでは、複数の値を変数としてグルーピングすることで、フィルターとして機能させたり、リピート機能で同じパネルを変数値の分だけ自動的に配置させたりできる。

コード値を変数として扱う際に、画面上にもコード値が表示されているのでは親切でない。そこで表示名機能を使うことでUXを向上できる。

https://grafana.com/docs/grafana/latest/dashboards/variables/add-template-variables/#add-a-query-variable

Some data sources let you provide custom “display names” for the values. For instance, the PostgreSQL, MySQL, and Microsoft SQL Server plugins handle this by looking for fields named __text and __value in the result.

これらのRDBMSでは、変数値を定義するクエリーで__text __valueという列を取得するようにするだけで、__valueが変数値に、__textが表示名になる。
パネルの定義情報のうち、クエリー内で変数を参照すると変数値として展開され、それ以外の項目(パネルのタイトルなど)で参照すると表示名として展開される。

変数var_equipの定義用クエリー
SELECT
  concat(area.name, ' ', equip.name) as __text,
  equip.id as __value
FROM equip
JOIN area ON area.id = equip.area_id
パネルのクエリー
SELECT
  m.unixtime,
  m.value,
  metric.name as metric
FROM meas m
JOIN metric ON metric.id = m.metric_id
WHERE
  metric.equip_id = ${var_equip:raw}
  AND $__unixEpochFilter(m.unixtime)
ORDER BY m.unixtime