先做一件事:把“异常流量正在挤占资源”当作待验证假设,而不是既定事实。保存证据的目标不是证明有人攻击,而是让后续排查能区分三种可能——真实用户突增、上游缓存或回源异常、以及人为操纵流量。如果一上来就封IP或重启服务,日志和会话状态会被清掉,之后就无法区分这些解释。下面用一个假设情境串起完整的取证顺序。
假设某站点在凌晨两点到四点之间,应用响应时间从常态的几百毫秒升到数秒,同时监控面板显示总请求量只上升了约三成。直觉会认为“量涨得不多,为什么卡成这样”,但恰恰是这种量价不匹配,说明瓶颈可能不在总带宽,而在少数消耗资源的请求路径上。此时需要先固定证据,再决定限流、扩容还是修复代码。
这里的关键判断依据是:请求量的小幅上升若伴随CPU、数据库连接数或后端队列的明显上升,更可能是单请求成本异常,而不是流量规模问题。反过来,若请求量与资源占用同步等比例上升,则更接近真实增长或缓存失效导致的全量回源。这两种解释对应的下一步动作完全不同。
取证顺序建议从最易失的数据开始。会话状态、内存队列、进程快照在重启后消失,磁盘日志和监控时序数据相对持久。可按以下顺序操作:
一个实际动作是:在限流生效前先导出一份日志,限流生效后再导出第二份。对比两份日志中同一路径的请求分布,如果被封禁后资源占用明显回落,只能说明该来源与资源占用相关,不能直接证明它是唯一原因——上游缓存同时恢复也会产生相同现象。因此需要把缓存状态、发布记录、定时任务时间表一并纳入证据集,作为竞争性解释的排除依据。
两类现象在日志里留下的痕迹不同,可以据此判断下一步该走防护还是走容量规划:
这些特征只能作为区分线索,不能单独作为结论。若某项指标归零,也不必然说明处理正确——可能是限流把正常用户一起挡掉了,也可能是上游缓存接管了请求,真实回源压力被掩盖。看到指标好转时,应同时检查错误率和正常用户的成功率是否受损,再决定是否维持当前策略。
完整取证会带来存储成本和隐私合规压力,因此需要取舍。建议保留原始日志的短周期(例如数天)与聚合统计的长周期,原始日志中涉及个人标识的字段按合规要求处理,但不要为了脱敏而删除时间戳、路径和状态码这些判断依据。
需要明确的边界是:取证和限流的目的是保护正常服务资源,不是识别并报复某个来源。不要尝试伪装身份去反向探测来源,也不要购买或使用批量请求工具去“对冲”异常流量,这类做法本身会制造新的异常,并让证据链失去可信度。相关动作应限于记录、限流、告警和与上游服务商沟通。
把证据整理成一份带时间线的记录后,决策会变得清晰:如果证据指向单请求成本异常,下一步是优化接口和加缓存;如果指向来源集中且特征机械,下一步是调整限流阈值并保留观察窗口;如果指向真实增长,下一步是容量评估。假设情境中,若限流后资源回落但正常用户的错误率同时上升,说明阈值过紧,应放宽并重新观察,而不是直接判定问题已解决。证据的价值在于让每一步调整都有可对照的前后状态,而不是凭单次现象下结论。