如何在Prometheus中查询离散值并筛选符合特定条件的应用
用Prometheus筛选过去一周每天下午5点指标值恒为5的应用
完全可以实现,以下是具体的PromQL查询和逻辑说明:
核心查询
sum( count_over_time( (mygauge == 5) and (abs(timestamp(mygauge) - (floor(timestamp(mygauge)/86400)*86400 + 17*3600)) < 60) [1d] offset vector(0,1,2,3,4,5,6)*86400 ) by (app) ) by (app) == 7
逻辑拆解
样本精准筛选:
mygauge == 5:直接锁定指标值为5的样本abs(timestamp(mygauge) - (floor(timestamp(mygauge)/86400)*86400 + 17*3600)) < 60:确保样本时间落在当天下午5点(17:00)前后60秒内,避免采样时间微小偏差导致漏选或误判
按天聚合统计:
[1d] offset vector(0,1,2,3,4,5,6)*86400:分别拉取过去0到6天(共7天)的每日数据,通过offset实现历史时间窗口的偏移count_over_time(...) by (app):按应用标签统计每日符合条件的样本数(因每天仅在下午5点有一个有效样本,结果只会是1或0)
最终结果筛选:
sum(...) by (app):将7天的统计结果求和,得到每个应用过去一周内下午5点值为5的天数==7:筛选出求和结果等于7的应用,即过去一周每天下午5点指标值均为5的目标应用
注意事项
- 如果当前日期还未到下午5点,当天的统计结果会是0,若要排除当天数据,可将
vector(0,1,2,3,4,5,6)改为vector(1,2,3,4,5,6,7),查询过去7天(不含当天)的数据 - 可根据实际采样间隔调整时间偏差阈值(
<60),比如采样间隔为5分钟,可放宽到300秒
内容的提问来源于stack exchange,提问作者HamoriZ
相关产品推荐
相关产品推荐

