本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
模板和變量
本文件主題是針對支援 Grafana 8.x 版的 Grafana 工作區所設計。
如需支援 Grafana 10.x 版的 Grafana 工作區,請參閱。在 Grafana 第 10 版工作
如需支援 Grafana 9.x 版的 Grafana 工作區,請參閱。在 Grafana 第 9 版中工作
變數是值的預留位置。您可以在量度查詢和面板標題中使用變數。變數可讓您建立更具互動性和動態的儀表板。您可以在指標查詢中使用變量,而不是對服務器,應用程序和傳感器名稱等硬編碼內容。
變數會在儀表板頂端顯示為下拉式清單。使用管控面板頂部的下拉式清單變更值時,面板的度量查詢會反映新值。
對於想要允許檢視者快速調整視覺效果但不想授與完整編輯權限的管理員,這些功能特別有用。Grafana 檢視器可以使用變數。
透過使用變數和範本,您可以使用單一來源儀表板。如果您有多個相同的資料來源或伺服器,則可以建立一個儀表板,並使用變數來變更正在檢視的內容。這簡化了維護和保養。
如需支援變數類型的清單,以及新增每種變數類型的指示,請參閱 變數類型
範本
範本是包含變數的任何查詢。
例如,如果您要管理儀表板來監視多部伺服器,則可以為每個伺服器建立儀表板。或者,您可以建立一個管控面板,並將面板與樣板查詢搭配使用,如以下範例所示。
wmi_system_threads{instance=~"$server"}
變數值一律會使用語法同步至 URL var-<varname>=value
。
變數最佳做法
變數下拉式清單會依照在 [儀表板] 設定中變數清單中列出的順序顯示。
將您經常更改的變量放在頂部,以便它們將首先顯示在儀表板上的最左側。
變數語法
面板標題和量度查詢可以使用兩種不同的語法來查看變數:
-
$varname
此語法較易於閱讀,如下列範例所示:apps.frontend.$server.requests.count
。但是,您不能在單詞中間使用變量。 -
${var_name}
當您要在運算式中間內插變數時,請使用此語法。 -
${var_name:<format>}
此格式可讓您更好地控制 Grafana 內插值的方式。如需詳細資訊,請參閱 進階變數格式選項。
在將查詢傳送至資料來源之前,會內插查詢,這表示變數會取代為其目前值。在內插期間,變數值可能會逸出,以符合查詢語言的語法及其使用位置。例如,在 Prometheus 查詢中的正則表達式中使用的變量將被正則表達式轉義。請閱讀資料來源特定文件主題,以取得有關內插期間值逸出的詳細資訊。
若要取代資料來源預設格式的進階語法的相關資訊,請參閱〈〉進階變數格式選項。
其他變數選項
本節說明其他可用的變數選項。
輸入變數選取選項
您可以使用「選取選項」來管理變數選項選取。所有選取選項都是可選的,並且預設為關閉。
多值
如果您開啟此選項,變數下拉式清單支援同時選取多個選項。如需詳細資訊,請參閱 格式化多值變數。
包含全部選項
Grafana 工作區將一個All
選項添加到變量下拉列表中。如果一般使用者選取此選項,則會選取所有變數選項。
自訂所有值
只有在選取「包括全部」選項時,此選項才可見。
若要定義選All
項的值,請在 [自訂全部值] 欄位中輸入正則運算式、glob 或 Lucene 語法。
依預設,All
值包括組合運算式中的所有選項。這可能會變得很長,並且可能會出現性能問題。有時,指定自定義所有值可能會更好,例如通配符正則表達式。
當您在「自訂全部值」選項中使用自訂正則表達式、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 的自定義格式的多個值的變量。
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(用於石墨查詢)。
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"]'
光新世- 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'"
方字符串
將單值和多值變量格式化為逗號分隔的字符串,'
在每個值中轉義''
並用引號每個值。'
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 才能將所有值格式化為單一字串。如果將其保留空白,則 Grafana 將查詢中的所有值連接在一起(加在一起)。類似的東西value1,value2,value3
。如果使用自定義all
值,則該值將是類似*
或all
。
具有 Graphite 資料來源的多值變數
石墨使用水珠表達式。在這種情況下,具有多個值的變量將被內插,{host1,host2,host3}
就好像當前變量值是 host1,host 2 和 host3。
具有 Prometheus 或 InfluxDB 資料來源的多值變數
InfluxDB 和 Prometheus 使用正則表達式,因此相同的變量將被插入為. (host1|host2|host3)
每個值也會被正則表達式轉義。如果沒有,帶有正則表達式控制字符的值將破壞正則表達式。
具有彈性資料來源的多值變數
Amazon OpenSearch 使用 Lucene 查詢語法,因此相同的變量將被格式化為。("host1" OR "host2" OR
"host3")
在這種情況下,每個值都必須轉義,以便該值僅包含 Lucene 控制字和引號。
排解格式化
自動逸出和格式化可能會導致問題。掌握問題背後的邏輯可能很棘手,特別是對於 InfluxDB 和 Prometheus,其中使用正則表達式語法要求在正則表達式運算符上下文中使用該變量。
如果您不希望 Grafana 執行此自動正則表達式轉義和格式化,則必須執行以下操作之一:
-
關閉「多值包括全部」 選項。
-
使用 [原始變數格式] ({{< relref "advanced-variable-format-options.md #raw" >}})。
使用正則表達式過濾
使用正則表達式查詢選項,您可以過濾由變量查詢返回的選項列表或修改返回的選項。
本節介紹如何使用正則表達式來過濾和修改變量下拉列表中的值。
使用「正則表達式查詢」選項,您可以過濾由變量查詢返回的選項列表或修改返回的選項。如需詳細資訊,請參閱規則運算式
篩選下列選項清單的範例:
backend_01 backend_02 backend_03 backend_04
篩選,以便只傳回結尾02
為01
或的選項
正則表達式
/.*[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_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
注意:僅支援value
擷取群組名稱text
和擷取群組名稱。
重複面板或列
您可以使用範本變數建立動態儀表板。在查詢傳送至資料庫之前,查詢中的所有變數都會展開至變數的目前值。透過變數,您可以針對所有服務重複使用單一儀表板。
模板變量對於在整個儀表板中動態更改查詢非常有用。如果您希望 Grafana 根據您選取的值動態建立新面板或列,您可以使用「重複」功能。
重複面板
如果您已開啟Multi-value
或Include all
value
選項的變數,您可以選擇一個面板,並讓 Grafana 針對每個選取的值重複該面板。您可以在面板編輯模式的 「常規」選項卡下找到「重複」功能。
控direction
制面板的排列方式。
如果您選擇horizontal
,則會排列嵌板 side-by-side。Grafana 會自動調整每個重複面板的寬度,以便填充整行。目前,您無法將列上的其他面板與重複的面板混合使用。
設Max per row
定告訴 Grafana 每列您最想要多少個面板。它默認為 4。
如果您選擇vertical
,嵌板會在欄中從上到下排列。重複面板的寬度與重複的第一個面板 (原始樣板) 的寬度相同。
僅對第一個面板 (原始範本) 進行變更。為使變更在所有面板上生效,您需要啟動動態管控面板重新建置。您可以透過變更變數值 (即重複的基礎) 或重新載入圖標板來執行此操作。
注意
重複面板需要選取一或多個項目的變數。您無法將面板重複零次以隱藏它。
重複列
如上面所示,如果您使用Multi-value
或Include all value
選擇選項設置了變量,也可以重複行。
若要開啟此功能,您必須先使用「新增面板」選單來新增列。然後暫停行標題並選擇齒輪按鈕以訪問Row Options
配置面板。然後,您可以選取要為其重複列的變數。
最佳做法是在列標題中也使用變數。