Grafana 每分钟绘制 HTTP 请求数 http_server_requests_seconds_count

Grafana graphing HTTP requests per minute with http_server_requests_seconds_count

我有一个 Spring 启动应用程序使用测微计抛出开放指标统计数据。

对于我的每个 HTTP 端点,我可以看到以下指标,我认为它跟踪给定端点的请求数:

http_server_requests_seconds_count

我的问题是如何在 Grafana 查询中使用它来显示每分钟调用我的端点的请求数?

我试过了

http_client_requests_seconds_count{}

总和(率(http_client_requests_seconds_count{}[1m]))

但都不起作用。

提前致谢。

rate(http_client_requests_seconds_count{}[1m]) 将为您提供每秒收到的服务请求数。

然而,通过使用 [1m],它只会查看最后一分钟来计算该数字,并且要求您以少于一分钟的速度收集样本。意思是,您需要在该时间段内收集到 2 次刮擦。

increase(http_client_requests_seconds_count{}[1m]) 会 return 在那个时间段内计数增加了多少,这可能是您想要的,尽管您仍然需要在那个 window 中有 2 个数据点得到一个结果。

您可以通过其他方式实现结果:

increase(http_client_requests_seconds_count{}[2m]) / 2通过查看 2 分钟以上然后将其除以,您将获得更多数据并且它会平缓尖峰,因此您将获得更平滑的图表。

rate(http_client_requests_seconds_count{}[1m]) * 60 通过将 rate 乘以 60,您可以将每秒速率更改为每分钟值。

这是一篇您可以深入研究的文章,以详细了解它们的计算方式以及增加可能与整数值不完全一致的原因:https://promlabs.com/blog/2021/01/29/how-exactly-does-promql-calculate-rates

http_client_requests_seconds_count 指标是 counter. This means it may increase over time and may reset to zero when the service, which exposes this metric, is restarted. This metric counts the number of requests since the last service restart according to its name (see naming conventions for Prometheus metrics)。

Prometheus 提供了 increase() function for calculating the counter increase on the lookbehind window specified in square brackets (see time duration format 可能的值,可以在方括号中指定)。因此,increase(http_client_requests_seconds_count[1m]) return 是最后一分钟的请求数,也就是 requests per minute

不幸的是,Prometheus 中的 increase() 函数存在以下问题,可能会导致意外结果:

  • 在指定的回顾 window 上至少需要两个原始样本。否则它 return 的响应是空的。
  • 由于外推,应用于整数计数器时可能会 return 小数结果。有关详细信息,请参阅 this issue
  • 它可能 return 低于预期结果,因为它错过了回顾 window 中第一个原始样本与前一个原始样本之间的增加。

Prometheus 开发人员将修复这些问题 - 请参阅 this design doc. In the mean time VictoriaMetrics 可以使用 - 它的 increase() 功能没有上述问题。