采样频率低,意味着两次检测之间有一段空白,短时异常完全可能发生在空白里。要捕捉它,不是简单把频率调到最高,而是先判断这类异常是持续型还是脉冲型,再决定用持续高频监测,还是用事件触发加旁证记录。前者成本高但能留下完整曲线,后者成本低但只能证明异常发生过,不能还原全过程。
这是两种不同目标,对应的做法完全不同。如果只想知道某段时间内是否出现过短时不可用,那么一个高频但只记录状态变化的探针就够;如果要知道异常持续了多久、影响范围多大、是否反复出现,就需要保留时间序列,而不是只留一个报警点。
判断依据可以看异常的性质。假设某次异常只持续几十秒,且事后复查一切正常,那么它更可能是脉冲型,适合用事件触发方式捕捉。假设异常反复出现,且每次都能在日志里找到零散痕迹,那么它更可能是持续型或周期型,适合用较长时间的连续采样。
动作与结果:先列出你怀疑的异常类型,再选采样方式。如果选错,结果会是:要么采样太稀,异常被漏掉;要么采样太密,数据量大到没人看,反而掩盖了真正的信号。这个判断会直接决定下一步是加探针还是改日志。
这种情况下,只能靠提高采样密度来覆盖空白。但提高密度有两个代价:一是请求量上升,可能被目标方视为异常流量;二是数据量上升,存储和解析成本增加。所以更实际的做法是短时高频、长时低频:在怀疑的时间窗口内把间隔压到最小,窗口之外恢复低频。
实施时可以这样做:先确定一个怀疑窗口,比如每天某个时段或某次变更之后;在这个窗口内把采样间隔调到你能承受的最小值,窗口外保持原频率。这样既覆盖了短时异常,又不会让整体数据量失控。
结果如何影响下一步:如果窗口内抓到了异常,下一步是把窗口前后的日志一起拉出来做对照,确认异常是孤立事件还是连续事件。如果窗口内什么都没抓到,下一步不是继续加密,而是换一个怀疑窗口,或者转向条件二。
这种情况下,不必把主监测调密,而是用旁证来定位异常时间点,再针对该时间点做补充采样。旁证可以来自访问日志、错误日志、上游告警、用户反馈时间戳等。它们的作用不是替代监测,而是把“不知道什么时候发生”变成“知道大概在哪一分钟发生”。
实施动作:先从旁证里找出异常的大致时间范围,再在这个范围内用独立探针做一次或多次补充采样。补充采样可以是一次性的,也可以是短时高频的,关键是时间点要对准。
结果如何影响下一步:如果补充采样复现了异常,说明旁证时间点可靠,下一步可以把这类旁证接入常规流程,形成“旁证触发补充采样”的机制。如果没有复现,说明旁证对应的是另一类问题,下一步要回到旁证本身,确认它记录的是不是同一个对象。
采样频率低时,最容易犯的错误是把“没采到”当成“没发生”。要区分这两种情况,需要看几类证据是否一致:
如果监测数据正常,但日志和上游记录都指向同一时间点有异常,那么更合理的解释是采样漏掉了,而不是异常没发生。反过来,如果只有一条来源显示异常,其他来源都正常,那么要先怀疑这条来源本身的口径或时钟是否有问题。
注意:请求量归零、抓取量下降或某个统计突然消失,都不能单独证明处理正确。它们也可能是采集端故障、权限变更、目标方限流或统计口径调整造成的。要排除这些解释,至少需要两个独立来源相互印证。
假设某站点每 10 分钟采样一次,某天下午出现了一次持续 40 秒的不可用。由于采样间隔是 10 分钟,这次异常落在两次采样之间,监测曲线完全正常。但访问日志显示,该时间段内有少量请求返回了超时,且上游告警也在同一分钟触发。
在这个假设下,合理的做法不是把全局采样改成每 10 秒一次,而是:先用访问日志和上游告警定位到那一分钟,再针对该分钟做一次短时高频补充采样。如果补充采样复现了超时,说明异常真实存在,下一步是把这类旁证接入触发机制;如果没有复现,下一步是检查访问日志里的超时是否来自其他原因,比如客户端网络问题或目标方限流。
这个例子的关键不是数字本身,而是先用旁证缩小时间范围,再用补充采样验证。它适用于异常不可预测、但存在其他记录可查的情况。如果连旁证都没有,就只能回到条件一,用短时高频覆盖怀疑窗口。
有两种情况不适合继续提高采样频率。第一种是目标方已经明确限制请求频率,继续加密只会触发封禁或限流,这时应该转向旁证和日志,而不是硬加探针。第二种是异常本身已经由上游或下游明确记录,且时间点清晰,这时补充采样的边际价值很低,直接采用上游记录并核对口径即可。
另外,如果采样频率已经高到每次请求都记录,但仍然抓不到异常,那么问题可能不在频率,而在监测点位置。比如监测的是入口可用性,而异常发生在后端某个依赖上,这时加频率没用,需要把监测点移到更靠近异常发生的位置。这个判断会影响下一步是调整频率还是调整监测对象。