3. 触发机制基础:触发机制的定义、触发源类型与触发条件模型
触发机制是 Runbook 自动化执行的“起搏器”。没有明确的触发定义,变更窗口的 Runbook 要么永远不执行,要么在错误的时间点被错误地调用。本章从定义、触发源分类和条件模型三个层次,建立触发机制的理论基础。
3.1 触发机制的定义
在事故响应与变更管理体系中,触发机制是指一个可被观测的事件或条件组合,它启动 Runbook 执行流程的入口动作。触发机制包含三个核心要素:
| 要素 | 说明 | 示例 |
|---|---|---|
| 触发源 | 产生触发信号的实体或系统 | 监控系统、人工操作、定时器 |
| 触发条件 | 触发源信号必须满足的逻辑规则 | 错误率 > 5% 且持续 3 分钟 |
| 触发动作 | 条件满足后执行的 Runbook 实例化 | 调用 API 启动回滚流程 |
设计原则:触发机制应遵循“一次触发,一次执行”的幂等性原则。避免同一事件在短时间内重复触发同一个 Runbook 实例,造成资源竞争或状态混乱。
3.2 触发源类型
根据信号产生的方式,触发源分为三大类:手动触发、自动触发和事件驱动触发。三类触发源在变更窗口 Runbook 中各有适用场景。
3.2.1 手动触发
由运维人员或审批者通过 UI 界面、命令行或 API 调用显式启动 Runbook。适用于需要人工判断的变更场景,如紧急回滚决策。
- UI 按钮触发:变更窗口控制台中的“执行回滚”、“开始灰度”等操作按钮。
- CLI 命令触发:通过
runbook-cli execute --id rollback-v1.2等命令启动。 - API 调用触发:第三方系统通过 REST/gRPC 接口调用 Runbook 执行端点。
3.2.2 自动触发
由系统内部定时器或状态机自动发起,无需人工介入。适用于计划性变更和周期性健康检查。
- 定时触发:基于 Cron 表达式或固定时间窗口启动,如“每周二凌晨 2:00 执行数据库索引重建”。
- 状态触发:当系统进入特定状态(如“部署完成”、“金丝雀通过”)时自动启动后续 Runbook。
3.2.3 事件驱动触发
由外部系统或基础设施产生的事件流触发,是事故响应中最常见的触发源类型。
- 监控告警事件:Prometheus Alertmanager、Datadog 等发出的告警通知。
- 日志事件:特定错误日志模式匹配(如 OOM、panic)。
- Webhook 事件:Git 提交、CI/CD 流水线完成、PagerDuty 确认等外部回调。
- 消息队列事件:Kafka/RabbitMQ 中的特定主题消息。
触发源对比:
| 特性 | 手动触发 | 自动触发 | 事件驱动触发 |
|---|---|---|---|
| 响应速度 | 慢(依赖人) | 快(定时) | 最快(实时) |
| 适用场景 | 审批、决策、紧急干预 | 计划变更、周期任务 | 事故响应、自动化修复 |
| 可靠性 | 高(人工确认) | 中(依赖时钟) | 中(依赖事件通道) |
| 变更窗口适配 | 变更前审批、变更中干预 | 变更窗口开启/关闭 | 变更异常检测与回滚 |
3.3 触发条件模型
触发条件模型定义了“什么情况下触发源信号才真正启动 Runbook”。一个健壮的触发条件模型可以大幅减少误触发和漏触发。常见的触发条件模型包括以下四种:
3.3.1 阈值模型
当监控指标超过或低于某个数值阈值时触发。适用于资源类指标(CPU、内存、错误率)。
# 阈值模型示例:错误率触发回滚
trigger:
source: prometheus
condition:
metric: http_requests_error_rate
operator: ">"
threshold: 5.0
duration: 120s # 持续 2 分钟
action: runbook_rollback
3.3.2 复合条件模型
多个条件通过逻辑运算符(AND/OR/NOT)组合,提高触发准确性。
# 复合条件模型:错误率升高且流量异常
trigger:
source: event_bus
condition:
and:
- metric: error_rate
operator: ">"
threshold: 3.0
- metric: request_latency_p99
operator: ">"
threshold: 2000
action: runbook_auto_recovery
3.3.3 时间窗口模型
仅在特定时间窗口内评估触发条件,避免非工作时段误触发。
- 变更窗口内触发:仅在变更窗口开启期间(如 22:00-06:00)允许自动回滚触发。
- 冷却期:同一 Runbook 触发后,在冷却期内(如 5 分钟)不再响应相同事件。
3.3.4 状态依赖模型
触发条件依赖系统当前状态或 Runbook 执行上下文。
- 阶段依赖:仅在“灰度阶段”或“全量发布阶段”允许特定触发。
- 锁依赖:当变更窗口持有分布式锁时,才允许触发回滚 Runbook。
常见陷阱:仅使用单一阈值模型容易导致“告警风暴”或“触发抖动”。建议在生产环境中至少使用“阈值 + 持续时间”的复合条件,并配合冷却期机制。
3.4 触发机制设计要点总结
| 设计维度 | 推荐做法 | 避免做法 |
|---|---|---|
| 触发源选择 | 优先使用事件驱动触发,辅以手动触发兜底 | 仅依赖手动触发,响应延迟高 |
| 条件模型 | 复合条件 + 时间窗口 + 冷却期 | 单一阈值无持续时间 |
| 幂等性 | 触发时生成唯一 ID,去重执行 | 重复触发导致多次执行 |
| 可观测性 | 记录触发日志、条件评估结果、触发延迟 | 触发无日志,排查困难 |
实践建议:在变更窗口 Runbook 的触发机制设计中,建议先以“手动触发 + 事件驱动触发”双通道起步,逐步引入自动触发。触发条件模型从“阈值 + 持续时间”开始,再演进到复合条件模型,避免一开始就过度设计。