结论先说:采样频率低并不等于短时异常无法捕捉,但前提是你不再依赖“某一次采样刚好撞上异常”。可行的方向只有两个——要么在数据进入采样器之前先做聚合,要么在异常发生后用另一种更高频的记录去回填。选错方向,后面所有调整都是白费。
很多人看到曲线平滑就认定是采样太稀。其实还有第二种可能:采样本身发生了,但每个采样点是一个区间平均值,短时尖峰在求平均时被摊平了。这两种情况的证据完全不同。
区分方法很直接:找一个你已知发生过异常的时段,把该时段的原始记录和采样输出并排看。如果原始记录里有尖峰而采样输出里没有,问题在聚合方式,不在频率;如果原始记录里那个时刻也是空的,才是频率不够。这一步不做,后面调参数就是猜。
把采样周期从较长直接缩短,代价通常不是线性的:存储、传输、后续处理都会跟着涨。更省的做法是保留原有采样周期,但在每个周期内额外记录一个极值。
假设某个指标每 5 分钟采样一次,取的是这 5 分钟的平均值。一次持续 40 秒的突增会被摊到 300 秒里,几乎看不出来。若改成同时记录区间最大值,同样的 40 秒突增会直接体现在最大值上,而平均值的存储开销没有变化。这个假设例子的意义在于说明比较方法:先估算异常持续时间与采样周期的比值,比值越小,平均值越不可靠,最大值或计数的价值越高。
动作与结果:先给现有指标加一个区间极值字段,观察一到两周。如果极值频繁触发而均值平稳,说明你之前一直在漏报;如果极值也很少触发,那问题可能不在采样,而在阈值设定,下一步就该去查判定条件而不是继续加频率。
有些异常无法靠极值捕捉,比如需要看异常前后的变化过程。这时不要试图把主采样链路整体提速,而是单独保留一路短周期记录,只存最近一段时间,滚动覆盖。
具体判断依据是:
这里要提醒一点:请求量、抓取量或某个计数突然归零,不能单独证明你的采样处理是对的。归零也可能是上游中断、字段改名或权限变化造成的。看到归零先查数据来源是否还在,再谈采样。
提高采样密度或加极值字段之后,最容易出现的新问题是噪声变多:原本被平均掩盖的抖动现在全冒出来,看起来异常变多了,实际只是分辨率变了。
验证时不要只看异常总数,要看同一批已知正常时段的误报是否增加。如果正常时段的告警明显变多,说明阈值没有跟着分辨率一起调整。此时的动作是把判定窗口拉长或改用连续多个采样点确认,而不是把频率再调回去——调回去等于把刚补上的能力又丢掉。
至于具体工具里这些参数叫什么、放在哪个位置,各产品差异很大,需要以你实际使用的版本为准去核对,不要照搬别处的字段名。
遇到短时异常反复漏掉时,按这个顺序走:先确认是没采到还是被平均掉;是平均问题就加区间极值;是没采到且需要追溯,就加一路滚动短周期记录;最后用已知正常时段检验误报有没有上升。每一步的结果决定下一步,而不是一次性把所有参数都调高。这样即使最终仍需提高主链路频率,你也能说清是为哪一类异常付的代价。