

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Variables
<a name="v10-dash-variables"></a>

****  
本文件主題專為支援 Grafana **10.x 版的 Grafana** 工作區而設計。  
如需支援 Grafana 9.x 版的 Grafana 工作區，請參閱 [使用 Grafana 第 9 版](using-grafana-v9.md)。  
如需支援 Grafana 8.x 版的 Grafana 工作區，請參閱 [使用 Grafana 第 8 版](using-grafana-v8.md)。

變數是值的預留位置。您可以在指標查詢和面板標題中使用變數。因此，當您使用儀表板頂端的下拉式清單變更值時，面板的指標查詢將會變更以反映新值。

變數可讓您建立更具互動性和動態的儀表板。您可以在指標查詢中使用變數，而不是硬式編碼，例如伺服器、應用程式和感應器名稱。變數會顯示為儀表板頂端的下拉式清單。這些下拉式清單可讓您輕鬆變更儀表板中顯示的資料。

對於想要允許 Grafana 檢視器快速調整視覺效果，但不想提供完整編輯許可的管理員來說，這些功能特別有用。Grafana 檢視器可以使用變數。

變數和範本也可讓您使用單一來源儀表板。如果您有多個相同的資料來源或伺服器，您可以建立一個儀表板，並使用變數來變更您正在檢視的內容。這可簡化維護並大量維護。

**範本**

範本是包含變數的任何查詢。例如，如果您管理儀表板來監控多個伺服器，您可以為每個伺服器建立儀表板，或者您可以建立一個儀表板，並使用面板搭配範本查詢，如下所示。

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

變數值一律使用語法 var-<varname>=value 同步至 URL。

**範例**

變數會在畫面頂端的下拉式清單中列出。選取不同的變數，以查看視覺效果如何變更。

若要查看變數設定，請導覽至**儀表板設定 > 變數**。按一下清單中的變數以查看其設定。

變數可用於標題、描述、文字面板和查詢。開頭為 的文字查詢`$`是 範本。並非所有面板都會有範本查詢。

**變數最佳實務**
+ 變數下拉式清單會依其在**儀表板設定**中的變數清單中列出的順序顯示。
+ 將您經常變更的變數放在頂端，以便先顯示變數 （儀表板上最左邊）。
+ 變數預設會預先選取下拉式清單中最上方的值。如果您想要改為選擇空值，請變更變數設定，如下所示：

  1. 選取**包含所有選項**核取方塊。

  1. 在**自訂所有值**欄位中，輸入值 `+`。

**Topics**
+ [新增和管理變數](v10-dash-variable-add.md)
+ [檢查變數](v10-dash-variable-add-inspect.md)
+ [變數語法](v10-dash-variable-syntax.md)

# 新增和管理變數
<a name="v10-dash-variable-add"></a>

****  
本文件主題專為支援 Grafana **10.x 版的 Grafana** 工作區而設計。  
如需支援 Grafana 9.x 版的 Grafana 工作區，請參閱 [使用 Grafana 第 9 版](using-grafana-v9.md)。  
如需支援 Grafana 8.x 版的 Grafana 工作區，請參閱 [使用 Grafana 第 8 版](using-grafana-v8.md)。

下表列出 Grafana 中的變數類型。


| 變數類型 | Description | 
| --- | --- | 
| Query | 查詢產生的值清單，例如指標名稱、伺服器名稱、感應器 IDs、資料中心等。 | 
| Custom | 使用逗號分隔清單手動定義變數選項。 | 
| Text box (文字方塊) | 顯示具有選用預設值的任意文字輸入欄位。 | 
| 常數 | 定義隱藏的常數。 | 
| 資料來源 | 快速變更整個儀表板的資料來源。 | 
| Interval | 間隔變數代表時間範圍。 | 
| 臨機操作篩選條件 | 金鑰值篩選條件會自動新增至資料來源的所有指標查詢 （僅限 Prometheus、Loki、InfluxDB 和 Elasticsearch)。 | 
| 全域變數 | 內建變數，可用於查詢編輯器中的表達式。 | 
| 鏈結變數 | 變數查詢可以包含其他變數。 | 

**Topics**
+ [輸入一般選項](#v10-dash-variable-options)
+ [新增查詢變數](#v10-dash-variable-add-query)
+ [新增自訂變數](#v10-dash-variable-add-custom)
+ [新增文字方塊變數](#v10-dash-variable-add-text)
+ [新增常數變數](#v10-dash-variable-add-constant)
+ [新增資料來源變數](#v10-dash-variable-add-datasource)
+ [新增間隔變數](#v10-dash-variable-add-internal)
+ [新增臨機操作篩選條件](#v10-dash-variable-add-adhoc)
+ [設定變數選取選項](#v10-dash-variable-add-selection)
+ [全域變數](#v10-dash-variable-add-global)
+ [鏈結變數](#v10-dash-variable-add-chained)
+ [管理變數](#v10-dash-variable-add-manage)
+ [使用 regex 篩選變數](#v10-dash-variable-add-filter)

## 輸入一般選項
<a name="v10-dash-variable-options"></a>

您必須為您建立的任何類型的變數輸入一般選項。

**輸入一般選項**

1. 導覽至您要為 建立變數的儀表板，然後選取頁面頂端的**儀表板設定** （齒輪） 圖示。

1. 在**變數**索引標籤上，選取**新增變數**。

1. 輸入變數**的名稱**。

1. 在**類型**清單中，選取**查詢**。

1. （選用） 在**標籤**中，輸入變數下拉式清單的顯示名稱。

   如果您未輸入顯示名稱，則下拉式清單為變數名稱。

1. 選擇**隱藏**選項：
   + **無選擇 （空白）** – 變數下拉式清單會顯示變數**名稱**或**標籤**值。
   + **標籤** – 變數下拉式清單只會顯示選取的變數值和向下箭頭。
   + **變數** – 儀表板上不會顯示變數下拉式清單。

## 新增查詢變數
<a name="v10-dash-variable-add-query"></a>

查詢變數可讓您撰寫資料來源查詢，以傳回指標名稱、標籤值或索引鍵的清單。例如，查詢變數可能會傳回伺服器名稱、感應器 IDs或資料中心的清單。變數值會隨著動態擷取具有資料來源查詢的選項而變更。

查詢變數通常僅支援字串。如果您的查詢傳回數字或任何其他資料類型，您可能需要將其轉換為字串，以將其用作變數。例如，對於 Azure 資料來源，您可以為此使用 [tostring](https://docs.microsoft.com/en-us/azure/data-explorer/kusto/query/tostringfunction) 函數。

查詢表達式可以包含對其他變數的參考，並實際建立連結變數。Grafana 會偵測到此情況，並在其中一個連結變數變更時自動重新整理變數。

**注意**  
每個資料來源的查詢表達式都不同。如需詳細資訊，請參閱[資料來源](AMG-data-sources.md)的文件。

**新增查詢變數**

1. 輸入一般選項，如上所述。

1. 在**資料來源**清單中，選取查詢的目標資料來源。

1. 在**重新整理**清單中，選取變數應該更新選項的時間。
   + **在儀表板載入**上 – 每次儀表板載入時都會查詢資料來源。這會使儀表板載入速度變慢，因為必須先完成變數查詢，才能初始化儀表板。
   + **在時間範圍變更** – 在儀表板時間範圍變更時查詢資料來源。只有在變數選項查詢包含時間範圍篩選條件或取決於儀表板時間範圍時，才使用此選項。

1. 在**查詢**欄位中，輸入查詢。
   + 查詢欄位會根據您的資料來源而有所不同。有些資料來源具有自訂查詢編輯器。
   + 查詢必須傳回名為 `__text`和 的值`__value`。例如，在 SQL 中，您可以使用查詢，例如 `SELECT hostname AS __text, id AS __value from MyTable`。其他語言的查詢會根據語法而有所不同。
   + 如果您在單一輸入欄位查詢編輯器中需要更多空間，請將游標暫留在欄位右下角的行上，然後向下拖曳以展開。

1. （選用） 在 **Regex** 欄位中，輸入 regex 表達式來篩選或擷取資料來源查詢傳回的名稱的特定部分。若要查看範例，請參閱[使用 regex 篩選變數](#v10-dash-variable-add-filter)。

1. 在**排序**清單中，選取要在下拉式清單中顯示之值的排序順序。預設選項**已停用**，表示將使用資料來源查詢傳回的選項順序。

1. （選用） 輸入[選擇選項](#v10-dash-variable-add-selection)。

1. 在**預覽值**中，Grafana 會顯示目前變數值的清單。檢閱它們以確保它們符合您的期望。

1. 選取**新增**，將變數新增至儀表板。

## 新增自訂變數
<a name="v10-dash-variable-add-custom"></a>

針對不會變更的值使用*自訂*變數，例如數字或字串。

例如，如果您的伺服器名稱或區域名稱永遠不會變更，則您可能想要將它們建立為自訂變數，而不是查詢變數。由於它們不會變更，您可以在[鏈結變數](#v10-dash-variable-add-chained)中使用它們，而不是其他查詢變數。這會減少 Grafana 在更新鏈結變數時必須傳送的查詢數量。

**新增自訂變數**

1. 輸入一般選項，如上所述。

1. 在**以逗號分隔的值**清單中，在以逗號分隔的清單中輸入此變數的值。您可以包含以空格和冒號分隔的數字、字串或鍵值對。例如 `key1 : value1,key2 : value2`。

1. （選用） 輸入[選擇選項](#v10-dash-variable-add-selection)。

1. 在**預覽值**中，Grafana 會顯示目前變數值的清單。檢閱它們以確保它們符合您的期望。

1. 選取**新增**，將變數新增至儀表板。

## 新增文字方塊變數
<a name="v10-dash-variable-add-text"></a>

*文字方塊*變數會顯示具有選用預設值的任意文字輸入欄位。這是最靈活的變數，因為您可以輸入任何值。如果您有高基數的指標，或想要同時更新儀表板中的多個面板，請使用此類型的變數。

**新增文字方塊變數**

1. 輸入一般選項，如上所述。

1. （選用） 在**預設值**欄位中，選取變數的預設值。如果您在此欄位中未輸入任何內容，則 Grafana 會顯示空白文字方塊，供使用者輸入文字。

1. 在**預覽值**中，Grafana 會顯示目前變數值的清單。檢閱它們以確保它們符合您的期望。

1. 選取**新增**，將變數新增至儀表板。

## 新增常數變數
<a name="v10-dash-variable-add-constant"></a>

*常數*變數可讓您定義隱藏常數。這適用於您要共用之儀表板的指標路徑字首。匯出儀表板時，常數變數會轉換為匯入選項。

常數變數*不*靈活。每個常數變數只保留一個值，除非您更新變數設定，否則無法更新。

當您有複雜的值需要包含在查詢中，但不想在每個查詢中重新輸入時，常數變數很有用。例如，如果您有名為 的伺服器路徑`i-0b6a61efe2ab843gg`，則可以將其取代為名為 的變數`$path_gg`。

**新增常數變數**

1. 輸入一般選項，如上所述。

1. 在**值**欄位中，輸入變數值。您可以輸入字母、數字和符號。如果您使用[原始格式](v10-dash-variable-syntax.md#v10-dash-variable-syntax-raw)，甚至可以使用萬用字元。

1. 在**預覽值**中，Grafana 會顯示目前變數值的清單。檢閱它們以確保它們符合您的期望。

1. 選取**新增**，將變數新增至儀表板。

## 新增資料來源變數
<a name="v10-dash-variable-add-datasource"></a>

*資料來源*變數可讓您快速變更整個儀表板的資料來源。如果您有多個資料來源的執行個體，它們可能在不同的環境中很有用。

**新增資料來源變數**

1. 輸入一般選項，如上所述。

1. 在**類型**清單中，選取變數的目標資料來源。

   您也可以選擇**開啟進階資料來源挑選器**以查看更多選項，包括新增資料來源 （僅限管理員）。如需詳細資訊，請參閱[連線至資料來源](AMG-data-sources.md)。

1. （選用） 在**執行個體名稱篩選條件**中，輸入資料來源執行個體在變數值下拉式清單中選擇的 regex 篩選條件。將此欄位保留空白，以顯示所有執行個體。

1. （選用） 輸入[選擇選項](#v10-dash-variable-add-selection)。

1. 在**預覽值**中，Grafana 會顯示目前變數值的清單。檢閱它們以確保它們符合您的期望。

1. 選取**新增**，將變數新增至儀表板。

## 新增間隔變數
<a name="v10-dash-variable-add-internal"></a>

使用*間隔*變數來表示時間範圍，例如 `1m``1h`、 或 `1d`。您可以*依時間命令將它們視為整個儀表板的群組*。間隔變數會變更資料在視覺化中的分組方式。您也可以使用自動選項，傳回每個時間範圍的固定資料點數量。

您可以使用間隔變數做為依時間分組的參數 （適用於 InfluxDB)、日期長條圖間隔 （適用於 Elasticsearch)，或做為摘要函數參數 （適用於 Graphite)。

**新增間隔變數**

1. 輸入一般選項，如上所述。

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`時間範圍。如果您將其開啟，則會顯示另外兩個選項：
   + **步驟計數** – 選取將分割目前時間範圍以計算值的次數，類似於**最大資料點**查詢選項。例如，如果目前可見的時間範圍是 30 分鐘，則`auto`間隔會將資料分組為 30 個一分鐘增量。預設值為 30 個步驟。
   + **最小間隔** – 步驟計數間隔低於的最低閾值不會分割時間。若要繼續 30 分鐘的範例，如果最小間隔設定為 2 公尺，則 Grafana 會將資料分組為 15 個兩分鐘增量。

1. 在**預覽值中**，Grafana 會顯示目前變數值的清單。檢閱它們以確保它們符合您的期望。

1. 選取**新增**，將變數新增至儀表板。

**間隔變數範例**

下列範例顯示 Graphite 函數`myinterval`中的範本變數：

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

## 新增臨機操作篩選條件
<a name="v10-dash-variable-add-adhoc"></a>

*臨機操作篩選條件*可讓您新增鍵值篩選條件，這些篩選條件會自動新增至使用指定資料來源的所有指標查詢。與其他變數不同，您不會在查詢中使用臨機操作篩選條件。反之，您可以使用臨機操作篩選條件來寫入現有查詢的篩選條件。

**注意**  
臨機操作篩選條件變數僅適用於 Prometheus、Loki、InfluxDB 和 Elasticsearch 資料來源。

1. 輸入一般選項，如上所述。

1. 在**資料來源**清單中，選取目標資料來源。

   您也可以選擇**開啟進階資料來源挑選器**以查看更多選項，包括新增資料來源 （僅限管理員）。如需詳細資訊，請參閱[連線至資料來源](AMG-data-sources.md)。

1. 選取**新增**，將變數新增至儀表板。

**建立臨機操作篩選條件**

臨機操作篩選條件是最複雜且靈活的變數選項之一。此變數不是變數選項的一般清單，而是可讓您建置整個儀表板的臨機操作查詢。您以此方式套用的篩選條件會套用至儀表板上的所有面板。

## 設定變數選取選項
<a name="v10-dash-variable-add-selection"></a>

*選擇選項*是一項功能，可用來管理變數選項選擇。所有選擇選項都是選用的，預設為關閉。

### 多值變數
<a name="v10-dash-variable-add-selection-multi"></a>

插入已選取多個值的變數很棘手，因為它不會直接將多個值格式化為在使用變數的指定內容中有效的字串。Grafana 嘗試透過允許每個資料來源外掛程式通知範本插補引擎要用於多個值的格式來解決此問題。

**注意**  
變數上的**自訂所有值**選項必須為空白，Grafana 才能將所有值格式化為單一字串。如果保留空白，則 Grafana 會串連 （加在一起） 查詢中的所有值。例如 `value1,value2,value3`。如果使用自訂`all`值，則值將改為 `*`或 `all`。

**具有 Graphite 資料來源的多值變數**

Graphite 使用 glob 表達式。在此情況下，具有多個值的變數會被插入，就`{host1,host2,host3}`好像目前的變數值是 *host1*、*host2* 和 *host3*。

**具有 Prometheus 或 InfluxDB 資料來源的多值變數**

InfluxDB 和 Prometheus 使用 regex 表達式，因此相同的變數會插入為 `(host1|host2|host3)`。每個值也會逸出 regex。如果不是，具有 regex 控制字元的值會破壞 regex 表達式。

**具有彈性資料來源的多值變數**

Elasticsearch 使用 lucene 查詢語法，因此相同的變數格式為 `("host1" OR "host2" OR "host3")`。在這種情況下，每個值都會逸出，因此該值只包含 lucene 控制單字和引號。

**對多值變數進行故障診斷**

自動逸出和格式化可能會導致問題，並且很難掌握背後的邏輯。特別是對於使用 regex 語法的 InfluxDB 和 Prometheus，需要在 regex 運算子內容中使用 變數。

如果您不希望 Grafana 執行此自動 regex 逸出和格式化，則必須執行下列其中一項操作：
+ 關閉**多值**或**包含所有選項**選項。
+ 使用[原始格式](v10-dash-variable-syntax.md#v10-dash-variable-syntax-raw)。

### 包含所有選項
<a name="v10-dash-variable-add-multi-all"></a>

Grafana 會將 `All`選項新增至變數下拉式清單。如果使用者選取此選項，則會選取所有變數選項。

### 自訂所有值
<a name="v10-dash-variable-add-multi-custom"></a>

只有在選取**包含所有選項時，**才會顯示此選項。

在**自訂所有值**欄位中輸入 regex、glob 或 lucene 語法，以定義`All`選項的值。

根據預設，該`All`值包含合併表達式中的所有選項。這可能會變得很長，並可能有效能問題。有時候，最好指定自訂的所有值，例如萬用字元規則運算式。

若要在自訂**所有值**選項中具有自訂 regex、glob 或 lucene 語法，它永遠不會逸出，因此您必須考慮資料來源的有效值。

## 全域變數
<a name="v10-dash-variable-add-global"></a>

Grafana 具有全域內建變數，可用於查詢編輯器中的表達式。本主題會依字母順序列出並加以定義。這些變數在查詢、儀表板連結、面板連結和資料連結中很有用。

**\$1\$1\$1儀表板**

此變數是目前儀表板的名稱。

**\$1\$1\$1from 和 \$1\$1\$1to**

Grafana 有兩個內建的時間範圍變數： `$__from`和 `$__to`。根據預設，它們目前一律會插入為 epoch 毫秒，但您可以控制日期格式。


| 語法 | 範例結果 | Description | 
| --- | --- | --- | 
|  `${__from}`  |  1594671549254  |  Unix 毫秒 epoch  | 
|  `${__from:date}`  |  2020-07-13T20：19：09.254Z  |  無 args，預設為 ISO 8601/RFC 3339  | 
|  `${__from:date:iso}`  |  2020-07-13T20：19：09.254Z  |  ISO 8601/RFC 3339  | 
|  `${__from:date:seconds}`  |  1594671549  |  Unix 秒 epoch  | 
|  `${__from:date:YYYY-MM}`  |  2020-07  |  不包含 ： 字元的任何自訂日期格式  | 

上述語法也適用於 `${__to}`。

**\$1\$1\$1interval**

您可以使用 `$__interval`變數做為依時間分組的參數 （適用於 InfluxDB、MySQL、Postgres、MSSQL)、日期長條圖間隔 （適用於 Elasticsearch)，或做為*摘要*函數參數 （適用於 Graphite)。

Grafana 會自動計算可用於在查詢中依時間分組的間隔。當有比圖形上顯示的更多資料點時，可以透過按較大的間隔分組來提高查詢的效率。例如，如果您正在查看 3 個月的資料圖表，則可能無法在分鐘層級查看詳細資訊。按小時或天分組可讓查詢更有效率，而不會影響圖形顯示的內容。`$__interval` 使用時間範圍和圖形寬度 （像素數） 計算。

近似值計算： `(to - from) / resolution`

例如，當時間範圍為 1 小時且圖形為全螢幕時，間隔可能會計算為 `2m` - 點以 2 分鐘的間隔分組。如果時間範圍為 6 個月且圖形為全螢幕，則間隔可能是 `1d`(1 天） - 點會依天分組。

在 InfluxDB 資料來源中，舊版變數`$interval`是相同的變數。 `$__interval`應該改用 。

InfluxDB 和 Elasticsearch 資料來源具有用於硬式編碼間隔或設定`$__interval`變數下限`Group by time interval`的欄位 （使用`>`語法，例如 `>10m`)。

**\$1\$1\$1interval\$1ms**

此變數是以毫秒為單位的`$__interval`變數，而不是時間間隔格式的字串。例如，如果 `$__interval`是 `20m`，則 `$__interval_ms`是 `1200000`。

**\$1\$1\$1org**

此變數是目前組織的 ID。 `${__org.name}`是目前組織的名稱。

**\$1\$1\$1user**

`${__user.id}` 是目前使用者的 ID。 `${__user.login}` 是目前使用者的登入控制代碼。 `${__user.email}`是目前使用者的電子郵件。

**\$1\$1\$1range**

僅支援 Prometheus 和 Loki 資料來源。此變數代表目前儀表板的範圍。它由 計算`to - from`。它有一個毫秒，第二個表示法稱為 `$__range_ms`和 `$__range_s`。

**\$1\$1\$1rate\$1interval**

僅支援 Prometheus 資料來源。`$__rate_interval` 變數旨在用於 速率函數。

**\$1timeFilter 或 \$1\$1\$1timeFilter**

`$timeFilter` 變數會傳回目前選取的時間範圍做為表達式。例如，時間範圍間隔`Last 7 days`表達式為 `time > now() - 7d`。

這在幾個地方使用，包括：
+ InfluxDB 資料來源的 WHERE 子句。在查詢編輯器模式下，Grafana 會自動將其新增至 InfluxDB 查詢。您可以在文字編輯器模式中手動新增它：`WHERE $timeFilter`。
+ Azure Monitor 資料來源中的日誌分析查詢。
+ MySQL、Postgres 和 MSSQL 中的 SQL 查詢。
+ `$__timeFilter` 變數用於 MySQL 資料來源。

**\$1\$1\$1timezone**

`$__timezone` 變數會傳回目前選取的時區，`utc`或 IANA 時區資料庫的項目 （例如 `America/New_York`)。

如果目前選取的時區是*瀏覽器時間*，Grafana 會嘗試判斷您的瀏覽器時區。

## 鏈結變數
<a name="v10-dash-variable-add-chained"></a>

*鏈結變數*也稱為*連結變數*或*巢狀變數*，是在其變數查詢中具有一或多個其他變數的查詢變數。

每個資料來源的鏈結變數查詢都不同，但所有 的 內部部署都相同。您可以在允許它們的任何資料來源中使用鏈結變數查詢。

可以建立極為複雜的連結範本儀表板，深度為 5 或 10 層。在技術上，您可以達到的深度或複雜程度沒有限制，但您擁有的連結越多，查詢負載越大。

**最佳實務和秘訣**

下列實務可讓您更輕鬆地使用儀表板和變數。

**建立新的連結變數**
+ 鏈結變數會建立父/子相依性。您可以將它們想像成階梯或樹。
+ 建立新鏈結變數的最簡單方法是複製要作為新變數基礎的變數。在變數清單中，按一下變數項目右側的**複製**變數圖示來建立複本。然後，您可以將 新增至父變數的查詢。
+ 以這種方式建立的新變數會出現在清單底部。您可能需要將它拖曳到清單中的不同位置，才能使其符合邏輯順序。

**變數順序**

您可以按一下每個項目右側的向上和向下箭頭，變更儀表板變數清單中的變數順序。Grafana 會根據此清單列出由左至右的變數下拉式清單，變數位於最左上方。
+ 在子變數前面列出沒有相依性的變數。
+ 每個變數都應遵循其相依的變數。
+ 請記住，UI 中沒有指出哪些變數具有相依性關係。以邏輯順序列出變數，讓其他使用者 （和您自己） 更輕鬆。

**複雜性考量**

變數中的相依性層越多，變更變數後更新儀表板所需的時間就越長。

例如，如果您有一系列四個連結變數 （國家/地區、區域、伺服器、指標），而且您變更根變數值 （國家/地區），則 Grafana 必須對所有相依變數執行查詢，才能更新儀表板中的視覺效果。

## 管理變數
<a name="v10-dash-variable-add-manage"></a>

變數頁面可讓您新增變數和管理現有的變數。它也可讓您[檢查](v10-dash-variable-add-inspect.md)變數，並識別在其他變數或儀表板中是否參考 （或使用） 變數。

**移動** – 您可以使用拖放將變數向上或向下移動清單。

**複製** – 若要複製變數，請按一下右側的一組圖示中的複製圖示。這會建立變數的複本，其名稱為字首為 的原始變數`copy_of_`。

**刪除** – 若要刪除變數，請按一下右側的一組圖示中的垃圾桶圖示。

## 使用 regex 篩選變數
<a name="v10-dash-variable-add-filter"></a>

使用 Regex 查詢選項，您可以篩選變數查詢傳回的選項清單，或修改傳回的選項。

此頁面顯示如何使用 regex 在變數下拉式清單中篩選/修改值。

使用 Regex 查詢選項，您可以篩選變數查詢傳回的選項清單，或修改傳回的選項。如需詳細資訊，請參閱[規則表達](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions)式上的 Mozilla 指南。

下列範例顯示篩選下列選項清單

```
backend_01
backend_02
backend_03
backend_04
```

**篩選，只`02`傳回以 `01`或 結尾的選項**

Regex：

```
/
(
01|02 
) 
$/
```

結果：

```
backend_01
backend_02
```

**使用 regex 擷取群組篩選和修改選項，以傳回部分文字**

Regex：

```
/.* 
(
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
```

此 regex：

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

傳回這些結果：

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

**使用具名文字和值擷取群組進行篩選和修改**

使用具名擷取群組，您可以從變數查詢傳回的選項中擷取個別的「文字」和「值」部分。這可讓變數下拉式清單包含每個可選取值的易記名稱。

例如，在查詢 `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
```

通過下列 Regex：

```
/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="v10-dash-variable-add-inspect"></a>

變數頁面可讓您輕鬆地識別在其他變數或儀表板中是否正在參考 （或使用） 變數。

任何參考或使用的變數旁邊都有綠色核取記號，而未參考的變數旁邊則有一個橘色警告圖示。此外，所有參考的變數在綠色核取記號旁都有相依性圖示。您可以選取 圖示以檢視相依性映射。您可以移動相依性映射。您可以使用滑鼠滾輪或對等項目放大或縮小。

# 變數語法
<a name="v10-dash-variable-syntax"></a>

****  
本文件主題專為支援 Grafana **10.x 版的 Grafana** 工作區而設計。  
如需支援 Grafana 9.x 版的 Grafana 工作區，請參閱 [使用 Grafana 第 9 版](using-grafana-v9.md)。  
如需支援 Grafana 8.x 版的 Grafana 工作區，請參閱 [使用 Grafana 第 8 版](using-grafana-v8.md)。

面板標題和指標查詢可以使用兩種不同的語法來參考變數。
+ `$varname` – 此語法易於閱讀，但不允許您在單字中間使用變數。

  **範例**：`apps.frontend.$server.requests.count`
+ `${var_name}` – 當您想要在表達式中間使用變數時，請使用此語法。
+ `${var_name:<format>}` – 此格式可讓您進一步控制 Grafana 如何解譯值。如需詳細資訊，請參閱此清單後面的*進階變數格式選項*。
+ `[[varname]]` – 請勿使用。此語法是舊的，已棄用。它將在未來的版本中移除。

將查詢傳送至資料來源之前，會*插入*查詢，這表示變數會取代為其目前的值。在插補期間，可能會*逸出*變數值，以符合查詢語言及其使用位置的語法。例如，InfluxDB 或 Prometheus 查詢中 regex 表達式中使用的變數將逸出 regex。

**進階變數格式選項**

變數插補的格式取決於資料來源，但在某些情況下，您可能想要變更預設格式。

例如，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 - 石灰色**

將具有多個值的變數格式化為 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 - Elasticsearch**

使用 Elasticsearch 的 Lucene 格式的多個值格式化變數。

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

**原始**

關閉資料來源特定的格式，例如 SQL 查詢中的單引號。

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

**Regex**

將具有多個值的變數格式化為 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'"
```

**Text (文字)**

將單值和多值變數格式化為文字表示法。對於單一變數，它只會傳回文字表示法。對於多值變數，它會傳回與 結合的文字表示法`+`。

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

**查詢參數**

將單值和多值變數格式化為查詢參數表示法。範例：`var-foo=value1&var-foo=value2`

```
servers = [ "test1",  "test2" ]
String to interpolate:  '${servers:queryparam}'
Interpolation result:  "var-servers=test1&var-servers=test2"
```