You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Prometheus告警监控从未生成备份的新实例?

解决新实例未触发备份告警的问题

核心思路是结合**运行状态指标(up)**和备份指标的差异——所有实例启动后就有up指标,而备份相关指标仅在首次备份完成后生成,我们需要把「从未备份的运行中实例」和「备份过期的实例」都纳入告警范围。

调整后的告警规则

直接修改原有告警规则,通过unless或absent函数补充未备份实例的检测逻辑:

alert: InstanceNotBackedUp
expr: |
  # 原有规则:检测备份超过24小时的实例
  (max by(env, region, cluster) (latest_backup_age{job="my-pods",type="latest_backup"}) > 24)
  or
  # 新增规则:检测运行中但从未生成备份指标的实例
  (max by(env, region, cluster) (up{job="my-pods"} == 1) unless max by(env, region, cluster) (latest_backup_age{job="my-pods",type="latest_backup"}))
for: 1h
labels:
  severity: critical
annotations:
  summary: 实例未完成备份或备份过期
  description: 集群{{ $labels.cluster }}(环境{{ $labels.env }}, 区域{{ $labels.region }})的实例要么超过24小时未执行备份,要么自启动后从未完成过首次备份

规则逻辑说明

  1. 第一部分保留原有逻辑,筛选出备份时间超过24小时的实例。
  2. 第二部分通过unless运算符实现:
    • 先筛选出up=1(实例处于运行状态)的实例
    • 排除掉已经存在latest_backup_age指标的实例(即已完成过至少一次备份的)
    • 最终剩下的就是「运行中但从未备份」的实例

可选简化写法(用absent函数)

如果觉得unless不够直观,也可以用absent函数替换第二部分逻辑,效果完全一致:

alert: InstanceNotBackedUp
expr: |
  (max by(env, region, cluster) (latest_backup_age{job="my-pods",type="latest_backup"}) > 24)
  or
  (max by(env, region, cluster) (up{job="my-pods"} == 1) and absent(latest_backup_age{job="my-pods",type="latest_backup"}))

注意事项

  • 确保up指标和备份指标的标签(env/region/cluster/job)完全一致,否则聚合后的维度无法匹配,会导致规则失效。
  • 设置合理的for时长(比如示例中的1小时),避免新实例刚启动就触发告警,给首次备份留足执行时间。

内容的提问来源于stack exchange,提问作者NoACoder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 06:20:46