如何基于gauge指标job_status_gauge创建vmalert告警表达式?
vmalert告警表达式修正方案
你用
sum_over_time的思路不对,该函数是对时间窗口内的指标值求和,就算任务一直输出0,求和结果也会远小于1,但如果这段时间内指标完全无数据(任务没运行),sum_over_time会返回空值,vmalert不会触发告警。要实现“24小时内指标未出现值1则告警”的逻辑,应该用
max_over_time函数,它能获取时间窗口内的指标最大值:max_over_time(job_status_gauge{jobName="someJob", haveError="false"}[24h]) < 1只要24小时内指标的最大值小于1,就说明从未出现过1,触发告警。
补充场景:如果任务完全没运行,指标可能不会生成任何时间序列,这时上面的表达式也不会返回结果。可以结合
absent函数覆盖这种情况:absent(job_status_gauge{jobName="someJob", haveError="false"}) OR max_over_time(job_status_gauge{jobName="someJob", haveError="false"}[24h]) < 1这样不管是指标存在但始终为0,还是指标不存在,都会触发告警。
内容的提问来源于stack exchange,提问作者user22147484
相关产品推荐
相关产品推荐

