2. 告警生命周期:全流程管理

大家好,我是老赵。这一章我们来聊聊告警的“一生”。很多团队只关心告警怎么发、发给谁,却忽略了告警从出生到消亡的完整路径。说白了,没有生命周期管理的告警系统,就是一个只会嗷嗷叫的“熊孩子”。

我见过不少团队,告警发出来没人管,最后变成“狼来了”,运维直接免疫。所以,管好告警的每个阶段,比设计规则本身更重要。

2.1 为什么需要生命周期?

告警不是孤立的事件。它是一连串的 状态迁移。一个告警从产生到最终归档,至少要经历六个阶段。每个阶段都有明确的责任人和动作。

我在项目中遇到过一套监控系统,一天发几万条告警,却没有“已确认”状态。结果所有人都在猜:“这个告警有人看了吗?” —— 这就是生命周期缺失的典型后果。

核心观点: 告警生命周期的本质,就是将“不确定”转化为“确定”的过程。每个阶段都在消除一种不确定性。

2.2 六个关键阶段

咱们一个一个来看。你可以把告警想象成一个工单,它有自己的“生涯规划”。

阶段 英文名称 核心动作 责任人
1. 产生 Generated 监控指标/日志匹配到规则 监控系统
2. 触发 Triggered 满足条件,生成告警实例 告警引擎
3. 通知 Notified 通过渠道送达目标人 通知路由
4. 确认 Acknowledged 值班人认领,避免重复处理 运维值班
5. 解决 Resolved 故障恢复或手动关闭 处理人
6. 归档 Archived 数据入库,不可再修改 系统自动

2.3 全流程详解

阶段一:告警产生 (Generated)

这是告警的“初生”。监控系统采集到一个异常数据点。比如,CPU 使用率超过了 90%。

但注意:告警不等于故障。它只是一个信号。我经常跟团队说:“告警是问你‘有没有问题?’,而不是告诉你‘出大事了’。”

  • 关键点: 数据源要准确,避免“抖动”导致的无效告警。
  • 避坑: 不要因为数据延迟一秒就放弃采样。我见过因为采样间隔太长,错过了瞬时的流量洪峰。

阶段二:告警触发 (Triggered)

满足规则阈值后,系统创建一个告警实例。这个实例有唯一的 ID、严重级别、开始时间。

说白了,这是告警的“身份认证”阶段。规则引擎会做两件事:

  1. 去重: 同一时间、同一主机、同一指标,只生成一条。
  2. 分派: 根据规则归属,决定丢给哪个 team 或哪个值班窗口。
经验之谈: 我习惯在触发阶段加入“抑制”逻辑。比如某台机器宕机后,其上的进程、端口告警自动抑制。别让一个故障引发“告警风暴”。

阶段三:通知 (Notified)

告警必须“喊出来”才有价值。这一步涉及通道选择、升级策略和通知频率。

实际中,我把通知分为三个等级:

  • P0/P1: 电话 + 短信 + 即时消息,通知值班人。
  • P2/P3: 即时消息 + 邮件,通知群组。
  • P4: 仅邮件或工单,甚至不主动通知。

我在项目中遇到过一个问题:某个 P0 告警 10 分钟没人响应。后来我加了“升级通知”——5 分钟没确认,自动转给第二责任人。

阶段四:确认 (Acknowledged)

这是整个生命周期里最容易被忽略的一环。确认不代表解决了问题,只代表“我看到了,正在处理”。

很多新手会问:“为什么要有确认?直接去修不就完了?” 其实不然。如果没有确认:

  • 两个人可能同时处理同一个告警,造成资源浪费。
  • 告警系统不知道“有人接手”,会持续轰炸所有人。
重要提醒: 确认动作要简单。一键确认最理想。别让值班人在半夜还得去点三级菜单。

阶段五:解决 (Resolved)

通常有两种方式:

  1. 自动解决: 监控指标恢复后,系统自动将告警标记为 Resolved。
  2. 手动解决: 运维人员修复后,手动关闭。

我倾向于混合模式。对于能自动恢复的指标(如 CPU 突刺),让系统自动解决。对于复杂故障(如磁盘坏道),必须手动确认。

阶段六:归档 (Archived)

这是告警的“终局”。归档后的告警,不能再修改状态,也不参与任何路由计算。它变成了“历史记录”,供后期复盘使用。

说白了,归档就是给告警“盖棺定论”。归档的数据要保留至少 30 天(法规要求长的可能 180 天)。

2.4 生命周期流程图

下面这张图,我把整个流程串了起来。你可以把它当作告警管理的“行动地图”。

告警生命周期全流程图 1. 产生 2. 触发 3. 通知 4. 确认 5. 解决 6. 归档 未确认? 继续通知 关键说明 1. 告警产生后,经过触发、通知、确认、解决四个状态,最后归档。 2. 虚线表示“未确认”时的升级回路:告警不会死等,而是持续触发通知直至有人确认。

2.5 各阶段状态对照表

搞清楚每个阶段的状态变化,才能写好代码或配置。下面这张表,你拿去可以直接参照设计数据库字段。

阶段 状态值 可迁移至 触发条件
1. 产生 generated triggered 规则匹配 & 去重通过
2. 触发 triggered notified, acknowledged, resolved 实例化成功,进入通知队列
3. 通知 notified acknowledged, triggered(重试) 消息递送完成
4. 确认 acknowledged resolved 值班人点击确认
5. 解决 resolved archived 指标恢复 / 手动关闭
6. 归档 archived (终态) 解决后延时自动归档

2.6 实战避坑指南

最后,我结合自己踩过的坑,给你三个小提示:

经验一: 确认动作不要依赖“手动”。我有个项目,值班人漏掉了确认按钮,导致告警一直在“已通知”状态打转。后来我加了“自动确认”规则——同一告警第二次通知时,自动标记为已确认。

经验二: 归档前留一个“复盘窗口”。故障解决后,不要立刻归档。留 24 小时给团队写 Comment 或 Reason Code。归档之后,这些信息就写不进去了。

经验三: 告警生命周期要审计。我建议每天跑一个脚本,检查那些长期处于“已通知”却没人确认的告警。这些往往是被遗忘的“定时炸弹”。