在同一张图中聚合不同的普罗米修斯指标

Posted

技术标签:

【中文标题】在同一张图中聚合不同的普罗米修斯指标【英文标题】:Aggregate different prometheus metrics in same graph 【发布时间】:2021-03-29 02:43:47 【问题描述】:

我有一个应用程序向 prometheus 公开不同的指标。这个应用程序一开始是非常具体的,所以它暴露了像service_name_especific_event_processedevent_type="(type1|type2)", result="(acked|discarded)"这样的高度具体的指标,但后来我们在我们的生态系统中让它更加通用,我们开始暴露更多的通用指标,比如service_name_event_processedevent_type="one_of_a_range_of_types", result="(acked|discarded)"

如您所见,尽管它们是不同的指标,但它们共享同一组标签 [event_type, result],我们希望在 Grafana 中创建一个面板,将它们显示为聚合的,就好像它们是相同的指标一样,只需按event_typeresult 对它们进行分组,因此我们将拥有一个填充所有不同事件类型的下拉选择器,这将允许我们显示特定事件类型的指标。也就是说,我们仅针对其中一个指标的面板将由诸如sum(rate(service_name_event_processedevent_type=~"$event_type"[1m])) by (result) 之类的 promql 查询填充。并且要将两个指标聚合并显示在同一个面板中,并且能够按event_type 进行拆分,我想到的查询类似于sum(rate(service_name_specific_event_processedevent_type=~"$event_type"[1d])) by (result) + sum(rate(service_name_event_processedevent_type=~"$event_type"[1d])) by (result)。该查询成功了,但它有一个问题,如果没有任何指标的值,它会返回一个空结果,因此它不会在图表中显示任何内容。

话虽如此,您知道实现我正在寻找的结果的任何替代方法吗? (当然我知道我可以更改特定指标的名称,只有一个指标由其 event_type 和结果标签区分,但现在不是一个选项)

【问题讨论】:

尝试使用or 运算符而不是+ 运算符 非常感谢@valyala!它就像一个魅力:-) 【参考方案1】:

正如@valyala 在 cmets 中建议的那样,为了实现我想要的,我只需将 + 替换为 or 运算符。所以得到的查询如下

sum(rate(specific_event_processedevent_type=~"$event_type"[1d])) by (result) or sum(rate(event_processedevent_type=~"$event_type"[1d])) by (result)

【讨论】:

以上是关于在同一张图中聚合不同的普罗米修斯指标的主要内容,如果未能解决你的问题,请参考以下文章

普罗米修斯:如果我也将直方图用于同一种指标,使用计数器有啥好处吗?

如何在普罗米修斯中使用 relable_config 为指标添加前缀

普罗米修斯查询中来自grafana变量的多个值

指标在普罗米修斯中不可见

Apache Flink 在 UI 中显示自定义指标,但普罗米修斯指标报告器没有抓取它们

在普罗米修斯中显示任意@Timed 指标