[英]Is there a possibility to execute a range function over an aggregation in PromQL?
通常,具有范圍 function 和 PromQL 中的聚合是這樣構造的:
sum by(label) (increase(metric{label="label"}[1h]))
sum
是聚合器, increase
是范圍 function。
但是,我嘗試查詢的指標在不同時間僅返回1
,具有不同的 label 值。 它基本上是一個不斷增加的計數器。 沒有應用任何函數的 Grafana 中的(堆疊)圖如下所示: 因此,在此指標上應用范圍 function 是無用的,因為它永遠不會改變(保持為 1)。 我想
sum by(label)
,然后對結果執行increase
。 它看起來像這樣:
increase((sum by(label) (metric{label=~".*"}))[1h])
我自然而然地嘗試這樣做,查看文檔並試驗語法,但無濟於事。 我什至嘗試使用兩個單獨的查詢,但也不是很成功。 我還在 Grafana 9 中嘗試了新查詢“Builder”,看看是否可行,但沒有成功......
那么,有人建議如何將范圍 function 應用於(標簽)聚合嗎? 不幸的是,我不能直接更改 Prometheus 中的數據,必須依賴查詢的結果。
它看起來像這樣: increase((sum by(label) (metric{label=~".*"}))[1h])
此查詢的問題是您嘗試將即時向量傳遞給接受范圍向量的 function(請參閱增加和范圍與即時向量)。
要獲得范圍向量,您需要進行多個查詢,這可以通過記錄規則或子查詢來實現:
increase((sum by(label) (metric{label=~".*"}))[1h:])
很簡單,使用sum
聚合,但由於您不關心值(總是1
),請考慮使用count
(請參閱聚合運算符)。
顯然,您的數據存在問題,無法讓您正確應用計數器功能(例如increase
)。
你有:
12:00
{label="blue"} 1
12:30
{label="blue"} 1
{label="red"} 1
13:00
{label="blue"} 1
{label="red"} 1
{label="green"} 1
雖然它應該是:
12:00
{label="blue"} 1
12:30
{label="blue"} 2
{label="red"} 1
13:00
{label="blue"} 3
{label="red"} 2
{label="green"} 1
目前的方法有很多缺點,只是其中的幾個:
increase
)之前應用的(請參閱“速率然后求和” )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.