You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过PromQL精确统计.NET Core服务的入站请求数?

精确统计.NET Core服务入站请求数的解决方案

问题根源

你用rate()或increase()得到近似值,是因为这两个函数的设计目标是计算速率或时间窗口内的增量近似值——它们依赖Prometheus的样本刮取间隔和时间窗口参数,当请求集中在两次样本采集之间时,会通过线性插值估算结果。而你要的是精确的累计请求数,应该直接用counter指标的原始值。

具体实现方法

1. 获取指定时间点的累计总请求数

如果想在12:20这个时间点看到从服务启动到此时的总请求数(从0涨到100),直接执行即时查询:

sum(http_requests_received_total)

如果指标带有endpoint、method这类标签,可按需添加过滤条件,比如只统计某个接口:

sum(http_requests_received_total{endpoint="/api/your-path"})

只要Prometheus在12:20前后完成了一次刮取,就能拿到精确的100这个值。

2. 精确统计某段时间内的新增请求数

要是你需要统计比如12:19到12:20这一时间段内新增的100次请求,别用rate()乘以时间,改用increase()并确保时间窗口覆盖请求发生的完整区间:

sum(increase(http_requests_received_total[2m]))

这里的[2m]要比你的Prometheus刮取间隔(默认15秒)大,确保包含请求发生前后的两个样本点(0和100),这样increase()会直接计算两个样本的差值,得到精确的100。

3. 排查常见问题

如果还是拿不到精确值,检查这两点:

  • 确认Prometheus的scrape_interval配置,确保请求完成后,Prometheus已经完成了一次刮取,拿到了更新后的counter值。
  • 检查http_requests_received_total的标签是否正确,有没有多实例、多维度导致sum时遗漏或重复计算。

关键概念理清

  • Counter是单调递增的,只有服务重启时才会归零,直接查询它的值就是累计总请求数。
  • rate():用来算时间窗口内的平均每秒速率,适合看趋势,不适合精确计数。
  • increase():算时间窗口内的总增量,只有当窗口包含完整的样本变化区间时才精确,否则会用插值近似。

内容的提问来源于stack exchange,提问作者Hesham Amer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 18:20:30