深入讲解 AWS VPC Flow Logs 的采集范围、字段含义、CloudWatch Logs Insights 查询、投递异常和网络故障判断边界。
VPC Flow Logs 能证明某个网络接口在聚合窗口内记录到哪些 IP 流量及处理结果,但它不是实时抓包。ACCEPT 后仍需检查监听端口和应用,REJECT 后要按方向核对安全组与网络 ACL。

先给结论
VPC Flow Logs 能证明某个网络接口在聚合窗口内记录到哪些 IP 流量及处理结果,但它不是实时抓包。ACCEPT 后仍需检查监听端口和应用,REJECT 后要按方向核对安全组与网络 ACL。
先找到真正承载流量的 ENI
EC2、负载均衡、NAT Gateway、RDS 等资源最终都通过网络接口产生流量。排障前记录目标资源、区域、ENI、源目标地址、协议、端口和 UTC 时间,避免只按实例名称搜索。
单台实例临时排障可在 ENI 范围采集,长期审计可选子网或 VPC。范围越大噪声与存储费用越高,应通过字段、保留期和查询规则控制成本。
ACCEPT 和 REJECT 的边界
ACCEPT 表示记录点相关控制允许该流量,不代表应用一定监听、TLS 一定成功或后端一定返回 200。此时应检查 ss、应用日志、负载均衡访问日志和返回路径。
REJECT 表示流量在相关规则处被拒绝。需要结合方向、源目标、端口、TCP flags 以及 ENI 所属资源,逐项核对安全组和 NACL。NACL 无状态,入站允许但回程临时端口未放行仍会失败。
NODATA 与 SKIPDATA 不能混为一谈
NODATA 表示聚合窗口内没有记录,可能是客户端未真正发起、时间或 ENI 选错。SKIPDATA 表示部分记录未被采集,AWS 文档说明内部容量或错误等情况可能造成跳过。
Flow Logs 创建后需要几分钟开始采集和投递,不是实时流。刚创建后立即无日志,应先确认状态、目标和是否真实产生流量,再判断配置失败。
用 Logs Insights 缩小范围
在 CloudWatch Logs 中应先限制短时间窗口,再按 interfaceId、srcAddr、dstAddr、dstPort 和 action 过滤。先查特定故障请求,不要直接扫描全部历史日志。
查询结果要与客户端和服务端时钟对齐。NAT、负载均衡和代理可能改变可见地址,因此需要沿实际链路分别核对前端 ENI、后端 ENI 和对应访问日志。
流日志没有覆盖哪些内容
AWS 明确说明 Flow Logs 不记录全部 IP 流量,例如部分到 Amazon DNS、实例元数据、时间同步、DHCP 和 ARP 的流量不在常规记录内。它也不包含数据包正文。
排查 DNS、HTTP 状态、TLS、重传顺序或应用负载时,应使用 Resolver 查询日志、访问日志、系统指标或受控抓包。不要用 Flow Logs 中“没有记录”证明请求绝对没有发生。
投递失败与完成验证
Flow Log 显示 Access error 时检查发布角色与信任关系;目标为 S3 时核对桶 ARN 和策略;出现 Rate limited 或 SkipData 时记录时间窗口并评估日志完整性。
修复网络后,从原客户端重新发起同一请求,确认 Flow Logs 状态、目标端口响应和应用结果一致。只有网络记录与业务验证闭环,才算完成。
排查与验收表
| 检查层级 | 重点证据 | 下一步判断 |
|---|---|---|
| REJECT | ENI、方向、五元组、安全组/NACL | 修正规则后原路径复测 |
| ACCEPT | 连接建立、监听、返回路径 | 转向系统和应用层 |
| NODATA | 采集范围、时间、真实流量 | 确认 ENI 与等待投递 |
| SKIPDATA | log-status 与投递状态 | 不能据此否定流量 |
操作边界
生产环境变更前必须记录资源 ID、时间窗口、影响范围和回退方法。命令示例需要按实际接口、区域和实例替换参数;涉及重启、迁移、网络规则或日志费用时,先在最小范围验证。
CloudWatch Logs Insights 查询方法
先把时间范围限制在故障前后几分钟,再选择实际 Flow Logs 日志组。查询字段应包含 interfaceId、srcAddr、dstAddr、dstPort、action、packets、bytes 与 logStatus,并用真实源地址和端口过滤。
结果为 ACCEPT 时继续检查目标监听、返回路径和应用;结果为 REJECT 时按 ENI、方向和规则核对。没有结果时先确认时间、区域、ENI、字段格式和日志投递状态。自定义日志格式可能使用不同字段,不能照搬默认查询。
避免查询产生无效成本
查询前缩短时间范围并选择具体日志组,不要每天扫描全部历史数据。长期保留应明确用途和周期;删除 Flow Log 只停止新记录,不会自动删除已经投递到 CloudWatch Logs 或 S3 的数据。

