Spring Boot带_max/_count/_sum后缀的指标如何在Grafana中正确使用
三类后缀指标的本质
你看到的带_max、_count、_sum后缀的指标,是Micrometer中**计时器(Timer,用于耗时类统计)和分布摘要(Distribution Summary,用于数值类统计比如字节数、调用次数)**类型的指标,暴露给Prometheus时自动拆分的三个统计维度,各自含义如下:
_count:统计周期内事件的总发生次数,比如HTTP请求数、Repository调用次数_sum:统计周期内所有事件的对应数值总和,比如HTTP请求总耗时、客户端接收总字节数_max:统计周期内单次事件的最大数值,比如最高的单请求耗时、最大的单响应字节数
你提到的PromQL正确性说明
网上的写法存在笔误,Prometheus指标名的分隔符是下划线而非双冒号,修正后逻辑是完全正确的:
# 计算最近5分钟的平均请求耗时 irate(http_server_requests_seconds_sum{exception="None", uri!~".*actuator.*"}[5m]) / irate(http_server_requests_seconds_count{exception="None", uri!~".*actuator.*"}[5m])
这个公式的逻辑是用「单位时间内的总耗时增量」除以「单位时间内的请求数增量」,得到对应时间窗口内的单次请求平均耗时。如果要观察长周期的平均趋势,可以把irate替换为rate。
常用查询场景汇总
1. 计算事件发生频次(QPS、调用频次等)
直接基于_count的增长率计算即可,还可以按标签分组看不同维度的流量分布:
# 按URI、状态码分组,查看最近5分钟各HTTP接口的QPS sum(irate(http_server_requests_seconds_count{exception="None", uri!~".*actuator.*"}[5m])) by (uri, status)
2. 计算周期内的总吞吐
针对流量、耗时总和类的统计,用increase函数计算指定时间窗口的增量即可:
# 计算最近1小时HTTP客户端总共接收的字节数 sum(increase(reactor_netty_http_client_data_received_bytes_sum[1h])) # 计算最近30分钟所有Repository调用的总耗时 sum(increase(spring_data_repository_invocations_seconds_sum[30m]))
3. 查看峰值指标
直接用_max即可获取对应周期内的单次事件最大值,排查尖峰问题非常实用:
# 查看最近10分钟内/xxx接口的最高请求耗时 max(http_server_requests_seconds_max{uri="/api/xxx", exception="None"}[10m])
4. 多维度聚合计算
三类指标的标签完全对齐,可以灵活按业务维度聚合做统计:
# 按异常类型分组,计算最近5分钟各异常类请求的平均耗时 avg(irate(http_server_requests_seconds_sum{uri!~".*actuator.*"}[5m]) / irate(http_server_requests_seconds_count{uri!~".*actuator.*"}[5m])) by (exception)
注意事项
- 做除法计算时,两个指标的过滤条件必须完全一致,否则会出现空值或错误结果
_max默认对应Micrometer的滑动窗口(默认2分钟),如果要查更长周期的峰值,需要在外层套max()+指定时间范围- 时间窗口的长度要大于Prometheus的采样间隔,避免数据漏算
内容的提问来源于stack exchange,提问作者PatPanda
相关产品推荐
相关产品推荐

