簡體   English   中英

如何在 PromQL 中獲得兩個指標中的最小值?

[英]How to get the minimum of two metrics in PromQL?

我正在尋找類似於 SQL 的 LEAST() 函數的東西。
由於存在二元運算符(以及定義明確的匹配行為),人們會期望也會有 min/max,但找不到這樣的函數。

我知道這可以使用正則表達式(即min(__name__=~"a|b") )實現,但希望盡可能避免此類黑客攻擊。

我很確定這是最有效的方法。 如果你想避免使用正則表達式,你可以寫成:

a < b or b

但以這種方式計算可能更昂貴。 (當然,除非您直接使用記錄規則而不是min(a)min(b) 。甚至可能如此。您只需要自己對其進行基准測試。)

這里需要問的問題是你如何比較兩個向量?

標量是可比的——但向量一般不是。 如果您想比較它們,您必須定義可以衡量它們的數學指標。

需要有一組可比較的元素才能確定其中的最小值。 這就是為什么 Prometheus 中的min函數只有一個參數而不是更多。 這個參數實際上是一個可比較元素的列表。

例如你可以試試這個:

  1. 首先執行以下操作:
(count(up{squad=~"XYZ"}) by(env))

對我來說,結果集看起來像這樣(更重要的是這些是可比的):

{env="dev"}         61
{env="preprod"}     39
{env="prod"}        39

然后當我執行這個:

max((count(up{squad=~"XYZ"}) by(env)))

我得到結果:

{}              61

這是預期的。

以上將返回具有最多可達實例的環境 - 因為在最大值之前我們做了聚合(計數函數),它返回與其他標量值相當的標量值 - 代表其他環境中的實例數量。

暫無
暫無

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

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