先别急着删日志或重启服务。你要保存的是一组能证明"资源被谁、以什么方式、在什么时间占用"的证据链,而不是一个孤立的流量峰值截图。具体动作是:在异常仍在发生时,先冻结一份原始访问日志副本,再对照服务监控的时间轴,标出正常用户请求开始变慢或失败的区间。这份带时间戳的对照记录,会直接决定你下一步是清理旧接口、限流某个来源,还是彻底下线一段已无价值的旧内容。
很多人一发现流量异常就先去猜是谁在刷,结果原始记录被滚动日志覆盖,猜对了也拿不出东西。正确的顺序是先固定证据对象。假设你手上有一个旧活动页或旧接口,它已经不为业务带来价值,却仍在接收大量请求。此时需要保存的对象通常有三类:
这三类放在一起,才能区分"异常流量挤占资源"和"该页面本身访问量就高"。只看其中一项,容易把正常高峰误判为攻击,或者把持续占用当成偶发波动。
原始日志本身不说明问题,需要和服务指标对齐。做法是取一个较短的时间窗,比如异常报警前后的若干分钟,把日志里的请求条数按分钟汇总,再和同一分钟的响应时间或错误率放在一起看。
如果请求条数上升的同时,正常路径的响应时间也同步恶化,说明资源竞争确实存在。如果请求条数上升但正常路径没有明显变化,那可能只是监控口径不同,或异常来源被单独隔离,并未真正挤占。这个区分很重要:只有确认了挤占关系,保存证据才有明确指向,否则你保存的只是一堆无关记录。
一个注明假设的短例子:假设某旧接口在凌晨被大量请求,同时数据库连接池被占满,正常下单请求开始超时。此时保存的证据应包含该接口的请求日志、连接池占用曲线,以及正常下单请求在同一时段的超时记录。三者时间对齐,才能说明挤占路径。若连接池占用曲线和该接口请求无关,则说明问题另有来源,保存方向需要调整。
异常流量不一定全部来自操纵。旧内容可能因为被外部引用、被搜索引擎重新抓取,或某个合作方仍在调用,而产生超出预期的请求。这些请求虽然造成压力,但不属于恶意行为,处理方式也不同。
可区分的证据包括:请求是否集中在少数来源、请求路径是否单一、请求间隔是否规律、是否伴随正常业务操作。如果请求分散、路径多样、伴随真实交互,更可能是正常访问增长,此时应考虑扩容或缓存,而不是封禁。如果请求高度集中、路径单一、间隔机械,才更接近操纵性流量特征。
这一步的实际动作是:在证据副本上标注每一类请求的归属判断,并记录判断依据。这个标注会影响下一步——被判定为正常增长的请求,应进入容量评估;被判定为异常占用的请求,才进入限流或下线流程。判断错了,下一步动作就会伤及仍有价值的部分。
证据齐全后,退出决策才有依据。对确认无价值且持续被异常占用的旧内容,可以选择下线或返回明确的失效状态。对仍有外部引用价值的旧内容,可以选择保留但限制其资源消耗,比如降低优先级或设置独立配额。对仍有合作方调用的旧接口,应先确认调用方是否还在使用,再决定通知停用还是保留兼容。
这里的关键取舍是:保存证据的目的不是证明谁对谁错,而是让你能安全地移除不再需要的部分,同时不误伤仍在产生价值的部分。如果证据显示某段旧内容仍有稳定自然访问,只是被异常流量连带拖慢,那么处理对象应是异常来源,而不是这段内容本身。
最后一步常被忽略:证据要能被他人复核。整理时保留原始文件,另建一份说明,写清采集时间、采集范围、指标含义和判断结论。这样当服务资源再次出现异常时,接手的人可以对照历史记录快速判断是同一来源还是新情况。
如果旧系统或旧合作关系即将退出,这份记录也是验收的一部分:它说明退出前资源占用是否已恢复正常,以及保留部分是否仍被正确保护。没有这份记录,退出后一旦再次出现资源问题,就很难区分是旧问题残留还是新问题出现。