如何在Prometheus中基于指定时间范围查询营收Top5的Profile?
如何在Prometheus中正确获取指定时间范围内营收Top5的Profile
你的原始查询存在两个核心问题:
- Counter指标处理错误:
ow_wt_revenue是Counter类型(单调递增),直接sum只会取查询时刻的累计值,而非你指定时间范围内的实际营收增量。 - 无效筛选条件:
profile_id=~""会匹配所有不带profile_id标签的样本,等于排除了所有有效Profile数据,这必然导致结果异常。
修正后的核心查询
要统计指定时间窗口内各Profile的总营收并取Top5,使用increase函数计算Counter的增量,再按profile_id聚合排序:
topk(5, sum(increase(ow_wt_revenue{pub_id="159409"}[82800s])) by (profile_id))
这里的82800s是你的时间范围总时长(1676098800 - 1676016000 = 82800秒,即23小时)。
细节说明
- 如果你习惯通过URL参数指定
start和end,可以保持URL参数,把PromQL部分改为:topk(5, sum(increase(ow_wt_revenue{pub_id="159409"}[$__range])) by (profile_id))$__range是Prometheus的内置变量,会自动匹配URL中start和end之间的时间跨度,无需手动计算时长。 - 如果需要先按小时粒度统计营收,再累加整个时间范围的总额,用以下查询:
这个查询会先计算每个小时的营收增量,再把整个时间范围内的小时数据累加,最后取Top5。topk(5, sum(sum_over_time(increase(ow_wt_revenue{pub_id="159409"}[1h])[1676016000:1676098800])) by (profile_id))
内容的提问来源于stack exchange,提问作者Datta Diware
相关产品推荐
相关产品推荐

