Grafana で $__timeFilter を使うときは $__from と $__to も検討しよう
その理由は…
- 日時のフォーマットを指定できて柔軟なクエリ生成が可能になる
- キャッシュを効かせやすくなる
の 2 点です。
$__timeFilter の挙動がキャッシュに向かない
Grafana には $__timeFilter
という便利な変数が用意されています。
この変数をクエリに書くだけで、指定した変数や文字列に対して今 Grafana で指定されている日時範囲の Between を実行時に生成してくれて、とても簡単に日時範囲指定とクエリを連動させることができます。
SELECT * FROM hoge_table
WHERE
$__timeFilter(my_timestamp)
↓
SELECT * FROM hoge_table
WHERE
my_timestamp >= '2024-12-01T12:34:56Z' AND
my_timestamp <= '2024-12-07T12:34:56Z'
※ 「Grafana 側で指定する日時範囲」とはこの画像にある機能のこと:
ただし、生成された SQL を見ると分かるように日時は秒単位まできっちり生成されます。
Grafana で可視化したい単位が「日」や「時」などの大きな単位で十分であり、なおかつデータソースがキャッシュ機能を備えている場合、この秒まで生成される機能は細かすぎて扱いにくいものとなるでしょう。
キャッシュヒットする期間が 1 秒しかありません。
※なんなら、レイテンシーなどを加味すると結局ヒットしないことでしょう。。
$__from と $__to はフォーマットを指定可
Grafana は $__from
と $__to
という変数も提供しています。
この変数は Grafana の日時範囲指定の From と To に入力されたそれぞれの日時に対応しています。さらに嬉しいことに、この変数は指定したフォーマットの形式で日時を生成させることが可能です。
例えば先程 $__timeFilter
を使ったクエリは以下のように書き直すことができます。
SELECT * FROM hoge_table
WHERE
my_timestamp >= '${__from:date:YYYY-MM-DD}' AND
my_timestamp <= '${__to:date:YYYY-MM-DD}'
↓
SELECT * FROM hoge_table
WHERE
my_timestamp >= '2024-12-01' AND
my_timestamp <= '2024-12-07'
少し記述量が増えましたが、これによって「日」までの単位でクエリを発行することができました。このように $__from
と $__to
は柔軟な日時発行が可能です。これによりユースケースに応じたクエリの発行、例えばキャッシュヒットする回数を大きく上昇させるクエリ発行が可能になります。
その他のフォーマットの指定方法はドキュメントをご覧ください。
終わりに
Grafana で $__timeFilter
を使うときは $__from
と $__to
もぜひ検討してみてください。
前者は便利な変数ですが、後者を使うと日時のフォーマット指定が可能になります。そのため、よりユースケースにあったクエリ(例えばキャッシュに最適なクエリなど)を発行できるはずです。
最後までお読みいただきありがとうございました。
Discussion