テンプレートと変数 - Amazon Managed Grafana

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

テンプレートと変数

このドキュメントトピックは、Grafana バージョン 8.x をサポートする Grafana ワークスペース向けに設計されています。

Grafana バージョン 10.x をサポートする Grafana ワークスペースについては、「」を参照してくださいGrafana バージョン 10 での作業

Grafana バージョン 9.x をサポートする Grafana ワークスペースについては、「」を参照してくださいGrafana バージョン 9 での作業

変数は値のプレースホルダーです。メトリクスクエリとパネルタイトルで変数を使用できます。変数を使用すると、よりインタラクティブで動的なダッシュボードを作成できます。サーバー、アプリケーション、センサー名などのものをメトリクスクエリでハードコーディングする代わりに、変数を代わりに使用できます。

変数は、ダッシュボードの上部にドロップダウンリストとして表示されます。ダッシュボードの上部にあるドロップダウンリストを使用して値を変更すると、パネルのメトリクスクエリに新しい値が反映されます。

これらは、ビューワーが視覚化をすばやく調整できるようにしたいが、完全な編集権限を与えたくない管理者にとって特に役立ちます。Grafana ビューワーは変数を使用できます。

変数とテンプレートを使用すると、ダッシュボードを単一ソースにすることができます。同じデータソースまたはサーバーが複数ある場合は、1 つのダッシュボードを作成し、変数を使用して表示内容を変更できます。これにより、メンテナンスと維持が簡単になります。

サポートされている変数タイプのリスト、および各変数タイプを追加する手順については、「」を参照してください。 可変タイプ

テンプレート

テンプレートは、変数を含む任意のクエリです。

例えば、複数のサーバーをモニタリングするダッシュボードを管理していた場合は、サーバーごとにダッシュボードを作成できます。または、次の例に示すように、1 つのダッシュボードを作成し、テンプレートクエリでパネルを使用できます。

wmi_system_threads{instance=~"$server"}

変数値は常に構文 を使用して URL に同期されますvar-<varname>=value

変数のベストプラクティス

変数ドロップダウンリストは、ダッシュボード設定 の変数リストにリストされている順序で表示されます。

頻繁に変更する変数を一番上に置き、ダッシュボードの左端に最初に表示されるようにします。

変数構文

パネルタイトルとメトリクスクエリは、次の 2 つの異なる構文を使用して変数を表示できます。

  • $varname この構文は、次の例のように読みやすいです: apps.frontend.$server.requests.count。ただし、単語の途中で変数を使用することはできません。

  • ${var_name} この構文は、式の途中で変数を補間する場合に使用します。

  • ${var_name:<format>} この形式により、Grafana が値を補間する方法をより詳細に制御できます。詳細については、「高度な変数形式のオプション」を参照してください。

クエリがデータソースに送信される前に、クエリは補間されます。つまり、変数は現在の値に置き換えられます。補間中、変数値は、クエリ言語の構文とその使用場所に準拠するようにエスケープされる場合があります。例えば、Prometheus クエリの正規表現式で使用される変数は、正規表現からエスケープされます。補間中の値エスケープの詳細については、データソース固有のドキュメントトピックを参照してください。

データソースのデフォルトフォーマットを上書きする高度な構文については、「」を参照してください高度な変数形式のオプション

その他の変数オプション

このセクションでは、使用可能な他の変数オプションについて説明します。

変数選択オプションの入力

選択オプションを使用して、可変オプションの選択を管理できます。すべての選択オプションはオプションであり、デフォルトではオフになっています。

複数値

このオプションをオンにすると、変数ドロップダウンリストで複数のオプションを同時に選択できます。詳細については、「複数値変数のフォーマット」を参照してください。

すべてを含める オプション

Grafana ワークスペースは、変数ドロップダウンリストにAllオプションを追加します。エンドユーザーがこのオプションを選択すると、すべての変数オプションが選択されます。

すべてのカスタム値

このオプションは、Include All オプションが選択されている場合にのみ表示されます。

All オプションの値を定義するには、Custom all value フィールドに regex、glob、または Lucene 構文を入力します。

デフォルトでは、 All値には結合式のすべてのオプションが含まれます。これは非常に長くなり、パフォーマンスの問題が発生する可能性があります。ワイルドカード正規表現のように、カスタムのオール値を指定する方がよい場合があります。

Custom all value オプションでカスタム正規表現、glob、または Lucene 構文を使用する場合、その構文はエスケープされないため、データソースの有効な値を考慮する必要があります。

高度な変数形式のオプション

変数補間の形式はデータソースによって異なりますが、デフォルトの形式を変更したい場合があります。

例えば、MySQL データソースのデフォルトは、複数の値を引用符 で区切って結合することです'server01','server02'。場合によっては、引用符なしでカンマ区切りの文字列を指定することもできます: server01,server02。これを行うには、次の高度な変数フォーマットオプションを使用します。

一般的な構文

構文: ${var_name:option}

無効なフォーマットオプションが指定されている場合、 がデフォルト、またはフォールバックオプションglobです。

CSV

複数の値を持つ変数をカンマ区切りの文字列としてフォーマットします。

servers = ['test1', 'test2'] String to interpolate: '${servers:csv}' Interpolation result: 'test1,test2'

分散型 - OpenTSDB

OpenTSDB のカスタム形式で複数の値を持つ変数をフォーマットします。

servers = ['test1', 'test2'] String to interpolate: '${servers:distributed}' Interpolation result: 'test1,servers=test2'

二重引用符

単一値変数と複数値変数をカンマ区切り"の文字列にフォーマットし、 で各値をエスケープし\"、各値を で引用符で囲みます"

servers = ['test1', 'test2'] String to interpolate: '${servers:doublequote}' Interpolation result: '"test1","test2"'

Glob - Graphite

複数の値を持つ変数を glob にフォーマットします (Graphite クエリの場合)。

servers = ['test1', 'test2'] String to interpolate: '${servers:glob}' Interpolation result: '{test1,test2}'

JSON

複数の値を持つ変数をカンマ区切りの文字列としてフォーマットします。

servers = ['test1', 'test2'] String to interpolate: '${servers:json}' Interpolation result: '["test1", "test2"]'

Lucene - OpenSearch

の Lucene 形式の複数の値を持つ変数をフォーマットします OpenSearch。

servers = ['test1', 'test2'] String to interpolate: '${servers:lucene}' Interpolation result: '("test1" OR "test2")'

パーセントエンコード

URL パラメータで使用する単一値変数と複数値変数をフォーマットします。

servers = ['foo()bar BAZ', 'test2'] String to interpolate: '${servers:percentencode}' Interpolation result: 'foo%28%29bar%20BAZ%2Ctest2'

パイプ

複数の値を持つ変数をパイプ区切りの文字列にフォーマットします。

servers = ['test1.', 'test2'] String to interpolate: '${servers:pipe}' Interpolation result: 'test1.|test2'

Raw

SQL クエリの一重引用符など、データソース固有の書式設定をオフにします。

servers = ['test1.', 'test2'] String to interpolate: '${var_name:raw}' Interpolation result: '{test.1,test2}'

[Regex] (正規表現)

複数の値を持つ変数を正規表現文字列にフォーマットします。

servers = ['test1.', 'test2'] String to interpolate: '${servers:regex}' Interpolation result: '(test1\.|test2)'

シングルクォート

単一値変数と複数値変数をカンマ区切り'の文字列にフォーマットし、 によって各値をエスケープ\'し、各値を で引用符で囲みます'

servers = ['test1', 'test2'] String to interpolate: '${servers:singlequote}' Interpolation result: "'test1','test2'"

SQLstring

単一値変数と複数値変数をカンマ区切り'の文字列にフォーマットし、 によって各値をエスケープ''し、各値を で引用符で囲みます'

servers = ["test'1", "test2"] String to interpolate: '${servers:sqlstring}' Interpolation result: "'test''1','test2'"

テキスト

単一値変数と複数値変数をテキスト表現にフォーマットします。単一の変数の場合、テキスト表現のみを返します。複数値変数の場合、テキスト表現を と組み合わせて返します+

servers = ["test1", "test2"] String to interpolate: '${servers:text}' Interpolation result: "test1 + test2"

複数値変数のフォーマット

複数の値が選択された変数を補間することは、変数が使用される特定のコンテキストで有効な文字列に複数の値をフォーマットする方法が単純ではないため、難しいです。Grafana は、各データソースプラグインが複数の値に使用する形式をテンプレート補間エンジンに通知できるようにすることで、この問題を解決しようとします。

注記

Grafana がすべての値を 1 つの文字列にフォーマットするには、変数のカスタムオール値オプションが空白である必要があります。空白のままにすると、Grafana はクエリ内のすべての値を連結 (結合) します。のようなものですvalue1,value2,value3。カスタムall値を使用する場合、代わりに *または のような値になりますall

Graphite データソースを使用した複数値変数

Graphite は glob 式を使用します。この場合、複数の値を持つ変数は、現在の変数値が host1host2、host3 {host1,host2,host3}であるかのように補間されます。

Prometheus または InfluxDB データソースを使用した複数値変数

InfluxDB と Prometheus は正規表現式を使用するため、同じ変数が として補間されます(host1|host2|host3)。すべての値も正規表現エスケープされます。そうでない場合、正規表現制御文字を持つ値は正規表現式を破棄します。

Elastic データソースを使用した複数値変数

Amazon OpenSearch は Lucene クエリ構文を使用するため、同じ変数が としてフォーマットされます("host1" OR "host2" OR "host3")。この場合、値に Lucene の制御語と引用符のみが含まれるように、すべての値をエスケープする必要があります。

フォーマットのトラブルシューティング

自動エスケープとフォーマットは問題を引き起こす可能性があります。特に InfluxDB と Prometheus では、正規表現構文の使用時に 変数を正規表現演算子コンテキストで使用する必要があるため、問題の背後にあるロジックを把握するのは難しい場合があります。

Grafana でこの自動正規表現エスケープとフォーマットを実行しない場合は、次のいずれかを実行する必要があります。

  • 複数値を含むすべてのオプションオプションをオフにします。

  • [raw 変数形式]({{< relref "advanced-variable-format-options.md#raw" >}}) を使用します。

正規表現を使用した変数のフィルタリング

正規表現クエリオプションを使用すると、変数クエリによって返されるオプションのリストをフィルタリングしたり、返されるオプションを変更したりできます。

このセクションでは、正規表現を使用して変数ドロップダウンリストの値をフィルタリングおよび変更する方法を示します。

正規表現クエリオプションを使用して、変数クエリによって返されるオプションのリストをフィルタリングするか、返されるオプションを変更します。詳細については、「正規表現」を参照してください。

以下のオプションリストでのフィルタリングの例:

backend_01 backend_02 backend_03 backend_04

01 または で終わるオプションのみが返されるようにフィルタリング02する

正規表現:

/.*[01|02]/

結果:

backend_01 backend_02

正規表現キャプチャグループを使用してテキストの一部を返すためのオプションのフィルタリングと変更

正規表現:

/.*(01|02)/

結果:

01 02

フィルタリングと変更 - Prometheus の例

オプションのリスト:

up{instance="demo.robustperception.io:9090",job="prometheus"} 1 1521630638000 up{instance="demo.robustperception.io:9093",job="alertmanager"} 1 1521630638000 up{instance="demo.robustperception.io:9100",job="node"} 1 1521630638000

正規表現:

/.*instance="([^"]*).*/

結果:

demo.robustperception.io:9090 demo.robustperception.io:9093 demo.robustperception.io:9100

名前付きテキストおよび値キャプチャグループを使用したフィルタリングと変更

名前付きキャプチャグループを使用すると、変数クエリによって返されるオプションから個別の「テキスト」部分と「値」部分をキャプチャできます。変数ドロップダウンリストには、選択できる各値のわかりやすい名前を含めることができます。

例えば、node_hwmon_chip_namesPrometheus メトリクスをクエリする場合、 chip_namechip値よりもフレンドリです。次の変数クエリ結果から始めます。

node_hwmon_chip_names{chip="0000:d7:00_0_0000:d8:00_0",chip_name="enp216s0f0np0"} 1 node_hwmon_chip_names{chip="0000:d7:00_0_0000:d8:00_1",chip_name="enp216s0f0np1"} 1 node_hwmon_chip_names{chip="0000:d7:00_0_0000:d8:00_2",chip_name="enp216s0f0np2"} 1 node_hwmon_chip_names{chip="0000:d7:00_0_0000:d8:00_3",chip_name="enp216s0f0np3"} 1

これを次の正規表現に渡します。

/chip_name="(?<text>[^"]+)|chip="(?<value>[^"]+)/g

次のドロップダウンリストが生成されます。

Display Name Value ------------ ------------------------- enp216s0f0np0 0000:d7:00_0_0000:d8:00_0 enp216s0f0np1 0000:d7:00_0_0000:d8:00_1 enp216s0f0np2 0000:d7:00_0_0000:d8:00_2 enp216s0f0np3 0000:d7:00_0_0000:d8:00_3

注: textおよび valueキャプチャグループ名のみがサポートされています。

パネルまたは行の繰り返し

テンプレート変数 を使用して動的ダッシュボードを作成できます。クエリ内のすべての変数は、クエリがデータベースに送信される前に変数の現在の値に拡張されます。変数を使用すると、すべてのサービスに対して 1 つのダッシュボードを再利用できます。

テンプレート変数は、ダッシュボード全体でクエリを動的に変更するのに非常に役立ちます。選択した値に基づいて Grafana で新しいパネルまたは行を動的に作成する場合は、繰り返し機能を使用できます。

パネルの繰り返し

Multi-value または Include all valueオプションがオンになっている変数がある場合は、パネルを 1 つ選択し、選択した値ごとにそのパネルを繰り返すように Grafana に指示できます。繰り返し機能は、パネル編集モードの全般タブにあります。

は、パネルの配置方法directionを制御します。

を選択するとhorizontal、パネルは に配置されます side-by-side。Grafana は、繰り返される各パネルの幅を自動的に調整して、行全体が塗りつぶされるようにします。現在、行上の他のパネルと繰り返しパネルを混在させることはできません。

を設定Max per rowして、行あたりのパネルの最大数を Grafana に指示します。デフォルトは 4 です。

を選択するとvertical、パネルは列の上から下に配置されます。繰り返されるパネルの幅は、繰り返される最初のパネル (元のテンプレート) の幅と同じです。

最初のパネル (元のテンプレート) にのみ変更を加えます。変更がすべてのパネルに適用されるには、動的なダッシュボードの再構築を開始する必要があります。これを行うには、変数値 (つまり、繰り返しの基準) を変更するか、ダッシュボードを再ロードします。

注記

パネルを繰り返すには、変数で 1 つ以上の項目を選択する必要があります。非表示にするためにパネルを 0 回繰り返すことはできません。

行の繰り返し

上記のパネルで説明したように、 Multi-valueまたは Include all value 選択オプションで変数を設定している場合は、行を繰り返すこともできます。

この機能を有効にするには、まずパネルの追加メニューを使用して新しいを追加する必要があります。次に、行タイトルを一時停止し、歯車ボタンを選択してRow Options設定パネルにアクセスします。その後、行を繰り返す変数を選択できます。

ベストプラクティスは、行タイトルにも変数を使用することです。