本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
新增和管理變數
本文件主題是針對支援 Grafana 10.x 版的 Grafana 工作區所設計。
如需支援 Grafana 9.x 版的 Grafana 工作區,請參閱。在 Grafana 第 9 版中工作
如需支援 Grafana 8.x 版的 Grafana 工作區,請參閱。在 Grafana 第 8 版中工作
下表列出了在 Grafana 變量的類型。
變數類型 | 描述 |
---|---|
Query |
查詢產生的值清單,例如度量名稱、伺服器名稱、感應器 ID、資料中心等。 |
自訂 |
使用逗號分隔清單手動定義變數選項。 |
Text box (文字方塊) |
顯示具有可選預設值的自由文字輸入欄位。 |
常數 |
定義一個隱藏的常數。 |
資料來源 |
快速變更整個儀表板的資料來源。 |
Interval (間隔) |
間隔變量代表時間跨度。 |
特定篩選器 |
自動新增至資料來源 (Prometheus、洛基、InfluxDB 和彈性搜尋) 的所有度量查詢的索引鍵值篩選器。 |
全域變數 |
可用於查詢編輯器中運算式的內建變數。 |
链变量 |
變數查詢可以包含其他變數。 |
輸入一般選項
您必須為您建立的任何類型的變數輸入一般選項。
輸入一般選項
-
導覽至您要為其建立變數的儀表板,然後選取頁面頂端的儀表板設定 (齒輪) 圖示。
-
在「變數」標籤上,選取「新變數」。
-
輸入變數的名稱。
-
在「類型」清單中,選取「查詢」。
-
(選擇性) 在標籤中,輸入變數下拉式清單的顯示名稱。
如果您未輸入顯示名稱,則下拉式清單標籤就是變數名稱。
-
選擇「隱藏」選項:
-
未選取 (空白) — 變數下拉式清單會顯示變數名稱或標籤值。
-
標籤 — 變數下拉式清單只會顯示選取的變數值和向下箭頭。
-
變數 — 儀表板上不會顯示任何變數下拉式清單。
-
新增查詢變數
查詢變數可讓您撰寫可傳回度量名稱、標籤值或索引鍵清單的資料來源查詢。例如,查詢變數可能會傳回伺服器名稱、感應器 ID 或資料中心的清單。變數值會隨著資料來源查詢動態擷取選項而變更。
查詢變數通常只支援字串。如果您的查詢傳回數字或任何其他資料類型,您可能需要將它們轉換為字串,才能將它們用作變數。例如,對於 Azure 資料來源,您可以將 tostring
查詢運算式可以包含對其他變數的參考,實際上會建立連結的變數。Grafana 會偵測到此變數,並在變數的其中一個連結變數變更時自動重新整理變數。
注意
每個資料來源的查詢運算式都不同。如需詳細資訊,請參閱資料來源的文件。
若要新增查詢變數
-
如上所述,輸入一般選項。
-
在 [資料來源] 清單中,選取查詢的目標資料來源。
-
在「重新整理」清單中,選取變數何時應更新選項。
-
儀表板載入上 — 每次載入儀表板時查詢資料來源。這會降低儀表板載入速度,因為必須先完成變數查詢,才能初始化儀表板。
-
在時間範圍變更時 — 在儀表板時間範圍變更時查詢資料來源。僅當您的變數選項查詢包含時間範圍篩選器或從屬於儀表板時間範圍時,才使用此選項。
-
-
在「查詢」欄位中,輸入查詢。
-
查詢欄位會根據您的資料來源而有所不同。某些資料來源具有自訂查詢編輯器。
-
查詢必須傳回名為
__text
和的值__value
。例如,在 SQL 中,您可以使用如SELECT hostname AS __text, id AS __value from MyTable
. 其他語言的查詢會依語法而有所不同。 -
如果您在單一輸入欄位查詢編輯器中需要更多空間,請將游標移到欄位右下角的行上,然後向下拖曳以展開。
-
-
(選擇性) 在 Regex 欄位中,輸入 regex 運算式,以篩選或擷取資料來源查詢所傳回之名稱的特定部分。要查看示例,請參閱使用正則表達式過濾變量。
-
在「排序」清單中,選取要在下拉式清單中顯示之值的排序順序。預設選項「已停用」(Disabled) 表示將使用資料來源查詢傳回的選項順序。
-
(選擇性) 輸入選取選項。
-
在值的預覽中,Grafana 會顯示目前變數值的清單。檢閱它們,以確保它們符合您的期望。
-
選取「新增」以將變數新增至圖標板。
新增自訂變數
對不會變更的值 (例如數字或字串) 使用自訂變數。
例如,如果您的伺服器名稱或區域名稱永遠不會變更,則您可能想要將它們建立為自訂變數,而不是查詢變數。因為它們不會變更,所以您可以在鏈結變數中使用它們,而不是其他查詢變數。這將減少鏈接變量更新時 Grafana 必須發送的查詢數量。
若要新增自訂變數
-
如上所述,輸入一般選項。
-
在以逗號分隔的值清單中,以逗號分隔的清單中輸入此變數的值。您可以包含數字、字串或以空格和冒號分隔的索引鍵值配對。例如
key1 : value1,key2 : value2
。 -
(選擇性) 輸入選取選項。
-
在值的預覽中,Grafana 會顯示目前變數值的清單。檢閱它們,以確保它們符合您的期望。
-
選取「新增」以將變數新增至圖標板。
新增文字方塊變數
文字方塊變數會顯示具有可選預設值的自由文字輸入欄位。這是最有彈性的變數,因為您可以輸入任何值。如果您的量度具有高基數,或者想要同時更新管控面板中的多個面板,請使用此類型的變數。
加入文字方塊變數的步驟
-
如上所述,輸入一般選項。
-
(選擇性) 在「預設值」欄位中,選取變數的預設值。如果您沒有在此欄位中輸入任何內容,Grafana 會顯示空白文字方塊供使用者輸入文字。
-
在值的預覽中,Grafana 會顯示目前變數值的清單。檢閱它們,以確保它們符合您的期望。
-
選取「新增」以將變數新增至圖標板。
添加一個常量變量
常數變數可讓您定義隱藏的常數。這對於要共用的儀表板的度量路徑前置詞非常有用。匯出管控面板時,常數變數會轉換為匯入選項。
常量變量不靈活。每個常數變數只保留一個值,除非您更新變數設定,否則無法更新。
當您有需要在查詢中包含但不想在每個查詢中重新輸入的複雜值時,常數變數非常有用。例如,如果您有一個名為的服務器路徑i-0b6a61efe2ab843gg
,那麼您可以用名為的變量替換它$path_gg
。
若要加入常數變數
-
如上所述,輸入一般選項。
-
在「值」欄位中,輸入變數值。您可以輸入字母、數字和符號。如果使用原始格式,甚至可以使用通配符。
-
在值的預覽中,Grafana 會顯示目前變數值的清單。檢閱它們,以確保它們符合您的期望。
-
選取「新增」以將變數新增至圖標板。
新增資料來源變數
資料來源變數可讓您快速變更整個儀表板的資料來源。如果您有資料來源的多個執行個體 (也許在不同的環境中),它們就很有用。
若要新增資料來源變數
新增間隔變數
使用間隔變數來表示時間範圍1m
,例如1h
、或1d
。您可以通過時間命令將它們視為儀表板範圍的組。間隔變數會變更資料在視覺效果中的分組方式。您也可以使用「自動選項」,在每個時間範圍內傳回設定數量的資料點。
您可以使用間隔變數做為依時間 (針對 InfluxDB)、日期長條圖間隔 (適用於 Elasticsearch) 分組的參數,或做為摘要函數參數 (針對石墨)。
若要新增間隔變數
-
如上所述,輸入一般選項。
-
在「值」欄位中,輸入您要顯示在變數下拉式清單中的時間範圍間隔。支援下列時間單位:
s (seconds)
m (minutes)
、h (hours)
、d (days)
、w (weeks)
、M (months)
、和y (years)
。您也可以接受或編輯預設值:1m,10m,30m,1h,6h,12h,1d,7d,14d,30d
。 -
(選擇性) 如果您要將選項新增至清單,請開啟「自動
auto
選項」。此選項可讓您指定目前時間範圍應分割多少次,以計算目前的auto
時間範圍。如果您將其開啟,則會出現另外兩個選項:-
步數 — 選取目前時間範圍要除以計算值的次數,類似於「最大資料點查詢」選項。例如,如果目前可見的時間範圍為 30 分鐘,則
auto
間隔會將資料分組為 30 個 1 分鐘的增量。預設值為 30 個步驟。 -
最小間隔 — 最小臨界值,低於此臨界值的步數間隔不會分割時間。若要繼續 30 分鐘的範例,如果最小間隔設定為 2m,則 Grafana 會將資料分組為 15 個兩分鐘的增量。
-
-
在值的預覽中,Grafana 會顯示目前變數值的清單。檢閱它們,以確保它們符合您的期望。
-
選取「新增」以將變數新增至圖標板。
間隔變數範例
下面的例子顯示了石墨函數myinterval
的模板變量:
summarize($myinterval, sum, false)
新增臨機操作篩選器
臨機操作篩選器可讓您新增機碼值篩選器,這些篩選器會自動新增至使用指定資料來源的所有量度查詢。與其他變數不同,您不會在查詢中使用隨機篩選器。相反地,您可以使用臨機操作篩選器來撰寫現有查詢的篩選器。
注意
特設篩選器變數僅適用於 Prometheus、洛基、InfluxDB 和彈性搜尋資料來源。
-
如上所述,輸入一般選項。
-
在「資料來源」清單中,選取目標資料來源。
您也可以選擇 [開啟進階資料來源選擇器] 以查看更多選項,包括新增資料來源 (僅限管理員)。如需詳細資訊,請參閱 連線至資料來源。
-
選取「新增」以將變數新增至圖標板。
建立臨機操作篩選器
臨機操作過濾器是可用的最複雜和靈活的變量選項之一。此變數可讓您建立儀表板範圍的臨機操作查詢,而不是一般的變數選項清單。以此方式套用的篩選會套用至管控面板上的所有面板。
設定變數選取選項
「選取選項」是可用來管理變數選項選取項的功能。所有選取選項都是可選的,並且預設為關閉。
多值變數
使用選擇的多個值插入變量非常棘手,因為如何將多個值格式化為在使用該變量的給定上下文中有效的字符串並不簡單。Grafana 試圖通過允許每個數據源插件通知模板插值引擎用於多個值的格式來解決這個問題。
注意
變數上的 [自訂所有值] 選項必須為空白,Grafana 才能將所有值格式化為單一字串。如果保留空白,則 Grafana 將查詢中的所有值串聯 (加在一起)。例如 value1,value2,value3
。如果使用自訂all
值,則值將會是*
或all
。
具有 Graphite 資料來源的多值變數
石墨使用水珠表達式。在這種情況下,具有多個值的變量被內插,就好像{host1,host2,host3}
當前變量值 iss host1,host 2 和 host3 一樣。
具有 Prometheus 或 InfluxDB 資料來源的多值變數
InfluxDB 和 Prometheus 使用正則表達式,因此相同的變量被插入為. (host1|host2|host3)
每個值也被正則表達式轉義。如果不是,則帶有正則表達式控制字符的值將中斷正則表達式表達式。
具有彈性資料來源的多值變數
彈性搜索使用 Lucene 查詢語法,因此相同的變量被格式化為。("host1" OR "host2" OR "host3")
在這種情況下,每個值都會逸出,以便該值僅包含 lucene 控制字和引號。
疑難排解多值變數
自動轉義和格式化可能會導致問題,掌握背後的邏輯可能很棘手。特別是對於 InfluxDB 和 Prometheus,其中使用正則表達式語法要求該變量在正則表達式運算符上下文中使用。
如果您不希望 Grafana 執行此自動正則表達式轉義和格式化,則必須執行以下操作之一:
-
關閉「多值」或「包含全部」 選項。
-
使用原始格式。
包含全部選項
Grafana 將一個All
選項添加到變量下拉列表中。如果使用者選取此選項,則會選取所有變數選項。
自訂所有值
只有在選取「包括全部」選項時,此選項才可見。
在「自訂全部值」欄位中輸入正則運算式、全域或 lucene 語法,以定義選項的值。All
依預設,該All
值包括組合運算式中的所有選項。這可能會變得很長,並且可能會出現性能問題。有時,指定自定義所有值可能會更好,例如通配符正則表達式。
要在「自定義所有值」選項中使用自定義正則表達式,globs 或 lucene 語法,它永遠不會被轉義,因此您必須考慮什麼是數據源的有效值。
全域變數
Grafana 具有全域內建變數,可用於查詢編輯器中的運算式。本主題會依字母順序列出並加以定義。這些變數在查詢、管控面板連結、面板連結和資料連結中非常有用。
$ __ 儀表板
此變數是目前儀表板的名稱。
$ __ 從和 $ __ 到
Grafana 有兩個內建的時間範圍變數:$__from
和。$__to
它們目前總是在默認情況下內插為 epoch 毫秒,但您可以控制日期格式。
語法 | 示例結果 | 描述 |
---|---|---|
|
1594671549254 |
毫秒紀元 |
|
2020-07-13T 20:09.254 |
沒有參數,預設值為 ISO 8601/RFC 3339 |
|
2020-07-13T 20:09.254 |
異 8601/RFC 3339 |
|
1594671549 |
秒纪元 |
|
2020-07 |
任何不包含:字元的自訂日期格式 |
上面的語法也適用於${__to}
。
$ __ 間隔
您可以使用$__interval
變數做為參數,依時間 (針對 InfluxDB、MySQL、Postgres、MSSQL)、日期長條圖間隔 (針對彈性搜尋) 或做為摘要函數參數 (針對石墨) 進行分組。
Grafana 會自動計算可用於在查詢中按時間分組的間隔。當資料點數量超過圖表上可顯示的數量時,可以透過較大的間隔進行分組,使查詢更有效率。例如,如果您查看的是 3 個月資料的圖表,則可能無法查看分鐘層級的詳細資料。按小時或日期分組可以使查詢更有效率,而不會影響圖表顯示的內容。使用時間範圍和圖形的寬度 (像素數) 來計算。$__interval
近似計算:(to - from) / resolution
例如,當時間範圍為 1 小時且圖形為全螢幕時,可能會將間隔計算為 2m
-點會以 2 分鐘的間隔進行分組。如果時間範圍為 6 個月,並且圖表是全屏,則間隔可能是1d
(1 天)-點按天分組。
在 InfluxDB 資料來源中,舊版變數$interval
是相同的變數。 $__interval
應該用來代替。
InfluxDB 和 Elasticsearch 資料來源具有用於對間隔進行硬式編碼或設定$__interval
變數的最小限制的Group by time
interval
欄位 (例如,使用>
語法)。>10m
$ __ 間隔 _ 毫秒
該變量是以毫秒為單位的$__interval
變量,而不是時間間隔格式化的字符串。例如,如果$__interval
是,20m
則$__interval_ms
是1200000
。
$ __組織
此變數是目前組織的 ID。 ${__org.name}
是目前組織的名稱。
$ __ 用戶
${__user.id}
是目前使用者的 ID。 ${__user.login}
是目前使用者的登入控制代碼。 ${__user.email}
是目前使用者的電子郵件。
$ __ 範圍
僅支援 Prometheus 和洛基資料來源。此變數表示目前儀表板的範圍。它是由計算to -
from
。它有一個毫秒和第二個表示稱為$__range_ms
和$__range_s
。
$ $ 速率間隔
僅支援 Prometheus 資料來源。該$__rate_interval
變量是為了在速率函數中使用。
$ 時間過濾器或 $ __ 時間過濾器
$timeFilter
變數會傳回目前選取的時間範圍做為運算式。例如,時間範圍間隔Last 7
days
運算式為time > now() - 7d
。
這在幾個地方使用,包括:
-
資料庫資料來源的 WHERE 子句。Grafana 在查詢編輯器模式下自動將其添加到 InfluxDB 查詢中。您可以在文字編輯器模式下手動新增:
WHERE $timeFilter
。 -
Azure 監視器資料來源中的記錄分析查詢。
-
SQL 查詢中的 MySQL 查詢, 郵件, 和 MSSQL.
-
該
$__timeFilter
變量在 MySQL 數據源中使用。
$ __ 時區
$__timezone
變數會傳回目前選取的時區,utc
或 IANA 時區資料庫的項目 (例如America/New_York
)。
如果目前選取的時區是瀏覽器時間,Grafana 會嘗試判斷您的瀏覽器時區。
链变量
鏈接變量,也稱為鏈接變量或嵌套變量,是在其變量查詢中具有一個或多個其他變量的查詢變量。
鏈接變量查詢對於每個數據源都不同,但所有數據源的前提都是相同的。您可以在允許它們的任何資料來源中使用鏈結變數查詢。
非常複雜的鏈接模板儀表板是可能的,深度為 5 或 10 個級別。從技術上講,您可以進入的深度或複雜度沒有限制,但是您擁有的鏈接越多,查詢負載就越大。
最佳做法和提示
下列作法可讓您的儀表板和變數更易於使用。
建立新的連結變數
-
鏈接變量創建父/子依賴關係。您可以將它們設想為梯子或樹。
-
創建新的鏈接變量的最簡單方法是複製要基於新變量的變量。在變數清單中,按一下變數項目右側的「複製變數」圖示,以建立複本。然後,您可以添加到對父變量的查詢。
-
以此方式建立的新變數會顯示在清單底部。您可能需要將其拖動到列表中的其他位置,以使其按邏輯順序排列。
可變順序
您可以按一下每個項目右側的向上和向下箭頭,變更儀表板變數清單中變數的順序。Grafana 根據此列表從左到右列出變量下拉菜單,在最左邊的頂部的變量。
-
在其子變量之前列出頂部沒有依賴關係的變量。
-
每個變量應遵循它所依賴的變量。
-
請記住,UI 中沒有指示哪些變量具有依賴關係。以邏輯順序列出變量,以便在其他用戶(和您自己)上輕鬆使用。
複雜性考量
變數中的相依層次越多,變更變數後更新儀表板所需的時間就越長。
例如,如果您有一系列四個連結的變數 (國家/地區、地區、伺服器、量度),且變更了根變數值 (國家/地區),則 Grafana 必須先對所有相依變數執行查詢,才能更新儀表板中的視覺效果。
管理變數
「變數」頁面可讓您新增變數和管理現有變數。它也可讓您檢查變數,並識別是否在其他變數或儀表板中參照 (或使用) 變數。
移動 — 您可以使用拖放方式將變數向上或向下移動清單。
複製 — 若要複製變數,請按一下右側圖示集中的複製圖示。這將創建一個變量的副本,其名稱前綴為原始變量。copy_of_
刪除 — 若要刪除變數,請按一下右側圖示集中的垃圾桶圖示。
使用正則表達式過濾
使用正則表達式查詢選項,您可以過濾由變量查詢返回的選項列表或修改返回的選項。
本頁顯示如何使用正則表達式過濾/修改變量下拉列表中的值。
使用正則表達式查詢選項,您可以過濾由變量查詢返回的選項列表或修改返回的選項。如需詳細資訊,請參閱 Mozilla 規則運算式
下列範例顯示下列選項清單的篩選
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
僅支援text
和value
擷取群組名稱。