簡體   English   中英

是否有可能在 PromQL 中對聚合執行范圍 function?

[英]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 (請參閱聚合運算符)。

數據錯誤 Model

顯然,您的數據存在問題,無法讓您正確應用計數器功能(例如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

目前的方法有很多缺點,只是其中的幾個:

  • 浪費 memory 資源(N 個具有值的指標而不是具有值 N 的指標)
  • 浪費計算資源(“獲取計數器”的附加查詢)
  • 結果對節點重啟沒有抵抗力,因為聚合是在計數器 function( increase之前應用的(請參閱“速率然后求和”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM