首页/云/可观测性速查/告警规则:expr、for 与 annotations
Prometheus 与采集64 条

告警规则:expr、for 与 annotations

告警规则由 alert 名称、expr 表达式、for 持续时长、labels 与 annotations 组成;expr 返回非空即进入 pending,持续超过 for 转为 firing。

可观测性速查云更新于 2026-10-13

规则文件由什么组成

规则文件包含若干规则组,组内每条规则声明告警名称、判定表达式、持续时长与附加信息。Prometheus 按评估间隔周期性执行这些表达式,命中即产生告警实例,再由 Alertmanager 负责分组、抑制与通知。

从等待到触发

表达式命中后告警先进入等待状态,持续满足条件超过设定时长才转为触发并推送;条件恢复则进入已解决状态。这段等待用来过滤瞬时尖刺:设得太短会频繁误报,太长会延误发现,通常结合指标的正常抖动周期来决定。

标签与注解的分工

标签用于匹配与路由,注解用于给人看。标签决定告警走哪条通路、能否被抑制或静默;注解里写摘要、影响说明与排查入口。把大量信息塞进标签会破坏分组与路由,把关键维度只写进注解又会让路由无从下手。

基本信息

存放位置由主配置的规则文件列表声明,通常按主题或团队分文件
评估周期由全局评估间隔控制,单个规则组可覆盖
核心字段alert、expr、for、labels、annotations
状态流转命中后等待,超过持续时长转为触发,恢复后标记已解决
上线前检查语法与表达式先预检,避免带着错误规则上线

典型使用场景

  • 资源类告警:使用率或余量越过阈值并持续一段时间后通知
  • 错误类告警:错误率或错误数量超过基线,直接对应用户体验
  • 可用性告警:目标失联或探针失败,用于发现实例与采集问题
  • 容量预警:磁盘可写时间不足,留出处置窗口
  • 业务类告警:订单成功率或关键任务失败,需要业务埋点支持
  • 记录规则:把常用表达式固化成新指标,供多个面板复用

规则示例

规则示例
groups:
  - name: api_alerts
    rules:
      - alert: ApiHighErrorRate
        expr: |
          sum by (service) (rate(http_requests_total{code=~"5.."}[5m]))
            / sum by (service) (rate(http_requests_total[5m])) > 0.05
        for: 10m                     # 持续超过 10 分钟才推送
        labels:
          severity: critical          # 供路由与分组使用
        annotations:
          summary: "{{ $labels.service }} 错误率超过 5%"
          description: "当前值 {{ $value | humanizePercentage }}"

常用字段

字段作用注意
alert告警名称,会进入标签命名要能自解释
expr判定表达式,返回非空即命中先在表达式浏览器验证
for需要持续满足的时长覆盖正常抖动周期
labels附加标签,用于路由与分组严重级别通常写在这里
annotations说明文本,支持变量插值写摘要与排查入口

常见写法与效果

写法效果改进方向
直接比较瞬时值尖刺即触发配合持续时长过滤
按实例输出多条告警数量随实例数增长先聚合再判定
注解写死具体数值故障时信息过期用变量插值引用当前值

记录规则示例

记录规则示例
groups:
  - name: sli_recording
    interval: 30s
    rules:
      - record: job:http_error_ratio:5m      # 固化成可复用的新指标
        expr: |
          sum by (job) (rate(http_requests_total{code=~"5.."}[5m]))
            / sum by (job) (rate(http_requests_total[5m]))

编写规则的经验

  • 先在看板上把表达式验证到符合预期,再固化成规则
  • 一条规则只表达一个判断,便于定位与后续调整
  • 严重级别写入标签,路由与通知策略按级别分流
  • 注解给出可操作的信息:现象、影响范围与入口
告警表达式与看板表达式尽量保持一致:两处各写一套,故障时经常出现看板是红的却没人收到通知,或反之。
表达式命中的每条序列都会独立产生告警:标签维度设计不当会造成告警风暴,路由与分组再强也补不回来。
规则文件按主题拆分更易维护:可用性、资源、业务各一个文件,出问题时能快速定位是哪一类规则被改动。

易错点

  • 表达式未经看板验证:规则上线后长期不触发或持续误报
  • 持续时长设置不当:太短被尖刺频繁打扰,太长延误发现真实故障
  • 标签维度爆炸:告警数量随实例数增长,通知通道被淹没
  • 规则改动不走校验与评审:一处语法错误可能让整个规则组停止评估

数据来源与参考

  • Prometheus 文档 · Alerting rules
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌