
GrafanaのQuery変数の設定オプションを1つずつ試してみた
はじめに
今回はAWSのコストと使用状況レポートをデータソースとしてAWSサービスごとの利用費をGrafanaで可視化したいと思います。
上記を実現するためには何が必要でしょうか?
AWSサービスはたくさんあるので、サービスごとにパネルを作成してクエリを実行するのは非効率ですね。
サービス名を変数として指定できればサービスごとのコストが簡単に取得できそうです。
ということで、サービス名を変数で取得してみましょう!
変数作成の流れ
まずはGrafanaが変数を取得して格納するまでの流れをイメージ図にしてみました。
上の図は次の流れになります。
① Grafanaからデータソースへクエリ(今回はproduct_servicenameを取得)
② クエリ結果を変数へ格納
③ ダッシュボードで変数を使用
ではやってみましょう!
前提条件として、利用したGrafanaはGrafana Cloudのversion 12.1.0-91295です。
#バージョン確認
$ curl -s -H "Authorization: Bearer <API_KEY>" https://<DashboardURL>/api/health | jq -r '.version'
12.1.0-91295
最終的なダッシュボード
まずは今回使用するダッシュボードです。
データソースはAWSのコストレポート(CUR)です。
左上のservice_nameにAWSサービスが変数として入ってます。
下図のようにドロップダウンから選択することができ、選択したサービスの利用料金が表示される簡易的なダッシュボードです。
それではこのダッシュボードを元に、変数の設定項目を深掘っていきましょう。
Query Variables
ダッシュボード > 設定 > 変数
の順に進み変数を設定します。
変数を追加をクリックします。
こちらが最初に添付したダッシュボードの設定です。
それでは1つずつ変数の設定を見ていきましょう。
Variable type
Variable typeは変数の種類です。
今回はクエリした結果を変数に代入するので、Queryを選択します。
その他のVariable Typeは以下を参照してください。
Variable Type次第で後続の設定項目が変わります。Name
Nameは変数名です。
今回はAWSサービスの名前なので、service_nameとしています。
パネルオプションに${Nameの値}と記載することで、この変数を呼び出すことができます。
例えば、作成するパネルの左上にタイトルが表示されています。
ここをAWSサービス名で表示したいとします。
その場合はパネルオプションのタイトルに $service_name
と入力するとこで、変数を呼び出すことができます。
Label
Labelは変数につけるラベルです。
画面だと左上の部分ですね。
ラベルを特に指定しない場合はNameの値が適用されます。
demo_label
という値をLabelに設定してみます。
Labelの表示が変わりましたね。
Nameで指定した変数名以外の表示名にしたい場合にはLabelを設定しましょう。
Description
Descriptionは説明です。
Descriptionを設定するとLabelの右にiマークが表示されます。
テスト
という文字を設定してみましょう。
iのマークにマウスを持っていくとテストという文字が表示されました。
変数の説明を追加したいときに使います。
非表示
非表示はダッシュボードの変数選択エリア(上部のドロップダウン)で何を非表示にするか。を設定します。
ちょっとややこしいですね...
選択肢はNothing, Variable, Labelがあります。
それぞれ試してみましょう。
Nothing
まずはNothingです。
特に変化はないですね。
これは非表示にする値をNothing(無し)にするので、言い換えると"すべて表示する"になります。
Variable
次にVariableです。
左上のドロップダウンが消えたのが分かりますか?
Variableは変数を非表示にする。ということです。
変数を非表示にすると、変数に紐づくラベルも非表示になりました。
意図的にユーザーに変数を見せたくない場合に使えそうです。
Label
では最後にLabelを選択します。
Label部分が消えました。
Labelを非表示にした場合は変数は表示されるようです。
クエリオプション
今回はVariable typeでQueryを選択したので、クエリ先のデータソースと、クエリを記載します。
クエリはproduct_servicename(AWSサービス名)を取得するクエリを書いてます。
SELECT DISTINCT product_servicename
FROM cur_database.cur_cost_export
WHERE year = '2025' AND month = '6'
AND product_servicename IS NOT NULL
ORDER BY product_servicename;
Regex
Regexは日本語にすると正規表現です。
変数の値を正規表現で絞り込んだり加工するための設定です。
例えば取得した変数の中から、特定のパターンに一致するものだけをリストに表示したい場合に使います。
今回のデータだとあまり使い道はないかもしれませんが、例えばサービス名にIoTという文字列を含むAWSサービスのみ抽出したい場合、Regexを
^.*IoT.*$
とすることで実現できます。
やってみましょう。
サービス名に"IoT"という文字列が含まれるAWSサービスのみが抽出されていますね。
クエリ結果から特定の部分を抽出したい場合や、特定条件に合致する値だけ変数に入れたい場合、クエリ側で絞ることも可能なケースも多いと思います。
取得するデータ量が多い場合は変数更新時のパフォーマンスが悪くなる可能性があるため、SQLで絞ることでパフォーマンス影響を少なくできると思います。
Regexの利点は既存のクエリを変更することなくGrafana上から絞り込みの設定ができることです。
ダッシュボードの利用者が動的に変数の絞り込み内容を変更したいなど、クエリと絞り込みを疎結合にしたい場合はRegexの利用を検討してみてください。
Sort
Sortはドロップダウンリストに表示する値の順序を設定します。
Disabledの場合は、クエリオプションによって返ってきた順序をそのまま使用します。
例えばAlphabetical(desc)
(アルファベットの逆順)を選択するとこのようになります。
Sortはお好みで設定してください。
更新
更新は、変数の値を更新するタイミングを設定します。
"変数の更新"というのは、例えば変数の中身が変わるケースです。
今回だと新たにAWSサービスを利用したことで、コスト一覧にAWSサービスが追加されるというようなケースです。
更新タイミングは2つ選択できます。
On dashboard loadの場合はダッシュボードを更新した際に変数の中身が更新されます。
On time range changeの場合は時間軸を更新した際に変数の中身が更新されます。
On dashboard load
更新タイミングをOn dashboard load
に設定して、変数の中身を変更します。
(先ほどのRegexを設定して、変数の中身を変えてみます。)
そのあとダッシュボードの時間軸をLast 60minからLast 5minに変更してみます。
On dashboard loadに設定しているため、時間軸の変更では変数が更新されないはずです。
結果、変数名は更新されませんでした。
次に⌘+rでページ自体を更新してみました。
すると変数の中身が更新されました。
想定通りの動きですね。
On dashboard load
は時間範囲を変えても変数の値は変わらないので、常に同じ条件でデータを見たい場合に便利です。
On time range change
画像は割愛しますが、On time range change
の場合は時間軸を変更した時点で変数の中身が変わりました。
On time range change
は時間範囲ごとに異なる値を動的に取得したい場合に便利です。
例えば、AWSサービスの利用費を月毎に変化させながら可視化したい。というケースではこちらの方が適切だと思います。
選択オプション
選択オプションは変数をどのように選択できるか、またはどのような値を選べるかを細かく制御するための設定です。
説明は画像に書かれている通りです。
Multi-value
まずはMulti-valueを有効にしてみます。
ダッシュボードの変数を見てみると、複数の項目を選択できるようになりました。
複数の変数を指定したい場合に便利な機能です。
Allow custom values
Allow custom valuesを選択した場合、変数のドロップダウンでカスタム変数を追加することができます。
例えば「AWS Custom Service」という架空のサービス名を変数として追加してみます。
すると、カスタム変数として追加され、パネル側のタイトルもカスタム変数が適用されました。
標準の選択肢以外の値を使いたい場合に便利な機能です。
Include All option
Include All optionを有効にするとCustom all valueという設定項目が増えますが、まずはそのままダッシュボードを確認します。
変数に新たにAllという項目が増えたのがわかります。
次にCustom all valueに設定を追加します。
「AWS Backup, AWS IoT, AWS Lambda」という値を追加してみます。
プルダウンのリストはInclude All optionと変わりません。
しかし、Allを選択すると、先ほどCustom all valueで設定したAWSサービスが選択されています。(右側のパネルに現在選択されている変数を表示しています)
今までのパネルだとAllに含まれるサービスが何なのか分からないので、パネルを右側に追加して、Allに含まれる変数を表示してみました。
Include All optionは全ての変数を一括で選択したい場合や、特定の変数のみをまとめて選択したい場合に使える機能です。
まとめ
今回はGrafanaのQuery変数の設定項目を一つずつ見ていきました。
なんとなくこんな感じになるんだろうな〜と思いつつ、実際にやってみるとこんな挙動なのか!という発見がありました。
変数は色々なケースで利用できるため、早いうちに覚えておくとダッシュボード構築が捗ります。
ぜひこの記事を参考にしながらお好みの変数を作ってみてください。