[英]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
函數只有一個參數而不是更多。 這個參數實際上是一個可比較元素的列表。
例如你可以試試這個:
(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.