故障事件管理指南
本指南涵盖灵王 OPS 中完整的故障事件管理工作流程:从创建事件、关联告警,到运行复盘和跟踪 SLO 违规。
1. 事件与告警:区别是什么?
告警和事件在运营工作流程中承担不同的角色:
| 概念 | 告警 | 事件 |
|---|---|---|
| 粒度 | 单个指标条件触发 | 需要响应的运维问题 |
| 范围 | 单个信号(如 CPU > 90%) | 可能涉及多个相关告警 |
| 生命周期 | 触发中 → 已确认 → 已解决 | 打开 → 已确认 → 已解决 |
| 目的 | 通知需要关注的事项 | 协调响应、记录时间线、推动复盘 |
| 协作 | 单个运维人员可处理 | 通常需要多人/团队协调 |
| 文档 | 基础标注/备注 | 完整时间线、复盘、行动项 |
一个有用的心智模型: 告警是症状。事件是诊断和治疗方案。一个告警可能触发一个事件;反过来,一个事件可能汇总多个告警。
何时创建事件
当满足以下任一条件时创建事件:
- 问题需要超过一个人来解决
- 问题有用户可见的影响(收入损失、服务降级、数据完整性风险)
- 问题复杂或不明确,需要结构化调查
- 您的 SLA/SLO 面临违约风险
- 需要为该事件建立作战室或协调渠道
对于简单、快速解决的告警(如单个非关键进程重启),告警标注即可。
2. 创建事件
创建事件有两种主要方式:从告警一键创建,或从头手动创建。
2a. 从告警一键创建
当您在告警详情页并判断情况需要完整的事件处理时:
- 点击告警详情页右上角的创建事件。
- 出现预填充的事件表单:
- 标题:从告警名称和关键标签自动派生(如
PaymentServiceDown @ production-checkout-01) - 严重级别:继承自告警严重级别(
critical→ SEV-1,warning→ SEV-2,info→ SEV-3);可调整 - 描述:预填充告警的
summary和description标注 - 关联告警:来源告警自动关联
- 根据需要调整任何字段(见第3节字段定义)。
- 点击创建事件。
您将立即被重定向到新的事件页面。
2b. 手动创建事件
有时需要在没有触发告警的情况下创建事件(例如,通过支持渠道报告的客户问题,或可能导致影响的计划内维护事件)。
- 在左侧导航中进入事件 → 所有事件。
- 点击右上角的 + 新建事件。
- 填写必填字段(标题、严重级别、描述——见第3节)。
- 您可以选择在此阶段关联相关告警(见第5节)。
- 点击创建事件。
示例:数据库宕机导致事件
场景: 上午10:15值班工程师 @alice 收到多个告警:
DatabaseConnectionErrors(critical)— 10:15:03ReplicationLagHigh(critical)— 10:15:08PrimaryDBDown(critical)— 10:15:12
@alice 在 PrimaryDBDown 告警上点击创建事件。系统:
- 创建标题为:"PrimaryDBDown @ prod-db-primary" 的事件
- 严重级别:SEV-1(critical)
- 预填充告警标注中的描述
- 自动关联
PrimaryDBDown告警
@alice 随后手动关联其他两个相关告警(见第5节)。事件现在涵盖所有三个信号。在接下来的2小时内,团队完成事件处理并进行复盘。
3. 事件字段
每个事件包含以下字段:
| 字段 | 必填 | 描述 |
|---|---|---|
| 标题 | 是 | 简短描述性名称。格式:{服务/组件} {事件} @{实例/位置}。示例:CheckoutServiceDown @ production-us-east-1 |
| 严重级别 | 是 | SEV-1(critical)、SEV-2(warning)、SEV-3(info)。决定升级紧急程度和 SLA 目标。 |
| 描述 | 是 | 完整上下文:发生了什么、初步评估、已知影响。支持 Markdown。 |
| 指派人 | 否 | 负责处理事件的主要人员。可随时更改。 |
| 状态 | 自动 | open → acknowledged → resolved。由系统和运维人员管理。 |
| 团队 | 否 | 负责此服务的团队。用于分组统计。 |
| 创建时间 | 自动 | 事件创建时的时间戳。 |
| 确认时间 | 自动 | 事件首次被确认的时间戳。 |
| 解决时间 | 自动 | 事件标记为已解决的时间戳。 |
| 持续时间 | 自动 | 计算:resolved_at - created_at(如果仍为打开状态则为当前时间)。 |
| 关联告警 | 否 | 关联到此事件的任意数量告警。见第5节。 |
| 时间线 | 自动 | 此事件所有事件的按时间顺序审计日志。见第6节。 |
严重级别定义
| 严重级别 | 含义 | 示例 | SLA 目标(典型) |
|---|---|---|---|
| SEV-1 | 影响所有用户的完整服务中断或数据丢失 | 主数据库宕机、支付处理离线 | 确认:5分钟,解决:1小时 |
| SEV-2 | 影响部分用户的重大降级 | 结账延迟升高、复制延迟 | 确认:15分钟,解决:4小时 |
| SEV-3 | 轻微降级或警告 | 非关键服务健康检查失败 | 确认:1小时,解决:24小时 |
4. 事件状态流转
事件遵循严格的三状态流转:
OPEN → ACKNOWLEDGED → RESOLVED
| 状态 | 含义 |
|---|---|
| 打开 | 事件刚创建。尚无人确认负责。SLA 时钟正在计时。 |
| 已确认 | 响应者已看到事件并正在积极处理。SLA 确认时钟停止。解决时钟继续。 |
| 已解决 | 事件已关闭。问题已处理。解决时间已记录。 |
状态转换
打开 → 已确认: - 任何运维人员在事件上点击确认。 - 这通常由第一个响应者或接收事件的值班工程师完成。
已确认 → 已解决: - 主要响应者(或任何有权限的运维人员)点击解决。 - 只有在确认根本原因已修复且关联告警也在处理或已解决时,事件才应被解决。 - 解决后,事件进入复盘阶段(如适用)。
示例:状态转换
10:15:03 OPEN @alice 创建事件(由 PrimaryDBDown 告警触发)
10:16:41 ACKNOWLEDGED @bob(值班 DBA)确认并开始调查
10:18:22 ANNOTATION @bob:"切换到只读副本,正在调查主库"
10:45:10 ANNOTATION @carol:"主库已恢复,正在切回"
11:02:33 RESOLVED @bob 将事件标记为已解决
5. 将相关告警关联到事件
一个事件通常不会孤立于单个告警。多个告警可能从同一根本原因触发。关联它们有助于:
- 在调查期间关联信号
- 在一个地方查看所有受影响的指标
- 确保关闭事件时所有相关告警也得到解决
- 记录事件的完整范围
在事件创建期间关联告警
当从告警创建事件时(第2a节),来源告警自动关联。您可以在创建时通过表单的关联告警部分关联更多告警。
将告警关联到现有事件
- 打开事件详情页。
- 滚动到关联告警部分。
- 点击 + 关联告警。
- 通过告警 ID、告警名称搜索,或按标签/时间范围筛选。
- 选择要关联的告警并点击关联。
您也可以从告警列表批量关联告警:
- 在告警列表中选择一个或多个告警。
- 在操作栏中点击关联到事件。
- 搜索并选择目标事件。
从告警页面关联告警
- 在告警详情页,滚动到相关事件部分(如果告警已关联则可见)。
- 点击关联到另一个事件。
- 选择现有事件或创建新事件。
示例:将三个告警关联到一个事件
继续数据库宕机的示例:
- 事件:"PrimaryDBDown @ prod-db-primary"(SEV-1)创建于 10:15:03
- 自动关联:
PrimaryDBDown(告警 ID:ALT-8821) - @alice 手动关联:
DatabaseConnectionErrors(ALT-8819)— 847 次连接失败ReplicationLagHigh(ALT-8823)— 延迟峰值达 180 秒
三个告警现在都显示在事件的关联告警部分。解决事件时,运维人员应确认这些告警也朝解决方向推进。
6. 事件时间线 / 审计日志
每个事件维护所有事件的按时间顺序时间线。这既是审计日志,也是主要的交接文档。
时间线条目
以下事件自动记录:
| 事件类型 | 描述 |
|---|---|
| 已创建 | 事件已创建(谁、何时) |
| 已确认 | 有人确认了事件 |
| 状态变更 | 任何状态转换 |
| 指派变更 | 指派人或团队变更 |
| 标注 | 人工添加的备注 |
| 告警已关联 | 告警已关联到此事件 |
| 告警已取消关联 | 告警已取消关联 |
| 已解决 | 事件被标记为已解决(谁、何时) |
添加标注(备注)
标注是人类可读的备注,记录调查、决策和采取的行动。
- 打开事件详情页。
- 滚动到时间线部分。
- 点击 + 添加备注。
- 输入您的备注。使用
@用户名来提及团队成员,并包含时间戳以保持清晰。 - 点击保存。
带标注的示例时间线
10:15:03 CREATED @alice 创建事件
10:15:03 LINKED ALERT PrimaryDBDown (ALT-8821) 已关联
10:16:41 ACKNOWLEDGED @bob 确认
10:16:41 ASSIGNED @bob 被指派为响应者
10:18:22 ANNOTATION @bob:"DB 主库通过 VIP 不可达。正在检查网络路径。"
10:22:15 LINKED ALERT DatabaseConnectionErrors (ALT-8819) 已关联
10:23:01 LINKED ALERT ReplicationLagHigh (ALT-8823) 已关联
10:25:47 ANNOTATION @bob:"识别到脑裂场景。正在启动手动故障转移。"
10:31:10 ANNOTATION @carol:"副本-02 升级为主库完成。正在监控。"
10:45:00 ANNOTATION @bob:"所有写入流量已恢复。正在观察复制延迟恢复。"
10:58:22 ANNOTATION @alice:"已确认:故障转移期间丢失 12 笔结账交易。正在升级到支付团队。"
11:02:33 RESOLVED @bob 解决事件(持续时间:1小时47分30秒)
完整时间线成为复盘的主要输入。
7. 事件指派和升级
指派事件
指派人字段指定负责解决事件的主要人员。
- 点击事件详情页或事件列表上的指派按钮。
- 搜索并选择用户。
- 指派可以随时更改(例如,交接给专业人员时)。
团队字段指定所属团队,用于路由和统计。
升级
如果主要被指派人无法在 SLA 窗口内解决事件,或者严重级别需要更广泛的参与,则进行升级。
升级路径(每个组织可配置):
- Level 1 → Level 2: SEV-1 在超过 15 分钟未解决时自动寻呼副值班。
- 团队升级: SEV-2/SEV-3 在 30 分钟内未确认时通知团队负责人。
- 管理升级: SEV-1 在超过 1 小时未解决时升级到值班工程经理。
示例:升级流程
10:15 @alice 为主数据库宕机创建 SEV-1 事件。@bob(值班 DBA)被指派。
10:17 @bob 确认,开始调查。
10:31 @bob 在发现脑裂需要第三方意见后升级到 @carol(DBA 负责人)。
10:35 @carol 加入作战室,接管协调。
11:02 @carol 将事件标记为已解决。
8. 复盘
复盘是在事件解决后进行的结构化审查,旨在找出根本原因、评估响应质量,并提取预防行动项。
何时进行复盘
以下情况必须进行复盘:
- 所有 SEV-1 事件
- 持续时间超过 4 小时的 SEV-2 事件
- 任何有用户可见影响或数据丢失的事件
- 反复发生的事件(相同告警/根本原因多次出现)
复盘字段
| 字段 | 描述 |
|---|---|
| 摘要 | 一段式概述:发生了什么、影响、如何解决的。 |
| 根本原因 | 底层技术原因(不是症状)。使用"5个为什么"技术深入挖掘。 |
| 时间线 | 从事件创建到解决的关键事件(可从事件时间线自动填充)。 |
| 影响 | 量化的影响:持续时间、受影响用户数、收入影响(如已知)。 |
| 做得好的地方 | 有效运行的流程、工具或响应。 |
| 可以改进的地方 | 响应缓慢或不足的方面。 |
| 行动项 | 具体的、可指派的、有时限的任务以防止再次发生。每个行动项有负责人的截止日期。 |
进行复盘
- 在解决后48 小时内安排——趁细节还记忆犹新。
- 邀请所有响应者和任何受影响的利益相关者。
- 共同审查事件时间线。
- 协作填写复盘文档。
- 审查并最终确定行动项——确保每个都有明确的负责人和截止日期。
- 与更广泛的团队分享复盘结果。
示例:数据库宕机复盘
事件: PrimaryDBDown @ prod-db-primary(SEV-1)
持续时间: 1小时47分(10:15:03 – 11:02:33)
受影响: 结账服务,约 12,000 名用户经历交易失败
摘要:
主 PostgreSQL 数据库由于主库与其隔离代理之间网络分区导致的脑裂场景而变得不可达。自动故障转移未能触发,需要手动干预来提升副本。在 1 小时 47 分钟的中断期间,约 12,000 笔结账交易受影响,847 笔支付处理失败。
根本原因:
隔离代理由于常规维护窗口期间意外的网络拓扑变化而失去仲裁,导致其错误地认为与主库失去联系。同时,主库继续接受写入,造成脑裂状态。自动故障转移机制未考虑此特定网络分区模式。
行动项:
| 行动项 | 负责人 | 截止日期 | 状态 |
|---|---|---|---|
| 更新隔离代理以处理非对称连接的 网络分区 | @carol | 2026-04-19 | 打开 |
| 添加隔离代理仲裁健康监控 | @bob | 2026-04-26 | 打开 |
| 记录手动故障转移手册并进行演练 | @alice | 2026-05-03 | 打开 |
| 审查并调整脑裂检测阈值 | @carol | 2026-04-26 | 打开 |
9. 事件统计
事件统计仪表板提供整个组织的运营健康指标。通过事件 → 统计访问。
关键指标
| 指标 | 描述 |
|---|---|
| 总事件数(7天/30天) | 周期内创建的所有事件计数 |
| 打开的事件 | 按严重级别划分的当前活跃事件 |
| MTTA | 平均确认时间——从事件创建到确认的平均时间 |
| MTTR | 平均解决时间——从事件创建到解决的平均时间 |
| 按严重级别的事件 | 分布:SEV-1 / SEV-2 / SEV-3 |
| 按团队的事件 | 每个所属团队的事件计数 |
| 按严重级别的 MTTR | 按严重级别划分的解决时间明细 |
| 主要事件根本原因 | 最频繁的事件类别/告警家族 |
| 反复发生的事件 | 30 天内具有相同或相似根本原因的事件 |
按严重级别的 MTTR
按严重级别细分的 MTTR(平均解决时间)是关键的 SLO/SLA 指标:
| 严重级别 | SLA 目标(解决) | 实际 MTTR(过去30天) | 状态 |
|---|---|---|---|
| SEV-1 | 1小时 | 1小时12分 | 风险 |
| SEV-2 | 4小时 | 2小时45分 | 达标 |
| SEV-3 | 24小时 | 8小时30分 | 达标 |
按团队的事件
用于了解哪些服务或团队有最高的运营负载:
| 团队 | SEV-1 | SEV-2 | SEV-3 | 总计 | 平均 MTTR |
|---|---|---|---|---|---|
| platform | 2 | 5 | 12 | 19 | 1小时34分 |
| payments | 1 | 3 | 8 | 12 | 2小时11分 |
| infrastructure | 3 | 7 | 15 | 25 | 3小时02分 |
| backend | 1 | 4 | 6 | 11 | 1小时48分 |
此数据推动可靠性工作的优先级排序和复盘行动项的后续跟进。
10. SLO 违规跟踪
当事件持续时间超过配置的 SLA 目标时,它被标记为 SLO 违规。这会触发额外的可见性和升级。
SLO 违规检测如何工作
每个事件都有基于严重级别的 SLA 目标(确认和解决窗口)。系统持续监控打开的事件:
- 如果事件在 SLA 确认窗口内未确认,则标记为 TTA 违规(超过平均确认时间)。
- 如果事件在 SLA 解决窗口内未解决,则标记为 TTR 违规(超过平均解决时间)。
视觉指示器
在事件列表和详情页上,违规事件会高亮显示:
- 红色边框/徽章表示 SLA 违规
- 违规倒计时计时器显示事件已超过 SLA 多长时间
- 通知已发送给所属团队和管理升级路径
SLO 违规时间线
10:15:03 INCIDENT OPEN SEV-1 事件已创建(SLA:确认 < 5分钟,解决 < 1小时)
10:20:03 TTA BREACH 事件在 5 分钟 SLA 内未确认
10:20:05 NOTIFICATION SENT 值班经理因 TTA 违规被呼叫
10:20:41 INCIDENT ACKNOWLEDGED @bob 确认(超过 TTA SLA 26 分钟)
11:02:33 INCIDENT RESOLVED 1小时47分后解决(超过 TTR SLA 47 分钟)
11:02:35 SLO BREACH RECORDED 违规事件已记录用于报告
SLO 违规报告
SLO 违规报告(通过事件 → 统计 → SLO 违规访问)显示:
- 周期内的总 TTA 违规和 TTR 违规
- 违规的严重级别细分
- 违规最多的团队
- 平均违规持续时间
- 季度环比趋势
违规被分类为可避免的(响应失败)或不可避免的(复杂的、新发的事件需要时间诊断)。此区分在复盘审查期间进行。
SLO 违规后的行动
- 立即: 值班经理自动收到通知。
- 24 小时内: 简要事件审查以确定违规是否可避免。
- 复盘: 所有 SEV-1 违规无论持续时间如何都需要复盘(见第8节)。
- 行动项: 如果违规是由流程或工具缺口造成的,必须创建并跟踪特定行动项直至完成。
快速参考
| 任务 | 路径 |
|---|---|
| 查看所有事件 | 事件 → 所有事件 |
| 从告警创建事件 | 打开告警详情 → 创建事件 |
| 手动创建事件 | 事件 → 所有事件 → + 新建事件 |
| 确认事件 | 打开事件 → 确认按钮 |
| 解决事件 | 打开事件 → 解决按钮 |
| 将告警关联到事件 | 打开事件 → 关联告警 → + 关联告警 |
| 添加备注到时间线 | 打开事件 → 时间线 → + 添加备注 |
| 指派事件 | 打开事件 → 指派按钮 |
| 进行复盘 | 打开事件 → 复盘选项卡 |
| 查看事件统计 | 事件 → 统计 |
| 查看 SLO 违规 | 事件 → 统计 → SLO 违规 |
有关告警到事件路由规则和自动事件创建策略的信息,请参见通知配置。