我在我的应用程序中定义了许多计数器(使用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
答案 0 :(得分:1)
带有source="componentX"
标签的版本更适合Prometheus数据模型。假设error_counter
度量标准实际上是一个度量标准,并且与source
标签值不同,它将具有相同的标签等(例如,它是由同一库或框架发出的)。
添加类似use_in_alerts
标签的东西不是一个很好的解决方案。这样的标签不能识别时间序列。
我要说的是,在要构建警报查询的地方放一些要发出警报的组件列表,并动态创建单独的警报规则(无需在原始数据中添加此类标签)。
另一种解决方案是拥有一个单独的伪度量,该伪度量将被用于提供有关组件的元数据,例如:
component_alert_on{source="component2"} 1
和。将其组合到警报规则中,仅在您需要的组件上发出警报。它可以以任何可能的方式生成,但是一种可能是将其添加到静态记录规则中。这具有使警报查询复杂化的缺点。
但是当然use_in_alerts
标签也可能会起作用(至少在您仅针对该指标发出警报时)。