スキップしてメイン コンテンツに移動

Grafanaダッシュボード上で「動的に書き換わる文字列」を表示する方法

家のダッシュボードをGrafanaで作って運用しています。

実際の画面のスクショ。本物はこれがリアルタイムで動く。
(電力は5秒更新、それ以外は5分更新)


Grafanaは時系列数値データをグラフ描画するのが専門なので、こういうダッシュボードはわりと簡単につくれる。


ではデータが数値でなかったら?

具体的には、左上のゴミ出し表示をしてる部分。


地味にゴミ出しの重要度で色が変わったりしている。
たとえばビン・カンは重要(2週間に1回しかない)だから黄色。


↑こういうのをGrafanaで作るにはどうする? というのが今回の話。


方法

元データは、ふつうの時系列数値データと同じようにDBに1件ずつ入れる。
time                      level display_text
----                      ----- ------------
2022-10-10T00:04:02+09:00 0     今日【可燃】
2022-10-10T12:04:02+09:00 1     明日【粉砕, 有害】
2022-10-11T00:04:02+09:00 1     今日【粉砕, 有害】
2022-10-11T12:04:04+09:00 0     明日【プラ】

これらのレコードはGrafanaとは別のプログラムで適当に定時INSERTしている。
ゴミ出しなので更新頻度は半日ごと。12時間に1回新しいデータが1行入る。

ダッシュボードに表示したいカラムはdisplay_textである。
データを表示するGrafana側のパネルとして「Stat」を選択。

Stat以外のVisualizationでも似たようなことはできるので、見た目の好みで選べばいいと思います。


クエリ

最新のレコード1件だけが取得されるようになっていればよい。

なので、クエリは適当にこんな感じにする。Group Byを消すのを忘れないこと。

「時系列で降順にして1件取得」
全件取ったあとで絞り込むより、最初からLIMIT使うほうが負荷低い(と期待)

No Dataの修正

上記の段階ではまだ「No Data」表示になっているはず。

ここで右ペインのValue Optionsを修正する。


※スクショはGrafana9.1.5
旧バージョンだと右ペインじゃなかったかもしれない。
Grafana6とかでも同じことができていたので大丈夫なはず。

Fields のプルダウンを開いて一番下の空白を選ぶ(バグが修正された新しい版では "テーブル名.フィールド名" で表記されている)。

すっごい分かりづらい

すると「No Data」だったのが「明日【可燃】」とかに書き換わる。あとは文字色とかスタイルを適当に修正すればOK。


重要度に応じて色を変える(オプショナル)

ゴミ出しレコードのlevel値に応じて色を変化させるパネルの作り方。
元データを再掲するとこんな感じ。
time                      level display_text
----                      ----- ------------
2022-10-10T00:04:02+09:00 0     今日【可燃】
2022-10-10T12:04:02+09:00 1     明日【粉砕, 有害】
2022-10-11T00:04:02+09:00 1     今日【粉砕, 有害】
2022-10-11T12:04:04+09:00 0     明日【プラ】

新規にStatパネルを作り、先程と同様最新1件のlevelを取得するクエリを書く。

次に右ペインのThresholdsを開き、このようにする。
重要度が高いほど目立つ色にする設定


あと同じくValue Mappingsを開き、このようにする。
アイコンぽくしつつ生の値もわかるようにする設定

プレビュー表示が以下のようになれば成功。

※文字がいっさい表示されない場合、背景色と同化して見えていない可能性がある。Stat style > Color mode を Background Gradient あたりに適当に変更してみる。

コメント