结论先行:当异常流量已经挤占正常服务资源时,证据保存的重点不是“证明有人刷量”,而是把资源被谁消耗、从何时开始、影响了哪些正常请求这三件事固定成可复核的时间线。只保存一张流量曲线截图通常不够,因为它无法说明异常请求与正常服务受损之间的对应关系。更稳妥的做法是分层留证:先保全原始访问日志和资源监控数据,再记录服务受损的可观察表现,最后才做汇总分析。
原始记录是未经加工的机器输出,例如 Web 服务器访问日志、反向代理日志、应用层请求日志、连接数监控、带宽与 CPU 占用采样。解释性材料是你对现象的归纳,例如“某接口在 14:00 后响应变慢”“同一批 IP 段重复请求同一路径”。两者要分开存放,避免把分析结论覆盖到原始文件上。
一个可执行的动作是:在异常持续期间,先对日志做只读复制,把副本放到与生产环境隔离的位置,再在副本上做筛选和统计。这样做的结果是,后续无论排查方向如何变化,原始时间戳、请求路径、状态码和来源标识都不会因为清理磁盘或轮转日志而丢失。如果先在生产环境里直接过滤、截取,往往会破坏完整性,导致之后无法验证某个结论。
需要保存的最小字段通常包括:请求时间(带时区)、来源 IP 或来源标识、请求方法与路径、状态码、响应耗时、User-Agent、字节数。若使用 CDN 或负载均衡,还应保留其回源日志与边缘节点标识。字段不要求越多越好,但时间、来源、路径、结果这四类必须能互相对应。
异常流量本身不等于服务受损。要让证据成立,需要把流量变化与正常服务指标关联起来,例如:正常用户的请求成功率是否下降、平均响应时间是否上升、连接池或工作进程是否被占满、数据库慢查询是否增多。只记录“请求量上涨”属于现象描述,无法说明挤占。
假设一个场景:某接口在半小时内请求量明显上升,同时正常用户的成功率从平稳状态转为频繁超时。此时应把该时段的接口耗时分布、并发连接数、后端资源占用一起导出,并标注采样间隔。若只有请求量上升而正常用户指标没有变化,就不能直接判定为挤占,可能只是缓存命中或静态资源被重复获取。
这里有一个会使结论失效的反例:如果异常时段恰好与自身发布、缓存失效或第三方依赖抖动重合,那么资源紧张可能主要来自内部变更,而不是外部异常流量。因此,保存证据时必须同时记录发布记录、配置变更、依赖服务状态和告警时间。缺少这些对照项,单凭流量峰值下结论容易误判,下一步的处置动作也会跟着走偏。
证据保存要遵守两个边界:不修改生产配置来“配合取证”,不对来源做不可逆的封禁后再补记录。更合理的顺序是:先确认监控与日志仍在写入,再复制、再标注、再分析。若必须先缓解资源压力,也应记录缓解动作的执行时间、范围和预期影响,否则后续无法区分“异常自行停止”和“处置生效”。
另一个容易被忽略的点是时钟一致性。服务器、代理、监控系统若时区或时钟不同步,时间线会出现错位,导致异常请求与资源峰值无法对齐。保存证据前先确认各系统时间基准,必要时在记录中注明偏差。
证据整理完成后,下一步不是立刻扩大封禁范围,而是按影响分级。可以按三个维度判断:异常来源是否集中、受影响的是否为核心业务路径、正常用户受损是否持续。若来源集中且只影响非核心路径,可优先限速与观察;若来源分散且核心路径持续受损,才需要更严格的访问控制与人工复核。
无论采取哪种处置,都应保留处置前后的对照数据。处置后若正常服务指标恢复,只能说明该处置与恢复在时间上相关,不能单独证明异常流量就是唯一原因。要确认因果关系,还需要检查同期是否有其他变更停止或依赖恢复。这个判断会直接影响下一步:是继续维持当前策略,还是回到日志中寻找被忽略的内部因素。
最后,把本次证据保存的字段、时间范围和判定条件写成一份可复用的记录模板。下一次出现类似异常时,按同一口径采集,才能比较不同时段的数据,而不是每次从零开始猜测。