从多个指标(相同的标签集,不同的名称)绘制 rate() 时如何避免“向量不能包含具有相同标签集的指标”错误
Posted
技术标签:
【中文标题】从多个指标(相同的标签集,不同的名称)绘制 rate() 时如何避免“向量不能包含具有相同标签集的指标”错误【英文标题】:How to avoid "vector cannot contain metrics with the same labelset" error when plotting rate() from several metrics (same labelset, different names) 【发布时间】:2021-10-26 20:06:48 【问题描述】:在 Prometheus 中,有时我们需要像 PromQL 查询一样一次绘制多个指标(例如,具有名称、拟合相同的正则表达式):
name=~"camel_proxy.*count"
它工作正常,相同的标签集线用不同的名称绘制。
当我们想绘制它们的 rate() 时,我们会遇到标题中的错误:
rate(name=~"camel_proxy.*count"[5m])
所以,这里的方法是让labelset不一样,把__name__
移动到某个label,让每个labelset都是唯一的:
rate(label_replace(name=~"camel_proxy.*count","name_label","$1","name", "(.+)")[5m])
但我们仍然收到类似的错误
1:90: parse error: ranges only allowed for vector selectors"
如何避免它并正确绘制费率?
【问题讨论】:
我发现我必须在 Ilya 在此处共享的查询中使用__name__
而不是 name
- 既在开头的度量选择器中,也在 label_replace
函数中,如下所示:label_replace(__name__=~"camel_proxy.*count","name_label","$1","__name__", "(.+)")
(我尝试通过编辑来更新问题本身,但 Stack Overflow 上的编辑队列已满????)
【参考方案1】:
这里的 PromQL 查询应该是
rate(label_replace(name=~"camel_proxy.*count","name_label","$1","name", "(.+)")[5m:])
请注意 5m**:** 而不是 5m
【讨论】:
以上是关于从多个指标(相同的标签集,不同的名称)绘制 rate() 时如何避免“向量不能包含具有相同标签集的指标”错误的主要内容,如果未能解决你的问题,请参考以下文章