如何按天对Prometheus指标分组?实现HTTP请求每日总数统计
按天分组统计每日HTTP请求总数的方案
修正PromQL查询逻辑
你之前用的sum(sum_over_time(http_server_requests_seconds_count{}[24h]))存在逻辑问题——http_server_requests_seconds_count是计数器类型指标,它的值是持续累加的,sum_over_time会把24小时内所有样本的累计值加起来,这并不是你要的“每日请求总数”。正确的做法是用increase函数获取计数器的增量,也就是这段时间内的实际请求数。
按天分组的PromQL写法
根据你的需求,要统计过去x天的每日请求总数并按天分组,推荐用以下两种写法:
方法1(Prometheus 2.40+版本支持)
利用date()函数直接将时间戳转为日期字符串,分组更直观:
sum by (date) ( increase(http_server_requests_seconds_count{}[1d]) * on() group_left(date) vector(date(timestamp(http_server_requests_seconds_count{}))) )
方法2(兼容低版本Prometheus)
通过时间戳计算每日起始时间,再转成日期格式:
sum by (day) ( increase(http_server_requests_seconds_count{}[1d]) * on() group_left(day) vector(strftime("%Y-%m-%d", floor(time()/86400)*86400)) )
Grafana配置要点
- 选择Prometheus作为数据源,输入上述查询语句
- 时间范围设置为「过去x天」(比如过去7天)
- 图表类型推荐选条形图,更清晰展示每日数据对比;如果看趋势也可以用折线图
- 图例设置为
{{date}}或{{day}},让每个条形/折线对应具体日期
注意事项
- 确保Prometheus的存储保留时长足够覆盖你要查询的x天数据,否则会丢失历史数据
- 如果你的应用有多个实例,
sum()会自动累加所有实例的请求数,符合“总数”需求 - 若需要按接口、请求方法等维度拆分,可把对应标签加到
by()里,比如sum by (day, endpoint, method) (...)
内容的提问来源于stack exchange,提问作者Gallow
相关产品推荐
相关产品推荐

