结论先说:如果异常流量已经挤占正常服务资源,最有价值的证据不是“截图证明流量很大”,而是能还原时间线、来源特征、资源消耗与处置动作之间关系的可复核记录。只有在你能证明某类请求与资源占用同步变化,且排除正常活动、缓存回源、监控误报等解释之后,保存的证据才足以支撑下一步决策。若站点正处在攻击峰值,先恢复服务再完整取证,往往比边救火边整理材料更有效。
异常流量场景中,证据大致分三层:入口层说明请求从哪里来、长什么样;资源层说明服务器、数据库、带宽或应用进程被什么拖住;处置层说明你做过哪些动作、动作后指标如何变化。三层的价值不同,缺少任何一层,后续判断都容易变成猜测。
实际操作上,先把这三类数据按同一时间轴对齐。一个可执行的动作是:导出异常时段前后各一段的日志与监控,统一到分钟级时间戳。这样做的结果是,你能看出资源峰值是否总是紧跟某类请求,而不是只看一个孤立的峰值截图。
“异常流量挤占正常服务资源”是一个因果判断,不能仅凭两件事同时发生就下结论。假设某英文站群在凌晨出现 CPU 飙升和正常用户访问变慢。若日志显示同一时段有大量请求集中到某个动态接口,且该接口没有缓存,那么“异常请求挤占资源”的解释成立。但如果同一时段还发生了数据库备份、全量缓存刷新或上游回源抖动,那么资源飙升也可能由这些正常运维动作引起,异常流量只是同时出现的背景。
能让结论失效的反例至少包括:正常业务高峰与异常请求重叠、监控采样间隔太粗导致峰值被平滑、缓存命中率骤降让正常请求看起来像异常、以及限速规则误伤了正常用户。要区分这些解释,证据里必须保留正常请求的对照组,例如同一路径在异常前后的成功率、响应时间与来源分布。
一个注明假设的短例子:假设某站群在 10 分钟内收到大量来自同一网段的请求,全部指向一个未缓存的搜索接口,同时应用进程数被打满。若你只保存了“请求量上升”的截图,无法说明挤占;若你同时保存了该接口的响应时间、进程数变化、以及限速后正常搜索请求恢复的记录,就能把“挤占”从猜测变成可复核的链条。这个例子不涉及任何真实项目,只用于说明比较方法。
第一,只保存聚合图表,不保存原始日志。聚合图表能说明趋势,但无法回答“哪些请求、什么路径、什么状态码”。原始日志要保留字段完整性和时间戳,不要只留筛选后的结果。
第二,在处置前没有记录基线。限速或封禁之后,资源指标下降是预期结果,但如果没有处置前的基线,下降幅度无法解释。正确动作是:在实施限速前,先记录一段稳定窗口的资源与请求指标,再记录处置后的同一组指标。
第三,把“请求量归零”当作问题解决的证据。请求量下降也可能是因为缓存生效、上游回源减少、监控采集失败或正常用户被误伤。要同时看正常请求的成功率与响应时间,才能判断服务是否真的恢复。
当入口层、资源层、处置层三类证据能按时间线对齐,并且排除了正常运维、缓存变化和误伤这些反例,下一步才适合做规则调整或容量决策。具体动作可以是:把异常请求特征整理成可复核的规则,先在观察模式运行一段时间,对比规则命中量与正常请求命中量;如果规则误伤正常请求,就回到证据层补充来源特征,而不是直接扩大封禁范围。
如果证据显示资源瓶颈来自应用层而非流量层,例如某个接口本身缺少缓存或查询效率低,那么优先修应用,而不是继续加封禁规则。这个判断依赖资源层证据:同样的请求量下,缓存命中率变化是否足以解释资源占用变化。只有把这一步做完,保存证据才真正影响下一步,而不是停留在“留档”层面。
这套方法适用于你有权访问日志、监控和服务器指标的自有或受托站点。若站点托管在第三方平台,日志字段和监控粒度可能受限,此时应优先保存平台提供的可导出记录,并明确标注缺失字段,而不是用推测填补。英文站群若涉及多个独立站点,证据要按站点分别保存,避免把不同站点的流量混在一张总表里,否则时间线对齐会失真。
最后需要明确:保存证据的目的是区分合理解释,不是证明某个结论一定正确。请求量、抓取量或某项统计归零,都不能单独证明处置正确;它们只是时间线上的一个观察点。真正能支撑下一步的,是入口、资源、处置三层证据在同一时间轴上的相互印证。