带有范围向量的标签对Prometheus的查询

时间:2020-10-05 15:20:55

标签: java prometheus promql spring-micrometer

我在我的应用程序中定义了许多计数器(使用java千分尺),并且为了触发警报,我将要监视的计数器标记为“错误”:“警报”,以便进行类似{{1}的查询}将生成多个范围向量:

{error="alert"}

我无法控制计数器的名称,只能将标签添加到要在警报中使用的计数器。我要发出的警报是,如果所有标有error =“ alert”的计数器在一小时内增加超过3,那么我可以使用这种查询: error_counter_component1{error="alert", label2="random"} error_counter_component2{error="alert", label2="random2"} error_counter_component3{error="none", label2="random3"} ,但是在Prometheus中却得到了令人讨厌的错误:{ {1}}

是否可以合并两个范围向量,或者我应该在计数器名称中包含某种标签?还是应该为错误设置一个计数器,并且标记应指定类似以下内容的来源:

increase({error="alert"}[1h]) > 3

1 个答案:

答案 0 :(得分:1)

带有source="componentX"标签的版本更适合Prometheus数据模型。假设error_counter度量标准实际上是一个度量标准,并且与source标签值不同,它将具有相同的标签等(例如,它是由同一库或框架发出的)。

添加类似use_in_alerts标签的东西不是一个很好的解决方案。这样的标签不能识别时间序列。 我要说的是,在要构建警报查询的地方放一些要发出警报的组件列表,并动态创建单独的警报规则(无需在原始数据中添加此类标签)。 另一种解决方案是拥有一个单独的伪度量,该伪度量将被用于提供有关组件的元数据,例如:

   component_alert_on{source="component2"} 1

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