如何用http_server_requests_seconds_sum绘制单次API请求响应时长
解决方法
要获取单次API请求的响应时长,你需要计算累计求和指标的瞬时增量,具体操作如下:
核心原理
http_server_requests_seconds_sum是Prometheus的计数器(Counter)类型指标,会持续累加所有请求的响应时长总和。每次请求完成后,该指标的增加值就是本次请求的实际响应时长。我们可以通过delta()函数计算该指标在极小时间窗口内的变化量,从而提取单次请求的时长。
具体查询语句
将你原来的查询替换为以下格式(以/doc端点为例):
delta(http_server_requests_seconds_sum{uri="/doc"}[1s]) >= 0
delta(metric[time_window]):计算指标在指定时间窗口内的绝对变化量,这里的1s是时间窗口,可根据你的API请求频率调整(比如请求间隔极短可设为500ms)。>= 0:过滤掉服务重启导致计数器重置产生的负数增量。
其他端点的查询同理:
delta(http_server_requests_seconds_sum{uri="/list-doc"}[1s]) >= 0delta(http_server_requests_seconds_sum{uri="/cont"}[1s]) >= 0delta(http_server_requests_seconds_sum{uri="/list-cont"}[1s]) >= 0
Grafana面板配置调整
- 在面板的"查询"页面替换上述PromQL语句。
- 切换到"显示"页面,找到"空值"选项,设置为"隐藏",这样图表只会显示有请求的时间点,更清晰展示单次请求的时长。
注意事项
- 时间窗口的设置要匹配你的实际请求频率:如果请求间隔小于设置的时间窗口,
delta会返回该窗口内所有请求的时长总和,因此需要将窗口设得足够小,确保每个窗口内最多只有一次请求。 - 如果你的监控系统使用的是
http_server_requests_seconds_bucket(直方图指标),也可以通过直方图计算单次请求时长,但delta方法对于sum指标更直接。
内容的提问来源于stack exchange,提问作者Maifee Ul Asad
相关产品推荐
相关产品推荐

