先给有条件的结论:如果异常持续时间短于采样间隔,靠调低阈值或加长观察窗口都补不回来,唯一有效的方向是让采样点本身变密,或把判定逻辑下沉到两次采样之间。是否值得这样做,取决于这类短时异常重复出现时造成的实际损失,而不是它看起来多吓人。
面对低频采样,常见的两种做法是:把告警阈值调得更敏感,或者提高采样频率。它们成立的条件并不重叠。
判断该走哪条路,可以先做一个动作:取一段已知发生过短时异常的时段,把当时的采样点画出来,看异常是否落在采样点上。如果落在点上,调阈值可能够用;如果两次采样之间是空白,就必须改变采样方式,调阈值无济于事。
采样系统只能捕捉到采样瞬间的状态。一个持续 30 秒的异常,在 5 分钟采样间隔下,被记录到的概率取决于它落在哪个位置,而不是它有多严重。这不是精度问题,是覆盖问题。
由此可以推出一个可操作的比较方法:假设异常平均持续时间为 T,采样间隔为 I。当 T 明显小于 I 时,任何基于采样序列的阈值规则都会大量漏检,此时讨论阈值高低意义有限。当 T 接近或大于 I 时,阈值规则才重新变得有用。这里的 T 需要从日志、用户反馈或临时加密采集中估算,不能凭印象设定。
反例在于:如果异常本身是缓慢累积型的,单次持续时间长但幅度小,那么加密采样反而会让曲线更平滑,短时尖峰依旧不明显,此时真正该做的是换判定维度,比如看变化率而不是绝对值。
当提高频率不可行时,另一种思路是让采集端在两次上报之间自行判断。具体动作是:在采集脚本里维护一个短窗口的滚动统计,只在超过内部条件时才上报一条事件,而不是按固定间隔上报原始值。
这样做的结果是,上报数据量可能不增反降,但短时异常会被事件形式保留下来。下一步的影响是:判定规则从“事后看序列”变成“事前写条件”,需要明确什么算异常,这本身要花时间校准,否则会收到大量无意义事件。
需要核对的是,具体采集端是否支持本地计算和条件上报,不同实现差异很大,应以实际环境的文档和测试为准。
如果短时异常出现后没有任何可执行的响应动作,加密采样只是增加存储和告警负担。判断标准很简单:这类异常发生时,团队是否有明确的处置流程。没有流程,先补流程,再谈采样密度。
另外,如果异常的影响可以被下游指标间接反映,比如转化、错误率或响应时长,优先看这些指标往往比追原始采样更省成本。前提是这些下游指标本身的采集频率足够,否则同样会漏。
先选一个已知发生过短时异常的时段,用临时加密采集或日志回放确认异常是否落在原采样点上。这一步的结果决定后续方向:落在点上就调判定规则,落在空白处就必须改变采集方式或把判定下沉。两种情况下都不要在同一轮里同时改采样频率和阈值,否则无法判断是哪一项起了作用。