

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

# テンプレートおよび変数
<a name="templates-and-variables"></a>

****  
このドキュメントのトピックは、**Grafana バージョン 8.x** をサポートする Grafana ワークスペース向けです。  
Grafana バージョン 10.x をサポートする Grafana ワークスペースについては、「[Grafana バージョン 10 での作業](using-grafana-v10.md)」を参照してください。  
Grafana バージョン 9.x をサポートする Grafana ワークスペースについては、「[Grafana バージョン 9 での作業](using-grafana-v9.md)」を参照してください。

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

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

これらは、ビューワーが視覚化をすばやく調整できるようにしたいが、完全な編集アクセス許可を付与したくない管理者にとって特に便利です。Grafana ビューワーは変数を使用できます。

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

サポートされている変数タイプのリスト、各変数タイプの追加手順については、「[変数タイプ](variables-types.md)」を参照してください。

## テンプレート
<a name="templates"></a>

 *[テンプレート]*は、変数を含むすべてのクエリです。

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

```
wmi_system_threads{instance=~"$server"}
```

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

## 変数のベストプラクティス
<a name="variable-best-practices"></a>

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

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

## 変数構文
<a name="variable-syntax"></a>

 パネルタイトルとメトリクスクエリは、次の 2 つの異なる構文を使用して変数を参照できます。
+  `$varname` これは次の例のように読みやすい構文です。`apps.frontend.$server.requests.count`ただし、単語の途中で変数を使用することができません。
+  `${var_name}` この構文は式の途中で変数を補間する場合に使用します。
+  `${var_name:<format>}` この形式により、Grafana が値を解釈する方法をより細かく制御できます。詳細については、「[高度な変数フォーマットオプション](#advanced-variable-format-options)」を参照してください。

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

 データソースのデフォルトのフォーマットを上書きする高度な構文については、「[高度な変数フォーマットオプション](#advanced-variable-format-options)」を参照してください。

# 変数タイプ
<a name="variables-types"></a>

****  
このドキュメントのトピックは、**Grafana バージョン 8.x** をサポートする Grafana ワークスペース向けです。  
Grafana バージョン 10.x をサポートする Grafana ワークスペースについては、「[Grafana バージョン 10 での作業](using-grafana-v10.md)」を参照してください。  
Grafana バージョン 9.x をサポートする Grafana ワークスペースについては、「[Grafana バージョン 9 での作業](using-grafana-v9.md)」を参照してください。

 Grafana は、変数のタイプをいくつか使用します。


|  変数タイプ  |  説明  | 
| --- | --- | 
|  クエリ  |  メトリクス名、サーバー名、センサー ID、データセンターなど、クエリによって生成された値のリストです。詳細については、「[クエリ変数の追加](#add-a-query-variable)」を参照してください。 | 
|  カスタム  |  カンマ区切りリストを使用して変数オプションを手動で定義します。詳細については、「[カスタム変数の追加](#add-a-custom-variable)」を参照してください。 | 
|  テキストボックス  |  任意のデフォルト値を使用してテキスト入力フィールドを表示します。詳細については、「[テキストボックス変数の追加](#add-a-text-box-variable)」を参照してください。 | 
|  定数  |  非表示の定数を定義します。詳細については、「[定数変数の追加](#add-a-constant-variable)」を参照してください。 | 
|  データソース  |  ダッシュボード全体のデータソースをすばやく変更します。詳細については、「[データソース変数の追加](#add-a-data-source-variable)」を参照してください。 | 
|  間隔  |  間隔変数は時間範囲を表します。詳細については、「[間隔変数の追加](#add-an-interval-variable)」を参照してください。 | 
|  アドホックフィルター  |  データソースのすべてのメトリクスクエリに自動的に追加されるキー/値のフィルターを指します (InfluxDB 、Prometheus、OpenSearch のみ)。詳細については、「[アドホックフィルターの追加](#add-ad-hoc-filters)」を参照してください。 | 
|  グローバル変数  |  クエリエディタの式で使用できる組み込み変数です。詳細については、「[グローバル変数](#global-variables)」を参照してください。 | 
|  連鎖変数  |  変数クエリには、他の変数を含めることができます。詳細については、「[連鎖変数](#chained-variables)」を参照してください。 | 

## クエリ変数の追加
<a name="add-a-query-variable"></a>

 クエリ変数を使用すると、メトリクス名、タグ値、またはキーのリストを返すデータソースクエリを記述できます。例えば、クエリ変数は、サーバー名、センサー ID、またはデータセンターのリストを返す場合があります。変数値は、データソースクエリでオプションを動的に取得するにつれて変化します。

 クエリ式には、他の変数への参照を含めることができ、実際にはリンクされた変数を作成できます。Grafana はこれを検出し、リンクされた変数のいずれかが変更されると変数を自動的に更新します。

### クエリ式
<a name="query-expressions"></a>

クエリ式はデータソースごとに異なります。詳細については、[データソースに接続する](AMG-data-sources.md)のデータソースに関するドキュメントを参照してください。

### 一般的なオプションの入力
<a name="enter-general-options"></a>

**クエリ変数の一般的なオプションを入力するには**

1. 変数を作成するダッシュボードに移動し、ページ上部の **[ダッシュボード設定]** (歯車) アイコンを選択します。

1.  **[変数]** タブで、**[新規]** を選択します。

1.  変数の**[名前]**を入力します。

1.  **[タイプ]** 一覧で、**[クエリ]** を選択します。

1. (オプション) **[ラベル]** には、変数ドロップダウンリストの表示名を入力します。表示名を入力しない場合、ドロップダウンラベルは変数名になります。

1.  **[非表示]** オプションを次から選択します。
   +  **選択なし (空白)** – 変数ドロップダウンリストには、変数の**名前**または**ラベル**値が表示されます。これがデフォルトです。
   +  **[ラベル]**– 変数ドロップダウンリストには、選択した変数値と下矢印のみが表示されます。
   +  **[変数]** – ダッシュボードには変数ドロップダウンリストが表示されません。

### クエリオプションの入力
<a name="enter-query-options"></a>

**クエリ変数のクエリオプションを入力するには**

1. **[データソース]** リストで、クエリのターゲットデータソースを選択します。データソースの詳細については、「[データソースに接続する](AMG-data-sources.md)」を参照してください。

1.  **[更新]** リストで、変数がオプションを更新するタイミングを選択します。
   +  **[なし]** - 変数クエリをキャッシュし、値は更新されません。これは、値が変更されない場合は問題ありませんが、動的で大きく変更される場合は問題になります。
   +  **[ダッシュボード読み込み時]** - ダッシュボードが読み込まれるたびにデータソースにクエリを実行します。これにより、ダッシュボードの読み込みが遅くなります。ダッシュボードを初期化する前に変数クエリを完了する必要があるためです。
   +  **[時間範囲の変更時]** - ダッシュボードの時間範囲が変更されたときにデータソースにクエリを実行します。このオプションは、変数のクエリオプションに時間範囲フィルターが含まれているか、ダッシュボードの時間範囲に依存している場合にのみ使用します。

1.  **[クエリ]** フィールドにクエリを入力します。
   +  クエリフィールドはデータソースによって異なります。一部のデータソースには、カスタムクエリエディタがあります。
   + 1 つの入力フィールドクエリエディタにより多くのスペースが必要な場合は、フィールドの右下隅にある線で一時停止し、下にドラッグして展開します。

1. (オプション) **[正規表現]** フィールドに正規表現を入力して、データソースクエリによって返される名前の特定部分をフィルタリングまたはキャプチャします。例については「[正規表現での変数のフィルタリング](templates-and-variables.md#filter-variables-with-regex)」を参照してください。

1. **[ソート]** リストで、ドロップダウンリストに表示される値のソート順序を選択します。デフォルトのオプション **[無効]** では、データソースクエリによって返されるオプションの順序が使用されます。

1. (オプション) **[選択オプション]** を入力します。詳細については、「[変数選択オプションの入力](templates-and-variables.md#enter-variable-selection-options)」を参照してください。

1.  **[値のプレビュー]** では、Grafana ワークスペースに現在の変数値の一覧が表示されます。これらを確認して、期待どおりであることを確認します。

1.  **[追加]** を選択してダッシュボードに変数を追加します。

## カスタム変数の追加
<a name="add-a-custom-variable"></a>

 変更されない値には*カスタム*変数を使用します。これは、数値、文字列、またはその他の変数である場合があります。

例えば、サーバー名やリージョン名が変更されない場合は、クエリ変数ではなくカスタム変数として作成できます。これらは変更されないため、他のクエリ変数ではなく、連鎖変数で使用できます。これにより、連鎖変数が更新されたときに Grafana が送信する必要があるクエリの数が減少します。連鎖変数の詳細については、「[連鎖変数](#chained-variables)」を参照してください。

### 一般的なオプションの入力
<a name="variables-enter-general-options"></a>

**カスタム変数のクエリオプションを入力するには**

1.  変数を作成するダッシュボードに移動し、ページ上部の **[ダッシュボード設定]** (歯車) アイコンを選択します。

1.  **[変数]** タブで、**[新規]** を選択します。

1.  変数の**名前**を入力します。

1.  **[タイプ]** リストで **[カスタム]** を選択します。

1. (オプション) **[ラベル]** には、変数ドロップダウンリストの表示名を入力します。表示名を入力しない場合、ドロップダウンラベルは変数名になります。

1.  **[非表示]** オプションを次から選択します。
   +  **選択なし (空白)** – 変数ドロップダウンリストには、変数の**名前**または**ラベル**値が表示されます。これがデフォルトです。
   +  **[ラベル]** – 変数ドロップダウンリストには、選択した変数値と下矢印のみが表示されます。
   +  **[変数]** – ダッシュボードには変数ドロップダウンリストが表示されません。

### カスタムオプションの入力
<a name="enter-custom-options"></a>

**カスタム変数のカスタムオプションを入力するには**

1. **[カンマで区切られた値]** リストで、この変数の値をカンマ区切りリストに入力します。コロンで区切られた数値、文字列、その他の変数、またはキーと値のペアを含めることができます。

1.  (オプション) **[選択オプション]** を入力します。詳細については、「[変数選択オプションの入力](templates-and-variables.md#enter-variable-selection-options)」を参照してください。

1.  **[値のプレビュー]** では、Grafana ワークスペースに現在の変数値の一覧が表示されます。これらを確認して、期待どおりであることを確認します。

1. **[追加]** を選択してダッシュボードに変数を追加します。

## テキストボックス変数の追加
<a name="add-a-text-box-variable"></a>

 *テキストボックス*変数は、任意のデフォルト値を使用してテキスト入力フィールドを表示します。これは、任意の値を入力できるため、最も柔軟な変数です。カーディナリティの高いメトリクスがある場合や、ダッシュボード内の複数のパネルを同時に更新する場合は、このタイプの変数を使用します。

### 一般的なオプションの入力
<a name="text-box-enter-general-options"></a>

**テキストボックス変数の一般的なオプションを入力するには**

1.  変数を作成するダッシュボードに移動し、ページ上部の **[ダッシュボード設定]** (歯車) アイコンを選択します。

1.  **[変数]** タブで、**[新規]** を選択します。

1.  変数の**名前**を入力します。

1.  **[タイプ]** リストで、**[テキストボックス]** を選択します。

1. (オプション) **[ラベル]** には、変数ドロップダウンリストの表示名を入力します。表示名を入力しない場合、ドロップダウンラベルは変数名になります。

1.  **[非表示]** オプションを次から選択します。
   +  **選択なし (空白)** – 変数ドロップダウンリストには、変数の**名前**または**ラベル**値が表示されます。これがデフォルトです。
   +  **[ラベル]**– 変数ドロップダウンリストには、選択した変数値と下矢印のみが表示されます。
   +  **[変数]** – ダッシュボードには変数ドロップダウンリストが表示されません。

### テキストオプションの入力
<a name="enter-text-options"></a>

**テキストボックス変数のテキストオプションを入力するには**

1. (オプション) **[デフォルト値]** フィールドで、変数のデフォルト値を選択します。このフィールドに何も入力しない場合、Grafana はテキストを入力できる空のテキストボックスを表示します。

1.  **[値のプレビュー]** には現在の変数値の一覧が表示されます。これらを確認して、期待どおりであることを確認します。

1. **[追加]** を選択してダッシュボードに変数を追加します。

## 定数変数の追加
<a name="add-a-constant-variable"></a>

非表示の定数を定義するには、*定数*変数を使用します。定数変数は、共有するダッシュボードに対するメトリックパスの接頭辞に有用です。ダッシュボードをエクスポートすると、定数変数がインポートオプションに変換されます。

定数変数は複数設定できません。各定数変数は 1 つの値のみを保持します。更新するには、変数設定を更新する必要があります。

定数変数は、クエリに含める必要がある複素数値があっても、単一クエリすべてに再入力したくない場合に便利です。例えば、「`i-0b6a61efe2ab843gg`」というサーバーパスがある場合、それを「`$path_gg`」という変数に置き換えることができます。

### 一般的なオプションの入力
<a name="constant-variable-enter-general-options"></a>

**定数変数の一般的なオプションを入力するには**

1.  変数を作成するダッシュボードに移動し、ページ上部の **[ダッシュボード設定]** (歯車) アイコンを選択します。

1.  **[変数]** タブで、**[新規]** を選択します。

1.  変数の**名前**を入力します。

1.  **[タイプ]** リストで **[Constant]** (定数) を選択します。

1. (オプション) **[ラベル]** には、変数ドロップダウンリストの表示名を入力します。表示名を入力しない場合、ドロップダウンラベルは変数名になります。

1.  **[非表示]** オプションを次から選択します。
   +  **[変数]** – ダッシュボードには変数ドロップダウンリストが表示されません。これがデフォルトです。
   +  **選択なし (空白)** – 変数ドロップダウンリストには、変数の**名前**または**ラベル**値が表示されます。
   +  **[ラベル]**– 変数ドロップダウンリストには、選択した変数値と下矢印のみが表示されます。

### 定数オプションの入力
<a name="enter-constant-options"></a>

**定数変数の定数オプションを入力するには**

1. **[値]** フィールドに変数値を入力します。英数字と記号を入力できます。高度な変数の形式オプションを使用する場合は、ワイルドカードを使用することもできます。詳細については、「[高度な変数フォーマットオプション](templates-and-variables.md#advanced-variable-format-options)」を参照してください。

1. **[値のプレビュー]** では、Grafana ワークスペースに現在の変数値が表示されます。これを確認して、期待どおりであることを確認します。

1. **[追加]** を選択してダッシュボードに変数を追加します。

## データソース変数の追加
<a name="add-a-data-source-variable"></a>

ダッシュボード全体のデータソースをすばやく変更するには、*データソース*変数を使用できます。データソースのインスタンスが複数ある場合、おそらく異なる環境にある場合に便利です。

### 一般的なオプションの入力
<a name="data-source-enter-general-options"></a>

**データソース変数の一般的なオプションを入力するには**

1. 変数を作成するダッシュボードに移動し、ページ上部の **[ダッシュボード設定]** (歯車) アイコンを選択します。

1.  **[変数]** タブで、**[新規]** を選択します。

1.  変数の**名前**を入力します。

1.  **[タイプ]** リストで、**[Datasource]** を選択します。

1. (オプション) **[ラベル]** には、変数ドロップダウンリストの表示名を入力します。表示名を入力しない場合、ドロップダウンラベルは変数名になります。

1.  **[非表示]** オプションを次から選択します。
   +  **選択なし (空白)** – 変数ドロップダウンリストには、変数の**名前**または**ラベル**値が表示されます。これがデフォルトです。
   +  **[ラベル]**– 変数ドロップダウンリストには、選択した変数値と下矢印のみが表示されます。
   +  **[変数]** – ダッシュボードには変数ドロップダウンリストが表示されません。

### データソースオプションの入力
<a name="enter-data-source-options"></a>

**データソース変数のデータソースオプションを入力するには**

1.  **[タイプ]** リストで、変数のターゲットデータソースを選択します。データソースの詳細については、「[データソースに接続する](AMG-data-sources.md)」を参照してください。

1. (オプション) **[インスタンス名フィルター]** には、変数値のドロップダウンリストからデータソースインスタンスを選択する正規表現フィルターを入力します。このフィールドは空のままにして、すべてのインスタンスを表示します。

1.  (オプション) **[選択オプション]** を入力します。詳細については、「[変数選択オプションの入力](templates-and-variables.md#enter-variable-selection-options)」を参照してください。

1.  **[値のプレビュー]** には現在の変数値の一覧が表示されます。これらを確認して、期待どおりであることを確認します。

1. **[追加]** を選択してダッシュボードに変数を追加します。

## 間隔変数の追加
<a name="add-an-interval-variable"></a>

*間隔*変数を使用して、`1m`、`1h`、`1d`などの時間範囲を表します。これらはダッシュボード全体の group-by-time コマンドと考えることができます。間隔変数は、視覚化でのデータのグループ化方法を変更します。また、[自動] オプションを使用して、時間範囲ごとに複数のデータポイントを返すこともできます。

間隔変数を時間 (InfluxDB の場合)、日付ヒストグラム間隔 (OpenSearch の場合) でグループ化するパラメータとして、または要約関数パラメータ (Graphite の場合) として使用できます。

### 一般的なオプションの入力
<a name="interval-variable-enter-general-options"></a>

**間隔変数の一般的なオプションを入力するには**

1.  変数を作成するダッシュボードに移動し、ページ上部の **[ダッシュボード設定]** (歯車) アイコンを選択します。

1.  **[変数]** タブで、**[新規]** を選択します。

1.  変数の**名前**を入力します。

1.  **[タイプ]** リストで **[間隔]** を選択します。

1. (オプション) **[ラベル]**には、変数ドロップダウンリストの表示名を入力します。表示名を入力しない場合、ドロップダウンラベルは変数名になります。

1.  **[非表示]** オプションを次から選択します。
   +  **選択なし (空白)** – 変数ドロップダウンリストには、変数の**名前**または**ラベル**値が表示されます。これがデフォルトです。
   +  **[ラベル]**– 変数ドロップダウンリストには、選択した変数値と下矢印のみが表示されます。
   +  **[変数]** – ダッシュボードには変数ドロップダウンリストが表示されません。

### 間隔オプションの入力
<a name="enter-interval-options"></a>

**間隔変数の間隔オプションを入力するには**

1.  **[値]** フィールドに、変数ドロップダウンリストに表示する時間間隔を入力します。次の時間単位に対応しています: `s (seconds)`、`m (minutes)`、`h (hours)`、`d (days)`、`w (weeks)`、`M (months)`、`y (years)`。次のデフォルト値を使用または編集することもできます: `1m,10m,30m,1h,6h,12h,1d,7d,14d,30d`。

1. (オプション) `auto`オプションをリストに追加する場合は、**[Auto Option]** を(自動オプション) オンにします。このオプションを使用して、現在の時間範囲を分割して現在の`auto`時間範囲を計算する回数を指定します。オンにすると、さらに次の 2 つのオプションが表示されます。
   +  **[ステップ数]** – **[最大データポイント]**クエリオプションと同様に、現在の時間範囲を分類して値を計算する回数を選択します。例えば、現在の表示時間範囲が 30 分の場合、`auto` 間隔はデータを 1 分単位× 30 でグループ化します。デフォルト値は 30 ステップです。
   +  **[最小間隔]** – ステップ数の間隔が時間を分類しない最小しきい値です。引き続き 30 分の例を挙げる場合、最小間隔を `2m` に設定すると、Grafana はデータを 2 分単位× 15 でグループ化します。

1.  **[値のプレビュー]** には現在の変数値の一覧が表示されます。これらを確認して、期待どおりであることを確認します。

1. **[追加]** を選択してダッシュボードに変数を追加します。

### 間隔変数の例
<a name="interval-variable-examples"></a>

 Graphite 関数でテンプレート変数 `myinterval` を使用する例: 

```
summarize($myinterval, sum, false)
```

 より複雑な Graphite の例: 

```
groupByNode(summarize(movingAverage(apps.$app.$server.counters.requests.count, 5), '$interval', 'sum', false), 2, 'sum')
```

## アドホックフィルターの追加
<a name="add-ad-hoc-filters"></a>

1 回限りのフィルターまたは*アドホック*フィルターを使用して、指定されたデータソースを使用するすべてのメトリクスクエリに自動的に追加されるキー/値フィルターを追加できます。他の変数とは異なり、クエリでは 1 回限りのフィルターを使用しません。代わりに、アドホックフィルターを使用して既存のクエリのフィルターを書き込みます。

**注記**  
**注:** 1 回限り、またはアドホックのフィルター変数は、InfluxDB 、Prometheus、および OpenSearch データソースでのみ機能します。

### 一般的なオプションの入力
<a name="ad-hoc-filters-enter-general-options"></a>

**アドホックフィルターの一般的なオプションを入力するには**

1. 変数を作成するダッシュボードに移動し、ページ上部の **[ダッシュボード設定]** (歯車) アイコンを選択します。

1.  **[変数]** タブで、**[新規]** を選択します。

1.  変数の**名前**を入力します。

1.  **[タイプ]** リストで、**[Ad hoc filters]** (アドホックフィルター) を選択します。

1. (オプション) **[ラベル]** には、変数ドロップダウンリストの表示名を入力します。表示名を入力しない場合、ドロップダウンラベルは変数名になります。

1.  **[非表示]** オプションを次から選択します。
   +  **選択なし (空白)** – 変数ドロップダウンリストには、変数の**名前**または**ラベル**値が表示されます。これがデフォルトです。
   +  **[ラベル]**– 変数ドロップダウンリストには、選択した変数値と下矢印のみが表示されます。
   +  **[変数]** – ダッシュボードには変数ドロップダウンリストが表示されません。

### オプションの入力
<a name="ad-hoc-enter-options"></a>

**アドホックフィルターのオプションを入力するには**

1.  **[データソース]** リストで、ターゲットデータソースを選択します。データソースの詳細については、「[データソースに接続する](AMG-data-sources.md)」を参照してください。

1. **[追加]** を選択してダッシュボードに変数を追加します。

### アドホックフィルターの作成
<a name="create-ad-hoc-filters"></a>

アドホックフィルターは、利用可能な最も複雑で変更可能な変数オプションの 1 つです。変数オプションの通常リストの代わりに、この変数によりダッシュボード全体のアドホッククエリを構築できます。この方法で適用するフィルターは、ダッシュボード上のすべてのパネルに適用されます。

## 連鎖変数
<a name="chained-variables"></a>

*連鎖変数*は、*リンクされた変数*または*ネストされた変数*とも呼ばれ、変数クエリ内において 1 つ以上の他の変数を持つクエリ変数です。このセクションでは、連鎖変数がどのように機能するかを説明し、連鎖変数を使用するダッシュボード例へのリンクを共有します。

連鎖変数クエリはデータソースごとに異なりますが、前提はすべて同様です。連鎖変数クエリは、それらをサポートする任意のデータソースで使用できます。

複雑なリンクされたテンプレートダッシュボードを 5 階層または 10 階層深く構築できます。技術的には、どれだけ深く、複雑にできるかに制限はありませんが、リンクが多いほどクエリの負荷が大きくなります。

### ベストプラクティスとヒント
<a name="variables-best-practices-and-tips"></a>

以下のプラクティスにより、ダッシュボードと変数の使用が容易になります。

#### 新しい連鎖変数の作成
<a name="creating-new-linked-variables"></a>
+  連鎖変数は親子の依存関係を作成します。ラダーまたはツリー構造として想定できます。
+ 新しい連鎖変数を作成する最も簡単な方法は、新しい変数の基盤となる変数をコピーすることです。変数リストで、変数エントリの右側にある **[Duplicate variable]** (変数の複製) アイコンを選択してコピーを作成します。その後、親変数のクエリに追加できます。
+ この方法で作成した新しい連鎖変数は、リストの下部に表示されます。リストに論理的順序を付けるには、変数をリスト内の別の位置にドラッグします。

#### 変数の順序
<a name="variable-order"></a>

ダッシュボードの変数リストにある変数の順序を変更するには、各エントリの右側にある上下の矢印を選択します。Grafana ワークスペースは、このリストに従って左から右に変数ドロップダウンリストを一覧表示し、左端のリストの上部に変数を表示します。
+  子変数の前に、親変数と依存関係のない変数のリストを作成します。
+  各変数は、依存している変数に従う必要があります。
+ UI は、依存関係を持つ変数を示しません。変数を論理的な順序で一覧表示して、エンドユーザー (および自分自身) に明確にします。

#### 複雑さに関する考慮事項
<a name="complexity-consideration"></a>

変数の依存関係のレイヤーが多いほど、変数を変更した後にダッシュボードを更新するのに時間がかかります。

例えば、4 項目がリンクされた一連の変数 (国、地域、サーバー、メトリック) があり、ルート変数値 (国) を変更する場合、Grafana ワークスペースはダッシュボード内の視覚化を更新する前に、すべての従属変数に対してクエリを実行する必要があります。

## グローバル変数
<a name="global-variables"></a>

 Grafana には、クエリエディタの式で使用できるグローバル組み込み変数があります。このトピックでは、それらをアルファベット順に一覧表示し、定義します。これらの変数は、クエリ、ダッシュボードリンク、パネルリンク、データリンクに役立ちます。

### \$1\$1\$1dashboard
<a name="global-variable-dashboard"></a>

この変数は、現在のダッシュボードの名前です。

### \$1\$1\$1from および \$1\$1\$1to
<a name="global-variable-from-and-__to"></a>

Grafana には、「`$__from`」と「`$__to`」の 2 つの組み込み時間範囲変数があります。これらは現在、デフォルトでは常にエポックミリ秒として補間されていますが、日付の書式設定をユーザーが管理できます。


|  構文  |  結果の例  |  説明  | 
| --- | --- | --- | 
|  \$1\$1\$1\$1from\$1  |  1594671549254  |  Unix エポックミリ秒  | 
|  \$1\$1\$1\$1from:date\$1  |  2020-07-13T20:19:09.254Z  |  引数なし、デフォルトは ISO 8601/RFC 3339  | 
|  \$1\$1\$1\$1from:date:iso\$1  |  2020-07-13T20:19:09.254Z  |  ISO 8601/RFC 3339  | 
|  \$1\$1\$1\$1from:date:seconds\$1  |  1594671549  |  Unix エポック秒  | 
|  \$1\$1\$1\$1from:date:YYYY-MM\$1  |  2020-07  |  任意のカスタムデータ形式。詳細については、「[表示](https://momentjs.com/docs/#/displaying/)」を参照してください。 | 

上記の構文は「`${__to}`」を使用しても機能します。

この変数は URL でも使用できます。例えば、6 時間前から現在までの時間範囲を示すダッシュボードにエンドユーザーを送信するには、次の URL を使用します。https://play.grafana.org/d/000000012/grafana-play-home?viewPanel=2&orgId=1?from=now-6h&to=now 

### \$1\$1\$1interval
<a name="global-variable-interval"></a>

`$__interval` 変数を時間 (InfluxDB 、Myself、Postgres、MSSQL の場合)、日付ヒストグラム間隔 (OpenSearch の場合) でグループ化するパラメータとして、または*[要約]*関数パラメータ (Graphite の場合) として使用できます。

Grafana ワークスペースは、クエリで時間別にグループ化するために使用できる間隔を自動的に計算します。グラフに表示されるデータポイントよりも多い場合、クエリはより長い間隔でグループ化することで、より効率的になります。例えば、3 か月分のデータを調べる場合、1 日でグループ化する方が 10 秒でグループ化するよりも効率的です。グラフは同じように見え、クエリは高速になります。`$__interval` は、時間範囲とグラフの幅 (ピクセル数) を使用して計算されます。

 概算: `(from - to) / resolution` 

例えば、時間範囲が 1 時間でグラフが全画面表示の場合、間隔は `2m` で計算され、ポイントは 2 分間隔でグループ化されます。時間範囲が 6 か月で、グラフが全画面表示の場合、間隔は `1d` (1 日) で、ポイントは日ごとにグループ化されます。

 InfluxDB データソースでは、レガシー変数 `$interval` は同じ変数です。代わりに `$__interval` を使用します。

 InfluxDB データソースと OpenSearch データソースには、間隔をハードコード化したり、`>` 構文 -> `Group by time interval` を使用して `$__interval` 変数の最小制限を設定したりするために使用される `>10m` フィールドがあります。

### \$1\$1\$1interval\$1ms
<a name="global-variable-interval_ms"></a>

 この変数はミリ秒単位の `$__interval` 変数であり、時間間隔形式の文字列ではありません。例えば、`$__interval` が `20m` の場合、`$__interval_ms` は `1200000` です。

### \$1\$1\$1name
<a name="global-variable-name"></a>

 この変数は Singlestat パネルでのみ使用でき、**[オプション]** タブのプレフィックスまたはサフィックスフィールドで使用できます。変数は系列名またはエイリアスに置き換えられます。

### \$1\$1\$1org
<a name="global-variable-org"></a>

 この変数は、現在の組織 ID です。変数 `${__org.name}` は、現在の組織名称です。

### \$1\$1\$1user
<a name="global-variable-user"></a>

変数 `${__user.id}` は現在のユーザー ID です。変数 `${__user.login}` は、現在のユーザーのログインハンドルです。変数 `${__user.email}` は、現在のユーザーの E メールアドレスです。

### \$1\$1\$1range
<a name="global-variable-range"></a>

この変数は現在、Prometheus データソースでのみサポートされています。この変数は、現在のダッシュボードの範囲を表します。`to - from` で計算されます。ミリ秒は `$__range_ms`、秒は `$__range_s` で表示されます。

### \$1timeFilter または \$1\$1\$1timeFilter
<a name="global-variable-timefilter-or-__timefilter"></a>

`$timeFilter` 変数は、現在選択されている時間範囲を式として返します。例えば、時間間隔「`Last 7 days`」の式は `time > now() - 7d` です。

 この変数は、次のようないくつかの場所で使用されます。
+ InfluxDB データソースの WHERE 句。**クエリエディタ** では、Grafana は InfluxDB クエリに自動的に追加します。**テキストエディタ**モードでは、`WHERE $timeFilter` を手動で追加できます。
+  Log Analytics は、Azure Monitor データソースでクエリを実行します。
+  SQL は、MySQL 、Postgres、MSSQL でクエリを実行します。
+  `$__timeFilter` 変数は MySQL データソースで使用されます。

## その他の変数オプション
<a name="other-variable-options"></a>

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

### 変数選択オプションの入力
<a name="enter-variable-selection-options"></a>

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

#### 複数値
<a name="multi-value"></a>

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

#### すべてを含めるオプション
<a name="include-all-option"></a>

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

#### すべての値のカスタム化
<a name="custom-all-value"></a>

このオプションは、**[すべてのオプションを含める]** が選択されている場合にのみ表示されます。

`All` オプションの値を定義するには、**[すべての値のカスタム化]** フィールドに regex、glob、または Lucene 構文を入力します。

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

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

### 高度な変数フォーマットオプション
<a name="advanced-variable-format-options"></a>

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

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

#### 一般的な構文
<a name="general-syntax"></a>

 構文: `${var_name:option}` 

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

#### CSV
<a name="variables-csv"></a>

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

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

#### 分散 - OpenTSDB
<a name="distributed---opentsdb"></a>

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

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

#### 二重引用符
<a name="doublequote"></a>

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

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

#### Glob - Graphite
<a name="glob---graphite"></a>

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

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

#### JSON
<a name="json"></a>

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

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

#### Lucene - OpenSearch
<a name="lucene---opensearch"></a>

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

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

#### Percentencode
<a name="percentencode"></a>

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

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

#### パイプ
<a name="pipe"></a>

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

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

#### Raw
<a name="raw"></a>

 SQL クエリにおける単一引用符など、データソース固有のフォーマットをオフにします。

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

#### [正規表現]
<a name="regex"></a>

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

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

#### 一重引用符
<a name="singlequote"></a>

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

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

#### Sqlstring
<a name="sqlstring"></a>

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

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

#### テキスト
<a name="text"></a>

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

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

### 複数値の変数のフォーマット
<a name="formatting-multi-value-variables"></a>

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

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

#### Graphite データソースを使用した複数値変数
<a name="multi-value-variables-with-a-graphite-data-source"></a>

 Graphite は glob 式を使用します。この場合、複数の値を持つ変数は、現在の変数値が *host1*、*host2*、*host3* であった場合は、`{host1,host2,host3}` として補間されます。

#### Prometheus または InfluxDB データソースを使用した複数値変数
<a name="multi-value-variables-with-a-prometheus-or-influxdb-data-source"></a>

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

#### Elastic データソースを使用した複数値変数
<a name="multi-value-variables-with-an-elastic-data-source"></a>

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

#### フォーマットのトラブルシューティング
<a name="formatting-troubles"></a>

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

 Grafana でこの自動正規表現エスケープとフォーマットを実行したくない場合は、次のいずれかを実行する必要があります。
+ **[複数値]** **[すべてのオプションを含める]** オプションをオフにします。
+ [raw variable format](\$1\$1< relref "advanced-variable-format-options.md\$1raw" >\$1\$1) を使用します。

### 正規表現での変数のフィルタリング
<a name="filter-variables-with-regex"></a>

 正規表現クエリオプションを使用すると、変数クエリが返すオプションのリストをフィルタリング、または返すオプションを変更できます。

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

 [正規表現クエリ] オプションを使用して、変数クエリによって返されるオプションの一覧をフィルタリングするか、返されるオプションを変更します。詳細については、「[正規表現](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions)」を参照してください。

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

```
backend_01
backend_02
backend_03
backend_04
```

#### `01` または `02` で終わるオプションのみが返されるようにフィルタリング
<a name="filter-so-that-only-the-options-that-end-with-01-or-02-are-returned"></a>

 [Regex] (正規表現) 

```
/.*[01|02]/
```

 結果: 

```
backend_01
backend_02
```

#### 正規表現キャプチャグループを使用してテキストの一部を返すオプションのフィルタリングおよび変更
<a name="filter-and-modify-the-options-using-a-regex-capture-group-to-return-part-of-the-text"></a>

 正規表現: 

```
/.*(01|02)/
```

 結果: 

```
01
02
```

#### フィルタリングと変更 - Prometheus 例
<a name="filter-and-modify---prometheus-example"></a>

 オプションのリスト: 

```
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
```

#### 名前付きテキストおよび値のキャプチャグループを使用したフィルタリングと変更
<a name="filter-and-modify-using-named-text-and-value-capture-groups"></a>

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

 例えば、`node_hwmon_chip_names` Prometheus メトリクスをクエリする場合、`chip_name` は `chip` 値よりもわかりやすくなります。次の変数クエリ結果で開始します。

```
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` のキャプチャグループ名のみがサポートされています。

### パネルまたは行の繰り返し
<a name="repeat-panels-or-rows"></a>

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

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

#### パネルの繰り返し
<a name="repeating-panels"></a>

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

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

`horizontal` を選択するとパネルは並んで配置されます。Grafana は繰り返しパネルの幅を自動的に調整して行全体がいっぱいになるようにします。現在、行上の他のパネルと繰り返しパネルを混在して使うことはできません。

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

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

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

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

#### 行の繰り返し
<a name="repeating-rows"></a>

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

 この機能を有効にするには、まず *[パネルの追加]* メニューを使用して新しい*行*を追加する必要があります。次に、行タイトルの上にカーソルを置いて歯車ボタンを選択し、`Row Options` 設定パネルにアクセスします。行を繰り返す変数を選択できるようになります。

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