本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
寫入運算式查詢
本文件主題是針對支援 Grafana 9.x 版的 Grafana 工作區所設計。
如需支援 Grafana 10.x 版的 Grafana 工作區,請參閱。在 Grafana 第 10 版工作
如需支援 Grafana 8.x 版的 Grafana 工作區,請參閱。在 Grafana 第 8 版中工作
伺服器端運算式可讓您透過數學運算和其他運算來處理從查詢傳回的資料。運算式會建立新資料,而不會操控資料來源傳回的資料。
關於表示式
伺服器端運算式可讓您透過數學運算和其他運算來操作查詢傳回的資料。運算式會建立新資料,並且不會操作資料來源傳回的資料,除了一些次要資料重組以使資料可接受的運算式輸入之外。
使用表示式
表達式主要由 Grafana 警報使用。該處理是在服務器端完成的,因此表達式可以在沒有瀏覽器會話的情況 不過,運算式也可以與後端資料來源和視覺效果搭配使用。
注意
運算式不適用於舊版儀表板警示。
運算式旨在透過讓來自不同資料來源的查詢合併或提供資料來源中無法使用的作業來增強資料來源。
注意
如果可能的話,您應該在資料來源內部執行資料處理。將資料從儲存裝置複製到 Grafana 伺服器進行處理效率低下,因此運算式的目標是輕量型資料處理。
運算式可與傳回時間序列或數字資料的資料來源查詢搭配使用。他們還對多維數據進行操作。例如,會傳回多個序列的查詢,其中每個序列都以標籤或標籤識別。
個別運算式會接受一或多個查詢或其他運算式做為輸入,並將資料加入到結果中。每個單獨的表達式或查詢都由一個變量表示,該變量是稱為其 ReFID 的命名標識符(例如,默認字母A
或B
)。
若要在另一個運算式中參考個別運算式或資料來源查詢的輸出,此識別碼會當做變數使用。
運算式的類型
運算式可處理兩種類型的資料。
-
時間序列的集合。
-
數字的集合,其中每個數字都是一個項目。
每個集合都會從單一資料來源查詢或運算式傳回,並由 ReFID 表示。每個集合都是一個集合,其中集合中的每個項目由其存儲為標籤或鍵值對的尺寸唯一標識。
資料來源查詢
伺服器端運算式僅支援後端資料來源的資料來源查詢。通常會假設資料標示為時間序列資料。future,我們打算添加查詢返回類型(數字或時間序列)數據的斷言,以便表達式可以更好地處理錯誤。
與運算式搭配使用時,資料來源查詢會由運算式引擎執行。當它這樣做時,它將數據重新構建為每個數據幀一個時間序列或一個數字。因此,例如,如果使用在表格檢視中的一個框架上傳回多個序列的資料來源,您可能會注意到使用運算式執行時,它看起來會有所不同。
當前,使用數據框時,唯一支持非時間序列格式(數字)是否有一個表響應返回沒有時間的數據框,字符串列和一個數字列:
位置 | 主機 | 平均中央电腦 |
---|---|---|
米婭 |
A |
1 |
NYC |
B |
2 |
上面的例子將產生與表達式一起工作的數字。字符串列成為標籤,數字列相應的值。例如{"Loc": "MIA", "Host": "A"}
,值為 1。
操作
您可以在運算式中使用下列運算:數學運算、減少和重新取樣。
Math (數學)
Math 適用於時間序列或數字資料上的自由格式數學公式。數學運算需要數字和時間序列作為輸入,並將其更改為不同的數字和時間序列。
例如,來自其他查詢或運算式的資料會以前綴為美元符號的 ReFID 參考。$A
如果變量在名稱中有空格,那麼你可以使用一個大括號語法,如${my variable}
。
數字常量可以是十進制(2.24
),八進制(前導零等072
)或十六進制(前導 0x 等0x2A
)。還支持指數和符號(例如)。-0.8e-2
運營商
支援算術 (+
、二進位和一元-
*
/
、%
、、指數**
)、關聯式 (<
>
、==
、!=
、>=
、、<=
) 和邏輯 (&&
||
、和一元!
) 運算子。
作業對資料的行為方式取決於它是數字還是時間序列資料。
使用二進位運算 (例如 $A + $B
or) 時$A || $B
,會根據資料類型以下列方式套用運算子:
-
如果
$A
和$B
都是一個數字,則在兩個數字之間執行操作。 -
如果一個變數是數字,而另一個變數是時間序列,則會執行時間序列中每個點的值與數字之間的運算。
-
如果
$A
和$B
都是時間序列資料,則會針對和中存在的每個時間戳記執行兩個序列中每個值之間的運算$B
。$A
該Resample
操作可用於排列時間戳記。
摘要:
-
號碼作業編號 = 號碼
-
數字 OP 系列 = 系列
-
OP 系列 = 系列
因為運算式可處理多個序列或以單一變數表示的數字,因此二進位運算也會在兩個變數之間執行聯集 (join)。這是基於與每個單獨的系列或編號相關聯的識別標籤來完成的。
因此,如果您有帶有標籤{host=web01}
的數字,$A
而另一個數字$B
具有相同的標籤,則在每個變量中的這兩個項目之間執行操作,並且結果將共享相同的標籤。此聯集行為的規則如下:
-
沒有標籤的項目將會加入任何項目。
-
如果兩者
$A
和$B
每個項目都只包含一個項目(一個系列或一個數字),則它們將加入。 -
如果標籤是精確的數學,他們將加入。
-
如果標示是另一個標籤的子集,例如,中的項目
$A
被標示,{host=A,dc=MIA}
且中的項目標示$B
為{host=A}
它們將會連接。 -
如果在變數內 (例如每個項目都
$A
有不同的標籤鍵),則聯結行為是未定義的。
關係運算符和邏輯運算符返回 0 為假 1 為真。
數學函數
雖然大多數函數都存在於自己的運算式運算中,但數學運算式確實有一些類似於數學運算子或符號的函數。當函數可以採取數字或序列,比相同類型的參數將被返回。當它是一個系列時,為系列中的每個點的值執行的操作。
腹肌
abs 返回它的參數,它可以是一個數字或一個系列的絕對值。例如 abs(-1)
或 abs($A)
。
是
is_inf 接受一個數字或一個序列,並返回1
Inf
值(負或正)和0
其他值。例如:is_inf($A)
。
注意
例如,如果您需要專門檢查負無窮大,則可以進行類似的比較$A == infn()
。
是南
is_nan 需要一個數字或一個序列,並返回1
NaN
值和0
其他值。例如:is_nan($A)
。此函數之所以存在,NaN
是因為不等於NaN
。
為空
is_null 接受一個數字或一個序列,並返回1
null
值和0
其他值。例如:is_null($A)
。
是號碼 (_)
is_number 接受一個數字或一個序列,並傳回1
所有實數值和0
其他值 (即null
、Inf+
Inf-
、和NaN
)。例如:is_number($A)
。
日誌
Log 返回其參數的自然對數,它可以是一個數字或一個系列。如果值小於 0,NaN
則返回。例如 log(-1)
或 log($A)
。
INF,信息,南和空
INF,INF,NAN 和空函數都返回名稱的單個值。它們主要存在用於測試。範例:null()
。
回合
回合返回一個四捨五入的整數值。例如 round(3.123)
或 round($A)
。
塞爾
Ceil 將數字四捨五入到最接近的整數值。例如,ceil(3.123)
傳回 4
。
地板
地板將數字向下舍入為最接近的整數值。例如,floor(3.123
) 傳回3
。
減少
Reduce 需要從查詢或運算式傳回的一或多個時間序列,並將每個序列轉換成單一數字。時間序列的標籤作為每個輸出的減少數量的標籤保存。
欄位:
-
功能 — 要使用的減少功能
-
輸入 — 要重新取樣的變數 (ReFID (例如
A
)) -
模式-當序列包含非數值(空,NaN,+-Inf)時,允許控制減少功能的行為
減少功能
Count (計數)
Count 返回每個系列的點數。
平均值
Mean 返回每個系列中所有值的總數除以該系列中的點數。在strict
模式下,如果系列中的任何值為 null 或 nan,或者如果該系列為空,則返回 NaN。
最小和最大
最小值和最大值分別返回系列中的最小值或最大值。在strict
模式下,如果系列中的任何值為 null 或 nan,或者如果該系列為空,則返回 NaN。
Sum (總和)
Sum 會傳回序列中所有值的總計。如果系列的長度為零,總和將為 0。在strict
模式下,如果系列中有任何 NaN 或 Null 值,則返回 NaN。
最後
Last 會傳回序列中的最後一個數字。如果該系列沒有值,則返回 NaN。
減少模式
嚴格
在嚴格模式下,輸入序列按原樣處理。如果系列中的任何值是非數字(空,NaN 或 +-Inf),則返回 NaN。
刪除非數字
在這種模式下,輸入系列中的所有非數值(空,NaN 或 +-Inf)在運行減少功能之前被過濾掉。
取代非數字
在此模式下,所有非數值都會由預先定義的值取代。
重新取樣
重新取樣會變更每個時間序列中的時間戳記,使其具有一致的時間間隔。主要用例是,您可以重新採樣不共享相同時間戳的時間序列,以便可以在它們之間執行數學運算。這可以通過重新採樣兩個系列中的每一個,然後在參考重新取樣變量的數學運算中完成。
欄位:
-
輸入 — 要重新取樣的時間序列資料變數 (ReFID (例如
A
)) -
重新取樣至 — 重新取樣至的持續時間,例如
10s.
Units 可以是s
秒、m
分鐘、h
小時、d
天、w
數週,以及數y
年。 -
縮減取樣 — 當每個視窗樣本有多個資料點時使用的縮減功能。如需行為詳細資訊,請參閱減少作業。
-
升級樣本 — 用於填充沒有資料點的視窗樣本的方法。
-
填充填充最後一個已知值
-
回填下一個已知值
-
填充填充空的示例窗口 NaNs
-
寫一個表達式
如果您的資料來源支援它們,則 Grafana 會顯示「表示式」按鈕,並在查詢編輯器清單中顯示任何既有的表示式。
寫入表示式的步驟
-
開啟面板。
-
在查詢下方,選擇「表示式」。
-
在「作業」欄位中,選取您要寫入的運算式類型。
-
寫表達式。
-
選擇套用。
特殊情況
當任何查詢的資料來源未傳回任何序列或數字時,運算式引擎會傳回NoData
。例如,如果要求包含兩個由運算式合併的資料來源查詢,如果NoData
至少由其中一個資料來源查詢傳回,則整個查詢的傳回結果為NoData
。如需 Grafana 警示如何處理NoData
結果的詳細資訊,請參閱。處理沒有數據或錯誤情況