【问题标题】:Prometheus query by label with range vectorsPrometheus 按标签查询范围向量
【发布时间】:2021-01-20 11:46:20
【问题描述】:

我在我的应用程序中定义了很多计数器(使用 java micrometer),为了触发警报,我将要监视的计数器标记为“错误”:“警报”,因此像 {error="alert"} 这样的查询将生成多个范围向量:

   error_counter_component1{error="alert", label2="random"}
   error_counter_component2{error="alert", label2="random2"}
   error_counter_component3{error="none", label2="random3"}

我无法控制计数器的名称,我只能将标签添加到我想在警报中使用的计数器。我想要的警报是,如果所有标有 error="alert" 的计数器在一小时内增加超过 3 个,所以我可以使用这种查询:increase({error="alert"}[1h]) > 3 但我在 Prometheus 中得到了休闲错误:Error executing query: vector cannot contain metrics with the same labelset

有没有办法合并两个范围向量,或者我应该在计数器名称中包含某种标签?或者我应该有一个错误计数器,并且标签应该指定如下来源:

errors_counter{source="component1", use_in_alert="yes"}
errors_counter{source="component2", use_in_alerts="yes"}
errors_counter{source="component3", use_in_alerts="no"}

【问题讨论】:

    标签: java prometheus promql spring-micrometer


    【解决方案1】:

    带有source="componentX" 标签的版本更适合prometheus 数据模型。这是假设 error_counter 指标确实是一个指标,并且除了 source 标签值之外,它将具有相同的标签等(例如,它由相同的库或框架发出)。

    添加use_in_alerts 标签之类的东西并不是一个很好的解决方案。这样的标签不识别时间序列。 我会说在构建警报查询的地方放置一个要警报的组件列表,并动态创建单独的警报规则(不向原始数据添加此类标签)。 其他解决方案是拥有一个单独的伪指标,该指标仅用于提供有关组件的元数据,例如:

       component_alert_on{source="component2"} 1
    

    和。将其结合在警报规则中,以仅对您需要的组件发出警报。它可以以任何可能的方式生成,但一种可能性是将其添加到静态记录规则中。这具有以某种方式使警报查询复杂化的缺点。 但当然use_in_alerts 标签也可能有效(至少在您只针对此指标发出警报时)。

    【讨论】:

    • 感谢您的回答。当您说“构建警报查询并动态创建单独的警报规则”时,您的意思是有某种查询生成器可以创建 alerts.yml 文件?
    猜你喜欢
    • 1970-01-01
    • 2017-04-04
    • 2022-07-22
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 2020-12-27
    • 2020-05-21
    • 1970-01-01
    相关资源
    最近更新 更多