如何在Grafana中为长时间无变化的Prometheus Gauge指标创建告警?
检测自定义Gauge指标长时间无变化的PromQL查询语句
要实现当my-custom-metric超过1小时未更新(数值保持不变)时触发告警,核心思路是对比当前指标值与1小时前的数值,判断两者是否相等。以下是具体的查询语句和相关说明:
基础查询语句
my-custom-metric == my-custom-metric offset 1h
这个语句会匹配所有当前数值与1小时前数值完全相等的my-custom-metric时间序列,返回满足条件的序列(值为1,不满足则无结果)。
优化后的查询(处理边界情况)
如果需要强制返回布尔值(1表示未更新,0表示已更新),或者避免因样本缺失导致的误判,可以使用bool修饰符:
my-custom-metric bool == my-custom-metric offset 1h
若要针对“当前存在指标但1小时前无指标”的场景(比如服务刚启动)排除告警,可结合unless做进一步过滤:
my-custom-metric == my-custom-metric offset 1h unless my-custom-metric unless my-custom-metric offset 1h
不过对于长期运行、定期更新的Cron任务场景,基础查询已经足够覆盖需求。
Grafana告警配置注意事项
- 在告警规则中,将上述查询作为数据源查询,设置评估时间窗口为5-10分钟(避免因单次采样偏差导致误报)。
- 若指标包含多维度标签(如
instance、operation_type),可以在查询中添加标签过滤,比如只监控特定实例:my-custom-metric{instance="backend-prod-01"} == my-custom-metric{instance="backend-prod-01"} offset 1h - 告警触发条件设为“查询结果不为空”(或当
bool查询结果为1时),即可在指标长时间未更新时触发告警。
内容的提问来源于stack exchange,提问作者Arpit Shukla
相关产品推荐
相关产品推荐

