2. 事件触发机制:监控告警体系基础、事件生命周期与分类优先级

事件触发是值班机器人联动 Runbook 的起点。没有可靠的事件触发机制,后续的告警、响应与恢复流程将失去依据。本章从监控告警体系的基础出发,梳理事件从产生到关闭的完整生命周期,并建立事件分类与优先级模型,为值班机器人提供明确的决策输入。

2.1 监控告警体系基础

监控告警体系是事件触发的数据源。一个完整的体系通常包含四个层次:

层次 职责 典型组件
数据采集层 从基础设施、应用、网络等源头收集指标、日志与链路数据 Prometheus Node Exporter、Fluentd、OpenTelemetry Agent
存储与计算层 时序存储、日志索引、聚合计算与异常检测 Prometheus Server、Elasticsearch、Thanos
告警规则层 定义触发条件、阈值、持续时间与聚合策略 Prometheus Alerting Rules、Grafana Alerting
通知路由层 将告警事件格式化、去重、抑制、分组后发送至值班机器人 Alertmanager、PagerDuty、Opsgenie
关键原则:告警事件必须携带足够的上下文标签(如 cluster、service、severity、region),值班机器人才能根据标签匹配对应的 Runbook。

2.2 事件生命周期

一个事件从产生到关闭,经历四个核心阶段:触发 → 告警 → 响应 → 恢复。每个阶段都有明确的输入、输出与状态转换。

阶段定义:“触发”是原始条件满足;“告警”是事件被通知到人;“响应”是有人认领并开始处理;“恢复”是系统状态回归正常且事件关闭。
事件生命周期四阶段流程 事件生命周期:触发 → 告警 → 响应 → 恢复 触发 条件满足 告警 通知值班人 响应 认领与处置 恢复 状态回归 各阶段关键动作: • 触发:指标越阈值 / 日志匹配关键字 / 健康检查失败 → 生成原始事件 • 告警:事件经过抑制、分组、路由 → 推送至值班机器人(钉钉/企微/Slack) • 响应:值班人认领 → 机器人自动关联 Runbook → 执行诊断与恢复步骤

事件在生命周期中的状态流转如下表所示:

阶段 事件状态 值班机器人动作
触发 firing(未确认) 接收事件,提取标签,匹配 Runbook ID
告警 alerting(已通知) 发送告警卡片,附带 Runbook 链接与快捷认领按钮
响应 acknowledged(已认领) 锁定事件归属,推送 Runbook 步骤,启动诊断脚本
恢复 resolved(已恢复) 执行恢复验证,生成事件报告,解除值班人绑定

2.3 事件分类与优先级

不同事件对业务的影响差异巨大。值班机器人必须根据事件的分类与优先级决定响应策略:是立即触发 Runbook 自动恢复,还是仅通知值班人人工介入。

2.3.1 事件分类模型

按故障来源与影响范围,事件可分为以下五类:

  • 基础设施类:主机宕机、磁盘满、网络分区、CPU 高负载。
  • 应用服务类:接口 5xx 错误率飙升、P99 延迟超阈值、进程崩溃。
  • 中间件/存储类:MySQL 主从延迟、Redis OOM、Kafka 消费堆积。
  • 安全合规类:异常登录、敏感操作审计告警、DDoS 攻击。
  • 业务指标类:订单成功率下降、支付超时、用户登录失败率升高。

2.3.2 优先级矩阵

优先级由 影响范围 与 紧急程度 两个维度共同决定:

影响范围 \ 紧急程度 高(持续恶化) 中(稳定异常) 低(偶发波动)
全局(>50% 用户) P0 立即响应 P1 快速响应 P2 正常响应
局部(10%-50% 用户) P1 快速响应 P2 正常响应 P3 观察响应
单实例(<10% 用户) P2 正常响应 P3 观察响应 P4 记录不告警
注意:P0 事件必须触发值班机器人 自动执行 Runbook,并在 1 分钟内无人认领时升级至第二值班人。P3/P4 事件仅记录日志或发送摘要,不触发即时通知。

2.3.3 事件分类与优先级在值班机器人中的映射

值班机器人通过事件标签中的 severity 和 class 字段自动决策:

# 事件示例(Prometheus Alertmanager 格式)
{
  "labels": {
    "alertname": "HighErrorRate",
    "severity": "critical",      # critical → P0, warning → P2, info → P4
    "class": "application",      # 映射到应用服务类 Runbook
    "service": "order-api",
    "region": "us-east-1"
  },
  "annotations": {
    "summary": "Order API 5xx rate > 5% for 5 minutes",
    "runbook_id": "rb-app-http-5xx"
  }
}

值班机器人接收到事件后,按以下逻辑处理:

  1. 解析 severity 映射为优先级(critical→P0, warning→P2, info→P4)。
  2. 根据 class 选择对应的 Runbook 分类目录。
  3. 根据 runbook_id 加载具体的恢复步骤。
  4. 若优先级为 P0 且 Runbook 包含自动恢复步骤,则立即执行;否则仅推送通知。
事件分类与优先级决策流程 值班机器人事件分类与优先级决策流程 原始事件到达 解析 class → 匹配 Runbook 分类 severity → 优先级映射 优先级对应动作 P0: 自动执行 Runbook P1: 通知 + 快速响应 P2: 通知 + 正常响应 P3: 观察 + 摘要通知 P4: 仅记录日志 P0 无人认领 → 升级

2.4 事件触发与 Runbook 的绑定关系

事件触发后,值班机器人通过 标签匹配 与 规则引擎 找到对应的 Runbook。绑定关系在配置中心定义:

# 绑定规则示例(YAML 格式)
event_to_runbook_bindings:
  - match_labels:
      class: "infrastructure"
      severity: "critical"
    runbook_id: "rb-infra-host-down"
    auto_execute: true

  - match_labels:
      class: "application"
      severity: "warning"
    runbook_id: "rb-app-latency"
    auto_execute: false

  - match_labels:
      class: "security"
    runbook_id: "rb-sec-anomaly"
    auto_execute: false
    notify_roles: ["security-team"]
最佳实践:每个 Runbook 在元数据中声明自己支持的事件分类与优先级范围。值班机器人在启动时加载所有绑定规则,构建内存中的匹配树,确保事件到达时 O(1) 级别找到对应 Runbook。

通过以上机制,事件触发不再是孤立的告警通知,而是与值班机器人、Runbook 联动恢复流程紧密耦合的自动化起点。下一层将深入值班机器人的内部架构与消息处理引擎。