Prometheus能否按日统计指定4小时窗口内的Counter增量总和?
每日指定时段任务成功次数统计方案(Prometheus+Grafana)
需求可行性确认
完全可行。你之前用and on() hour() > 12 and on() hour <= 16无效的原因是:这种写法是过滤当前查询时刻的小时,而非统计任务运行时段内的增量,因此无法得到每日12:00-16:00的总和。
核心PromQL查询语句
单任务统计(指定job_id)
sum( increase(job_success{job_id="abc"}[4h]) * ignoring() (hour(time()) >= 12 and hour(time()) < 16) )
多任务批量统计+按天聚合(适配30天周期展示)
sum by (job_id) ( increase(job_success[4h]) * ignoring() (hour(time()) >= 12 and hour(time()) < 16) )
逻辑说明
increase(job_success[4h]):计算每4小时窗口内的任务成功增量hour(time()) >=12 and hour(time()) <16:筛选出时间落在12:00-16:00区间的样本,非该时段的样本会被乘以0过滤sum by (job_id):按任务ID聚合得到每日该时段的总成功次数
Grafana图表展示配置
- 面板类型:选择「Time series」
- 时间范围:设置为「过去30天」
- 查询配置:填入上述PromQL,若需支持多任务,可将
job_id设为Grafana变量 - 聚合设置:在「Query options」中把「Interval」设为
1d,确保按天分组展示 - 样式优化:Y轴设为整数(因为次数是离散值),Legend格式设为
{{job_id}} 下午任务成功次数
告警规则配置
- 告警规则:新建Grafana告警规则,使用上述PromQL作为查询语句
- 触发条件:根据需求设置阈值,例如
$B == 0(下午任务未运行时告警) - 评估时机:将评估频率设为每日16:30之后,评估时间范围设为
1d,确保统计完当日12-16点的数据再触发告警 - 通知配置:绑定邮件/企业微信等通知渠道,告警消息中包含
job_id和当日成功次数详情
内容的提问来源于stack exchange,提问作者Tully
相关产品推荐
相关产品推荐

