先给结论:如果异常只在某一批查询或某一个时间窗口出现,而放宽条件后消失,优先保留原规则并继续观察,不要急着改写。如果异常在多个独立时间点反复出现,但每次触发条件都不一样,说明规则本身把无关变化也算了进去,这时才值得改写。退出通常只在一种情况下成立:你已经确认这条规则长期没有可操作价值,且保留它带来的复查成本高于它可能发现的问题。
“无法复现”本身不是一个原因,而是三种不同情况的外在表现。把它们分开,才能决定保留、改写还是退出。
判断属于哪一种,靠的不是再跑一次,而是改变一个变量后重跑:只换时间、只换样本、只换环境,每次只动一个。动一个变量后异常消失,就能定位到它依赖的条件。
保留不是不作为,而是把这条规则标记为“待观察”,同时记录它依赖的条件。适用前提有两个:一是你已经通过单变量重跑找到了触发条件;二是这个条件在正常业务里会重复出现,比如每次大促前页面结构都会调整。
一个假设的例子:某条规则在检测到页面标题长度突变时报警,但只在标题被批量修改的当天触发。如果你确认标题批量修改是常规操作,那么保留这条规则并加一个“同一天内多次触发才升级”的条件,比直接删掉更合理。动作是给规则加触发次数门槛,结果是误报被过滤,而真实的大范围标题异常仍然会被捕捉到。
如果触发条件找不到,或者找到的条件明显是一次性事件,保留就只是把问题往后拖。这时应该进入改写。
改写的信号是:异常反复出现,方向一致,但每次的具体触发点不同。这说明规则抓对了方向,却把太多无关变化算了进去。改写的动作通常是收窄判断范围,而不是放宽阈值。
具体做法可以按这个顺序尝试:
每做一次改写,都要用之前收集到的误报样本回测。如果改写后原来的误报不再触发,同时之前确认过的真实异常仍然能触发,这次改写才算成立。只验证误报消失、不验证真报是否还在,等于把误报换成了漏报。
退出是最少用的选项,因为它不可逆地丢掉了观察能力。它成立的前提是:这条规则在过去一段足够长的时间里,触发的异常没有一次导向过实际修改,而且它依赖的页面或查询本身已经不再重要。
判断“不再重要”需要证据,不能只凭感觉。可以看两个信号:一是这条规则覆盖的页面在整体流量或转化中的占比持续下降;二是这些页面已经不再进入日常维护范围。两个信号同时成立,退出才合理。
需要提醒的是,某条规则的触发量降为零,不能单独证明它该退出。触发量为零还有别的解释:检测本身的抓取失败了、规则被其他规则覆盖了、或者页面被排除在检测范围之外。先确认检测确实跑到了这些页面上,再谈退出。
无论选保留、改写还是退出,都要在复查记录里写清三件事:这次异常属于三种类型中的哪一种、你改动了哪个变量来验证、以及下一次复查的触发条件。比如写成“保留,观察两周,若同一规则在非批量修改日再次触发则升级为改写”。
这样做的实际作用是:下一次同一条规则再报警时,你不需要从头判断,直接对照上次记录的条件即可。复查成本因此下降,误报和真报的区分也会越来越快。工具本身不替你做这个判断,它只负责把异常摆出来,决定权始终在记录和取舍里。