跳转至

告警、SLI 与 SLO

告警的目标是让值班人员处理会影响用户或即将耗尽恢复空间的问题,不是把所有异常指标都发送到群里。无法行动、无负责人、无说明的告警只会制造噪声。

从服务目标开始

概念 含义 示例
SLI 实际测量的服务质量 成功请求数 / 有效请求数
SLO 目标水平和时间窗口 30 天成功率 99.9%
Error Budget 目标允许的失败空间 30 天约 43.2 分钟不可用预算
SLA 对外合同承诺 可能包含赔偿和排除项

SLO 应从用户体验定义。Pod 存活率通常不是好的业务 SLI,因为 Pod 全部 Running 时,登录或支付仍可能失败。

告警分层

紧急:用户正在大面积受影响,需要立即处理
工单:容量、证书、备份等需要在期限内处理
信息:发布、扩容等事件,用于关联而非叫醒人员

Prometheus 告警示例

groups:
  - name: service-slo
    rules:
      - alert: ServiceHighErrorRate
        expr: |
          sum(rate(http_server_requests_seconds_count{status=~"5.."}[5m])) by (service)
          /
          sum(rate(http_server_requests_seconds_count[5m])) by (service)
          > 0.05
        for: 10m
        labels:
          severity: page
        annotations:
          summary: "{{ $labels.service }} 5xx 错误率持续高于 5%"
          runbook_url: "https://runbook.example.com/service-high-error-rate"

规则提交前运行 promtool check rules,并用历史数据验证是否频繁误报。

Alertmanager 路由

Alertmanager 负责聚合、去重、路由、静默和抑制。标签至少要能决定团队、环境、严重级别和服务。节点断联时可抑制该节点上大量派生告警,但不能用长期 Silence 隐藏未解决问题。

一条高质量告警

  • 描述用户影响,而不只是阈值。
  • 包含服务、环境、范围、当前值和持续时间。
  • 关联 Dashboard、日志/Trace 查询和 Runbook。
  • 明确负责人和升级路径。
  • 恢复条件稳定,避免频繁 Firing/Resolved。
  • 定期回顾是否被处理、是否真正有用。

Prometheus 官方建议优先对用户症状告警,并避免没有可执行动作的通知。参见告警实践Alertmanager 概览