我需要在 Grafana 中显示一个面板,其中右上角选择的时间段内的请求数。
为此我需要在这里解决 2 个问题,我会在这里问 prometheus 问题,在另一个链接中问 Grafana 问题。
如果我有一个 Counter http_requests_total
,我如何构建一个查询来获取一个整数,其中包含一段时间内的请求总数(例如:24hs)?
我需要在 Grafana 中显示一个面板,其中右上角选择的时间段内的请求数。
为此我需要在这里解决 2 个问题,我会在这里问 prometheus 问题,在另一个链接中问 Grafana 问题。
如果我有一个 Counter http_requests_total
,我如何构建一个查询来获取一个整数,其中包含一段时间内的请求总数(例如:24hs)?
您需要的是increase()函数,它将计算指定时间间隔开始和结束时计数器值之间的差异。它还可以正确处理该时间段内的计数器重置(如果有)。
increase(http_requests_total[24h])
如果您有多个计数器http_requests_total
(例如来自多个实例)并且需要获取请求的累积计数,请使用sum()运算符:
sum(increase(http_requests_total[24h]))
另请参阅我对在查询中使用 Grafana 的时间范围选择的那部分问题的回答。
所以不会让我评论 Yoory 的答案,所以我必须做一个新的......
在 Grafana 5.3 中,他们$__range
为 Prometheus 引入了更易于使用的功能:
sum(rate(http_requests_total[$__range]))
此变量表示当前仪表板的范围。它由 to - from 计算得出
根据increase() 文档,它不是聚合运算符。因此,它会给出错误的答案。(见说明。)
您应该使用随着时间间隔聚合的sum_over_time()函数。
sum_over_time(http_requests_total[24h])
如果您有多个计数器,请使用 sum() 运算符:
sum(sum_over_time(http_requests_total[24h]))
注意:我有 5 个数据点,其值为:847、870、836、802、836。(每分钟更新一次)
increase(http_requests_total[5m]) returns 2118.75
sum_over_time(http_requests_total[5m]) returns 4191
http_requests_total - http_requests_total offset $__interval > 0
这建立了另一个有效并处理重启情况的答案和评论。
increase
偏移量始终将值保持为整数,并且不会像andrate
函数那样尝试执行插值。
最后的> 0
过滤器将忽略由于重新启动而可能捕获的所有负值。
如果您选择在图例中选择总值,则最终结果是随时间推移的准确请求总数。
解决方案:为了计算 prometheus grafana 上的 https 计数器的总和,您应该使用increase
方法并设置通用时间范围 $interval
以求和并计算所有 http 请求计数器。
increase(http_requests_total[$interval])
根据普罗米修斯参考:
increase()
increase(v range-vector)计算范围向量中时间序列的增量。单调性的中断(例如由于目标重新启动而导致的计数器重置)会自动调整。该增加被外推以覆盖范围向量选择器中指定的整个时间范围,因此即使计数器仅增加整数增量,也可以获得非整数结果。以下示例表达式返回在过去 5 分钟内测量的 HTTP 请求数,范围向量中的每个时间序列:
increase(http_requests_total{job="api-server"}[5m])
增加只能与计数器一起使用。它是 rate(v) 乘以指定时间范围窗口下的秒数的语法糖,主要用于人类可读性。在记录规则中使用速率,以便每秒一致地跟踪增长。
附言
$interval
变量)此外,我建议在图形可视化上设置 正确的分辨率和最小时间间隔(在您的情况下是每天 -> 1d
)2.为了求和所有数量的请求只需执行求和功能
sum(increase(http_requests_total[$interval]))
为了获得过去 24 小时的准确计数,我创建了以下查询:
max_over_time(http_requests_total[6s])- min_over_time(http_requests_total[24h])
注意:对我有用:)
要获得一段时间内准确的总请求数,我们可以使用offset
:
http_requests_total - http_requests_total offset 24h
increase
将推断范围,以便我们可以在结果中看到浮点数。
通过使用offset
,该值始终是整数,因为它只是计算开始和结束之间的差异
在我看来,之前所有的答案都误解了这些问题,即从 t0 到 t1 的计数,其中 t0 的值应该为 0。
为此,可以根据文档https://prometheus.io/docs/prometheus/latest/querying/basics/#modifier使用 @ 修饰符:
http_requests_total - http_requests_total @ start()