如何在 Prometheus/Grafana 中不指定标签的情况下通过唯一标签计算指标数量?

Posted

技术标签:

【中文标题】如何在 Prometheus/Grafana 中不指定标签的情况下通过唯一标签计算指标数量?【英文标题】:How can I calculate the number of metrics by unique labels without specifying a label in Prometheus/Grafana? 【发布时间】:2021-05-27 17:45:31 【问题描述】:

因为所有 URL 都是动态的,所以我无法在对标签进行分组时指定特定的 URL。因为每次都会出现一个唯一的 URL。

这是一个指标示例。

16:00:00
http_tracemethod="GET",status="404",uri="/actuator/conditions/777", 1.0
http_tracemethod="GET",status="200",uri="/actuator/conditions", 3.0
http_tracemethod="GET",status="200",uri="/actuator/test", 3.0
http_tracemethod="GET",status="200",uri="/actuator/beans", 3.0

16:00:30
http_tracemethod="GET",status="404",uri="/actuator/conditions/777", 4.0
http_tracemethod="GET",status="200",uri="/actuator/conditions", 2.0
http_tracemethod="GET",status="200",uri="/actuator/test", 6.0
http_tracemethod="GET",status="200",uri="/actuator/beans123", 7.0

如何进行 Promethus 或 Grafana 查询 - 以便我得到那个号码。?

uri="/actuator/conditions/777" -> 5.0
uri="/actuator/conditions" -> 5.0
uri="/actuator/test" -> 9.0
uri="/actuator/beans" -> 3.0
uri="/actuator/beans123" -> 7.0

谢谢。

【问题讨论】:

【参考方案1】:

如果您想计算按某个标签分组的指标值的总和

sum(http_trace) by (uri)

这将为您提供以下结果:

uri="/actuator/conditions/777" 5.0
uri="/actuator/conditions" 5.0
uri="/actuator/test" 9.0
uri="/actuator/beans" 3.0
uri="/actuator/beans123" 7.0

如果您想获取按uri 分组的时间序列数(=有多少指标):

count(http_trace) by (uri)

结果将是:

uri="/actuator/conditions/777" 1.0
uri="/actuator/conditions" 1.0
uri="/actuator/test" 1.0
uri="/actuator/beans" 1.0
uri="/actuator/beans123" 1.0

这显示有多少具有唯一标签集的指标,按uri 标签分组。

【讨论】:

sum(http_trace) by (uri) 谢谢。有效,但不完全正确。如果我选择 2 小时的间隔,那么我可以看到我想看到的。也就是说,应该如此。如果我选择一天或几天的间隔,它会显示完全不同的东西。 @JDev 您可能希望添加increase() 函数来计算一段时间内的增量。那将是sum(increase(http_trace[2d])) by (uri) 谢谢。那么默认间隔是多少?但由于某种原因,我不明白为什么我会得到不完整的数字,例如(13.5 或 4.5) @JDev 默认为无间隔,即当前或最后一个指标。指标可能会随着时间的推移而消失(如果导出器重新启动或脱机),这就是为什么您会在很长一段时间内得到奇怪的结果。至于increase() 函数的行为,它的工作原理类似于rate[interval] 乘以间隔中的秒数。这在文档中进行了解释:prometheus.io/docs/prometheus/latest/querying/functions/… 我已经阅读了好几遍文档,这个概念有点难以理解。我了解某些时期没有指标。但我不明白为什么它根本不采用那些存在的指标并且不总结它们。

以上是关于如何在 Prometheus/Grafana 中不指定标签的情况下通过唯一标签计算指标数量?的主要内容,如果未能解决你的问题,请参考以下文章

Prometheus + Grafana 部署说明之安装

如何使用 Spring Boot + Prometheus + Grafana 确定时间范围内的准确请求计数

如何启用 Prometheus/Grafana 来显示我的 rabbitmq 指标?目前没有显示数据

如何在 Prometheus Grafana 中计算正常运行时间百分比或停机时间百分比

prometheus+grafana监控rabbitmq

prometheus+grafana监控nginx