3. 规则的生命周期:从提出、评审、上线、监控到废弃的全流程

很多团队把规则库当成一个静态的文档集,写完就扔在那。说实话,这跟把种子撒地里就不管了没啥区别。规则库必须像软件产品一样,有完整的生命周期管理。我经历过好几个项目,规则库从几百条膨胀到几千条,最后没人敢碰——因为不知道哪些规则还活着,哪些已经死了。

这一章,我就把规则的生命周期拆开来讲。一共五个阶段:提出 → 评审 → 上线 → 监控 → 废弃。每个阶段都有坑,也有最佳实践。

核心观点:规则不是写出来就完事的,它需要持续喂养、修剪、甚至安乐死。没有生命周期的规则库,迟早变成垃圾堆。
规则生命周期五阶段流程图 ① 提出 需求收集 ② 评审 技术+业务评审 ③ 上线 灰度+全量 ④ 监控 效果+异常 ⑤ 废弃 反馈闭环(持续迭代) 💡 关键原则 • 每个阶段必须有明确的准入/准出标准 • 监控阶段发现异常,规则可以回退到评审或直接废弃 • 废弃不是终点,废弃的规则数据是下一轮提出的重要输入

3.1 提出阶段:别让规则从脑子里直接蹦到文档里

规则是怎么来的?最常见的场景是:线上出了故障,复盘时有人说「加条规则吧,以后不许这么干」。然后运维同学就写了一条规则,扔进库里。嗯,这其实是最糟糕的提出方式。

我个人习惯把规则提出分为三个来源:

  • 事故驱动:线上故障复盘后提炼的规则。这类规则往往最紧急,但也最容易过度设计。
  • 评审驱动:代码评审或架构评审中发现的共性问题。比如「好几个人都在同一个地方踩坑」,那就值得抽象成规则。
  • 数据驱动:从监控数据中发现的趋势。比如「最近一周 CPU 使用率超过 80% 的实例增加了 30%」,这背后可能缺一条资源使用规范。
我的小技巧:每条规则提出时,必须附带一个「触发场景」字段。比如「当应用启动时,如果配置文件缺失,则...」。没有场景的规则,评审时大概率会被打回来。

我曾经见过一个团队,一个月提了 200 条规则,结果上线后 80% 都没触发过。为什么?因为提出的人根本没想清楚这条规则在什么情况下会生效。说白了,就是拍脑袋。

3.2 评审阶段:两条命,一条给技术,一条给业务

规则评审是我最看重的环节。很多团队只做技术评审,看看语法对不对、逻辑通不通。但我觉得,规则评审需要两条命:技术评审和业务评审。

评审维度 评审内容 参与角色 常见问题
技术评审 规则逻辑是否正确、性能是否可接受、是否与其他规则冲突 开发工程师、QA、运维 规则嵌套过深导致执行超时
业务评审 规则是否覆盖真实场景、阈值是否合理、误报率预估 业务负责人、产品经理 阈值设得太严,一天告警几百次
安全评审 规则本身是否存在安全漏洞、是否可能被绕过 安全工程师 规则暴露了内部敏感信息

评审时我建议用「三票制」:技术、业务、安全各有一票否决权。任何一票反对,规则就不能上线。你想想看,如果一条规则技术上完美,但业务上天天误报,那还不如没有。

注意:评审不是走过场。我曾经遇到过一个项目,评审会上大家都没意见,结果上线第一天就炸了——规则把正常业务流量当成了攻击。后来复盘发现,评审时业务方根本没仔细看阈值设置。所以,评审一定要有 checklist,逐条确认。

3.3 上线阶段:灰度是底线,没有例外

规则上线,我坚持一个原则:先灰度,后全量。不管这条规则看起来多简单、多安全,都必须走灰度流程。

为什么?因为规则的影响面往往比你想的大。一条看起来无害的规则,可能因为触发条件过于宽泛,导致大量请求被拦截或告警。我在项目中遇到过,一条「禁止使用 root 用户启动应用」的规则,灰度时只覆盖了 5% 的实例,结果那 5% 的实例全部告警——因为很多遗留系统确实在用 root 跑。

灰度策略一般分三步:

  1. 金丝雀发布:先覆盖 1%-5% 的实例,观察 24 小时。重点关注误报率和性能影响。
  2. 小范围全量:覆盖 20%-30% 的实例,观察 48 小时。这时候可以开始看业务影响。
  3. 全量上线:覆盖 100% 实例。但保留回滚能力,至少 72 小时内不删除灰度分支。
上线 checklist:
  • 规则是否已通过技术+业务+安全评审?
  • 灰度策略是否已配置?回滚方案是否就绪?
  • 监控告警是否已对接?
  • 规则文档是否已更新?
  • 是否已通知相关方?

3.4 监控阶段:规则上线只是开始

规则上线后,很多人就觉得完事了。其实恰恰相反,监控阶段才是真正考验规则质量的时候。

我一般会监控三个核心指标:

  • 触发率:规则被触发的频率。如果一条规则上线一周触发率为 0,那要么是场景没覆盖到,要么是规则根本没用。
  • 误报率:规则触发但实际不是问题的比例。误报率超过 10% 的规则,需要立即回退评审。
  • 执行耗时:规则每次执行消耗的时间。如果超过 100ms,就要考虑优化规则逻辑了。

举个例子,我之前维护过一个规则库,里面有条规则叫「检查数据库连接数是否超过阈值」。上线后触发率很高,但误报率也高得离谱。后来一查,发现是阈值设得太低,而且没有区分读写实例。说白了,这条规则在监控阶段暴露了评审时没发现的问题。

我的习惯:每条规则上线后,我会给它一个「观察期」。观察期内,规则只告警不阻断。等确认误报率降到可接受范围后,再开启阻断模式。这样即使规则有问题,也不会影响线上业务。

3.5 废弃阶段:学会给规则办葬礼

这是最容易被忽视的阶段。很多团队的规则库越积越多,最后变成一座「规则坟场」——没人知道哪些规则还活着,哪些已经失效了。

我个人认为,规则废弃应该有一个明确的流程:

  1. 标记为「待废弃」:当一条规则连续 30 天触发率为 0,或者业务场景已经不存在时,先标记为待废弃。
  2. 公示期:标记后公示 7 天,通知所有相关方。如果有人提出异议,可以重新评审。
  3. 正式废弃:公示期结束后,将规则从活跃库中移除,但保留到历史库中。
  4. 归档:废弃的规则不能直接删除,要归档到历史库,并注明废弃原因和废弃时间。
避坑指南:我曾经犯过一个错误——直接删除了废弃规则,结果三个月后有个新项目需要类似的规则,但谁也记不清原来的规则长什么样了。从那以后,我再也不删规则了,只做「逻辑删除」。历史数据是宝贵的资产,别扔。

废弃阶段还有一个容易被忽略的点:规则依赖。有些规则之间是有依赖关系的,比如规则 A 触发了才会检查规则 B。如果废弃了规则 A,规则 B 就会变成孤岛。所以废弃前一定要做依赖分析。

3.6 全流程的闭环思维

五个阶段不是线性的,而是一个闭环。监控阶段发现的问题,可以驱动新规则的提出;废弃阶段的经验,可以指导下一轮评审的改进。

我习惯在每个季度做一次规则库的「健康度检查」,把五个阶段的数据拉出来看看:

  • 这个季度提了多少条规则?评审通过率是多少?
  • 上线的规则中,有多少条触发率正常?多少条误报率高?
  • 废弃了多少条规则?废弃原因是什么?

这些数据能帮你判断规则库是在变好还是在变差。如果发现废弃率越来越高,那就要反思是不是提出阶段太随意了。如果发现误报率居高不下,那就要加强评审阶段的阈值验证。

总结一下:规则的生命周期管理,本质上是一个「输入-处理-输出-反馈」的循环。每个阶段都有明确的准入准出标准,每个阶段都要有数据支撑决策。别让规则库变成一潭死水,让它流动起来。