从多个指标(相同的标签集,不同的名称)绘制 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() 时如何避免“向量不能包含具有相同标签集的指标”错误的主要内容,如果未能解决你的问题,请参考以下文章

从向量中绘制带有希腊符号的轴标签

在seaborn中绘制多个箱线图?

将多个指标列分解为 2 个不同的列,并引入一个标签来跟踪两列的列名

在R中绘制具有相同名称的列

对训练和测试数据帧使用相同的标签编码器

如何区分不同服务的指标