获取一段时间内的总请求数

Fac*_*mbo 33 prometheus promql

我需要在Grafana中显示一个面板,其中包含在右上角选择的时间段内的请求数.

为此,我需要在这里解决2个问题,我将在这里问prometheus问题和另一个链接中的Grafana问题.

如果我有一个计数器http_requests_total,我如何构建一个查询来获取一个整数,其中包含一段时间内的请求总数(例如:24小时)?

Yoo*_* N. 51

你需要的是increase()函数,它将计算指定时间间隔开始和结束时计数器值之间的差异.它还可以在该时间段内正确处理计数器重置(如果有的话).

increase(http_requests_total[24h])
Run Code Online (Sandbox Code Playgroud)

如果您有多个计数器http_requests_total(例如来自多个实例)并且您需要获取累积的请求数,请使用sum()运算符:

sum(increase(http_requests_total[24h]))
Run Code Online (Sandbox Code Playgroud)

另请参阅对在查询中使用Grafana时间范围选择的问题部分的答案.

  • 如果期限不是最后的24小时,而是从第一个日期和时间以及第二个日期和时间开始怎么办? (3认同)
  • 实际上,在服务器重新启动时,prometheus 值会重置为 0,因此图表会突然下降,如果我们看到 24 小时的增加,则它会不准确,因为它是第一个值和最后一个值的差异,有更好的方法吗? (3认同)
  • @somyabhargava 我遇到了确切的问题 - 我在 /sf/ask/3914965561/ 上找到了答案。所以在这种情况下它将是 `sum(increase(http_requests_total[100y]))` (2认同)
  • 但是“sum(increase(http_requests_total[100y]))”将为您提供计数器整个生命周期内的总值,而不仅仅是选定的时间间隔 (2认同)

avi*_*amg 12

解决方案:为了计算 prometheus grafana 上的 https 计数器总和,您应该使用increase方法并设置通用时间范围 $interval,以便对所有 http 请求计数器进行求和和计算。

increase(http_requests_total[$interval])
Run Code Online (Sandbox Code Playgroud)

根据普罗米修斯参考资料

increase() increase(v range-vector)计算范围向量中时间序列的增量。单调性中断(例如由于目标重新启动而导致的计数器重置)会自动调整。该增加被推断为覆盖范围向量选择器中指定的完整时间范围,因此即使计数器仅增加整数增量,也可以获得非整数结果。

以下示例表达式返回过去 5 分钟内测量的范围向量中每个时间序列的 HTTP 请求数:

increase(http_requests_total{job="api-server"}[5m])增加只能与计数器一起使用。它是速率(v)乘以指定时间范围窗口下的秒数的语法糖,应主要用于人类可读性。记录规则中的使用率,以便每秒一致地跟踪增长情况。

聚苯乙烯

  1. 您应该在 Grafana 上设置正确的快速范围,以设置您选择的正确时间范围(直接渲染为$interval变量)此外,我建议在图形可视化上设置 正确的分辨率和最小时间间隔(在您的情况下是每天 -> 1d

2.为了汇总所有请求量,只需执行 sum 函数

sum(increase(http_requests_total[$interval]))
Run Code Online (Sandbox Code Playgroud)


小智 10

根据增加()文档,它不是聚合运算符。因此,它会给出错误的答案。(见说明。)

您应该使用sum_over_time()函数,它在时间间隔内聚合。

sum_over_time(http_requests_total[24h])
Run Code Online (Sandbox Code Playgroud)

如果您有多个计数器,请使用 sum() 运算符:

sum(sum_over_time(http_requests_total[24h]))
Run Code Online (Sandbox Code Playgroud)

注意:我有 5 个数据点,其值分别为:847、870、836、802、836。(每分钟更新一次)

increase(http_requests_total[5m]) returns 2118.75 

sum_over_time(http_requests_total[5m]) returns 4191
Run Code Online (Sandbox Code Playgroud)

  • sum_over_time 不应直接在计数器上使用,应在速率之后使用。 (3认同)
  • 当我使用 sum(sum_over_time(http_requests_total[$__interval]))` 时,我仍然看到图表中出现下降,而它应该单调增加。 (2认同)

小智 8

因此,我不会对Yoory的答案发表评论,所以我必须重新编写一个...

在Grafana 5.3中,他们$__range为Prometheus 引入了更易于使用的方法:

sum(rate(http_requests_total[$__range]))
Run Code Online (Sandbox Code Playgroud)

此变量表示当前仪表板的范围。计算方法是:

http://docs.grafana.org/features/datasources/prometheus/

  • 注意:对我来说, $__range 确实有效,但 grafana 不会在其帮助工具提示/弹出窗口中将其显示为可用变量。硬核并把它打出来。 (4认同)

小智 5

http_requests_total - http_requests_total offset $__interval > 0
Run Code Online (Sandbox Code Playgroud)

这建立了另一个有效和处理重启情况的答案和评论。

偏移量始终将值保持为整数,并且不会尝试像increaserate函数那样执行插值。

最后的> 0过滤器将忽略由于重新启动而可能捕获的所有负值。

如果您选择在图例中选择总值,则最终结果是随着时间的推移准确的请求总数。

  • 使用increase()的所有答案并不适用于所有仪表板范围,但这个可以! (3认同)