VPC 流日志 - Amazon Virtual Private Cloud
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

VPC 流日志

利用 VPC 流日志这项功能,您可以捕获有关传入和传出您的 VPC 中网络接口的 IP 流量的信息。可将流日志数据发布到 Amazon CloudWatch Logs 或 Amazon S3。创建流日志后,您可以在选定目标中检索和查看其数据。

流日志可帮助您处理多种任务,例如:

  • 诊断过于严格的安全组规则

  • 监控达到您实例的流量

  • 确定在网络接口上往返的流量的方向

流日志数据的收集在您网络流量路径之外,因此不会影响网络吞吐量或延迟。您可以创建或删除流日志,而不会对网络性能造成任何有风险的影响。

流日志基础知识

您可以为 VPC、子网或网络接口创建流日志。如果您为子网或 VPC 创建流日志,则会监视该子网或 VPC 中的每个网络接口。

受监控网络接口的流日志数据记录为流日志记录,这些是日志事件,由描述该流量的字段组成。有关更多信息,请参阅流日志记录

要创建流日志,请指定:

  • 要为其创建流日志的资源

  • 要捕获的流量的类型(接受的流量、拒绝的流量或所有流量)

  • 指定您要将流日志数据发布到的目标

在以下示例中,您创建一个流日志 (fl-aaa),用于捕获实例 A1 的网络接口的已接受流量,并将流日志记录发布到 Amazon S3 存储桶。您可以创建第二个流日志,用于捕获子网 B 的所有流量,并将流日志记录发布到 Amazon CloudWatch Logs。流日志 (fl-bbb) 捕获子网 B 中所有网络接口的流量。没有任何流日志捕获实例 A2 的网络接口的流量。


                子网和实例的流日志

如果已创建流日志,则需要几分钟来开始收集数据并将数据发布到选定目标。流日志不会为您的网络接口捕获实时日志流。有关更多信息,请参阅 创建流日志

如果在为子网或 VPC 创建了流日志之后,您在子网中启动了多个实例,则为每个新网络接口创建一个新日志流(对于 CloudWatch Logs)或日志文件对象(对于 Amazon S3)。此操作发生在该网络接口上记录了任何网络流量时。

您可以为其他 AWS 服务创建的网络接口创建流日志,例如:

  • Elastic Load Balancing

  • Amazon RDS

  • Amazon ElastiCache

  • Amazon Redshift

  • Amazon WorkSpaces

  • NAT 网关

  • 中转网关

不论网络接口是什么类型,您必须使用 Amazon EC2 控制台或 Amazon EC2 API 为网络接口创建流日志。

您可以将标签应用于流日志。每个标签都包含您定义的一个键和一个可选值。标签可以帮助您整理流日志,例如按目的或拥有者。

如果您不再需要某个流日志,可将其删除。删除流日志将会禁用资源的流日志服务,不再创建新的流日志记录,也不会将这些记录发布到 CloudWatch Logs 或 Amazon S3。删除流日志不删除网络接口的任何现有流日志记录、日志流(对于 CloudWatch Logs)或日志文件对象(对于 Amazon S3)。要删除现有的日志流,请使用 CloudWatch Logs 控制台。要删除现有日志文件对象,请使用 Amazon S3 控制台。在删除流日志之后,可能需要数分钟时间来停止收集数据。有关更多信息,请参阅 删除流日志

流日志记录

流日志记录代表您的 VPC 中的网络流。默认情况下,每条记录捕获在聚合时间间隔 (也称为 捕获窗口 )内发生的网络 Internet 协议 (IP) 流量流(按每个网络接口的 5 元组来定性)。

默认情况下,记录包括 IP 流的不同组件的值,包括源、目标和协议。

当您创建流日志时,您可以为流日志记录使用默认格式,也可以指定自定义格式。

聚合时间间隔

聚合时间间隔表示捕获特定流并聚合到流日志记录中的时间段。默认情况下,最大聚合时间间隔为 10 分钟。创建流日志时,您可以选择指定最大 1 分钟的聚合时间间隔。最大聚合时间间隔为 1 分钟的流日志的大小,比最大聚合时间间隔为 10 分钟的流日志大。

当网络接口附加到基于 Nitroa 的实例时,无论指定的最大聚合时间间隔为多少,聚合时间间隔始终不超过 1 分钟。

在聚合时间间隔内捕获数据后,需要额外的时间来处理数据并将其发布到 CloudWatch Logs 或 Amazon S3。此额外时间,对于发布到 CloudWatch Logs 约为 5 分钟,对于发布到 Amazon S3 约为 10 分钟。流日志服务在此额外的时间内以最大限度提供。在某些情况下,您的日志可能会延迟超过前面提到的 5 到 10 分钟的额外时间。

默认格式

默认情况下,流日志记录的日志行格式是空格分隔的字符串,具有以下顺序的以下字段组。

<version> <account-id> <interface-id> <srcaddr> <dstaddr> <srcport> <dstport> <protocol> <packets> <bytes> <start> <end> <action> <log-status>

有关字段的更多信息,请参阅可用字段。默认格式仅捕获流日志记录的所有可用字段的子集。要捕获所有可用字段或不同字段集,请指定自定义格式。您无法自定义或更改默认格式。

自定义格式

您可以选择为流日志记录指定自定义格式。对于自定义格式,您可以指定在流日志记录中返回哪些字段,以及这些字段的显示顺序。这使您可以根据具体需求创建流日志,并忽略与您无关的字段。自定义格式还有助于减少从发布的流日志提取特定信息所需的单独流程。您可以指定任意数量的可用流日志字段,但必须至少指定一个。

可用字段

下表描述了对流日志记录可用的所有字段。版本 列表示在其中引入了字段的 VPC 流日志版本。

字段 描述 Version

version

VPC 流日志版本。如果您使用默认格式,则版本为 2。如果您使用自定义格式,则版本是指定字段中的最高版本。例如,如果您只在版本 2 中指定字段,则版本为 2。如果您在版本 2、3 和 4 中指定字段组合,则版本为 4

2

account-id

记录其流量的源网络接口的拥有者的 AWS 账户 ID。如果该网络接口是由 AWS 服务创建的,例如在创建 VPC 终端节点或 Network Load Balancer 时创建,则记录中可能会显示此字段的值为 unknown

2

interface-id

为其记录流量的网络接口的 ID。

2

srcaddr

传入流量的源地址,或者网络接口上传出流量的网络接口 IPv4 或 IPv6 地址。网络接口的 IPv4 地址始终是其私有 IPv4 地址。另请参阅 pkt-srcaddr。

2

dstaddr

传出流量的目标地址,或者网络接口上传入流量的网络接口 IPv4 或 IPv6 地址。网络接口的 IPv4 地址始终是其私有 IPv4 地址。另请参阅 pkt-dstaddr。

2

srcport

流量的源端口。

2

dstport

流量的目标端口。

2

protocol

流量的 IANA 协议编号。有关更多信息,请参阅分配的 Internet 协议编号

2

packets

在流中传输的数据包的数量。

2

bytes

在流中传输的字节数。

2

start

在聚合时间间隔内,接收流的第一个数据包的时间(以 Unix 秒为单位)。这可能是在网络接口上传输或收到数据包之后最多 60 秒。

2

end

在聚合时间间隔内,接收流的最后一个数据包的时间(以 Unix 秒为单位)。这可能是在网络接口上传输或收到数据包之后最多 60 秒。

2

action

与流量关联的操作:

  • ACCEPT:安全组和网络 ACL 允许记录的流量。

  • REJECT:安全组或网络 ACL 未允许记录的流量。

2

log-status

流日志的日志记录状态:

  • OK:数据正常记录到选定目标。

  • NODATA:聚合时间间隔内没有传入或传出网络接口的网络流量。

  • SKIPDATA:在聚合时间间隔内跳过了一些流日志记录。这可能是由于内部容量限制或内部错误。

2

vpc-id

包含记录其流量的网络接口的 VPC 的 ID。

3

subnet-id

包含记录其流量的网络接口的子网的 ID。

3

instance-id

与要记录其流量的网络接口关联的实例的 ID(如果实例由您所有)。对于请求方管理的网络接口,返回“-”符号,例如,NAT 网关的网络接口。

3

tcp-flags

以下 TCP 标志的位掩码值:

  • SYN:2

  • SYN-ACK:18

  • FIN:1

  • RST:4

ACK 仅在随 SYN 一起时报告。

在聚合时间间隔内,TCP 标志可以是 OR-ed。对于短连接,标志必须在与流日志记录相同的行上设置,例如,对于 SYN-ACK 和 FIN 的 19,以及对于 SYN 和 FIN 的 3。有关示例,请参阅TCP 标志序列

3

type

流量的类型:IPv4IPv6EFA。有关 Elastic Fabric Adapter (EFA) 的更多信息,请参阅 Elastic Fabric Adapter

3

pkt-srcaddr

流量的数据包级别(原始)源 IP 地址。将此字段与 srcaddr 字段一起使用,用于区分流量流经的中间层 IP 地址与流量的原始源 IP 地址。例如,当流量流经 NAT 网关的网络接口时,或者当 Amazon EKS 中 Pod 的 IP 地址不同于运行 Pod 的实例节点的网络接口 IP 地址时(用于 VPC 中的通信)。

3

pkt-dstaddr

流量的数据包级别(原始)目标 IP 地址。将此字段与 dstaddr 字段一起使用,用于区分流量流经的中间层的 IP 地址与流量的最终目标 IP 地址。例如,当流量流经 NAT 网关的网络接口时,或者当 Amazon EKS 中 Pod 的 IP 地址不同于运行 Pod 的实例节点的网络接口 IP 地址时(用于 VPC 中的通信)。

3

region

包含记录其流量的网络接口的区域。

4

az-id

包含记录其流量的网络接口的可用区的 ID。如果流量来自子位置,则记录会对此字段显示“-”符号。

4

sublocation-type

sublocation-id 字段中返回的子位置类型:

如果流量不是来自子位置,则记录会对此字段显示“-”符号。

4

sublocation-id

包含记录其流量的网络接口的子位置的 ID。如果流量不是来自子位置,则记录会对此字段显示“-”符号。

4

注意

如果某个字段不适用于特定记录,则记录为该条目显示一个“-”符号。

流日志限制

要使用流日志,您需要了解以下限制:

  • 您无法为 EC2-Classic 平台中的网络接口启用流日志。这包含通过 ClassicLink 与 VPC 链接的 EC2-Classic 实例。

  • 您不能为与您的 VPC 对等的 VPC 启用流日志,除非该对等 VPC 在您的账户中。

  • 在您创建了流日志之后,您无法更改其配置或者流日志记录格式。例如,您无法将不同的 IAM 角色与流日志关联,或者在流日志记录中添加或删除字段。不过,您可以删除流日志并使用必需的配置创建新的流日志。

  • 如果网络接口有多个 IPv4 地址,并且流量发送到辅助私有 IPv4 地址,则流日志会在 dstaddr 字段中显示主要私有 IPv4 地址。要捕获原始目标 IP 地址,请使用 pkt-dstaddr 字段创建流日志。

  • 如果流量发送到某个网络接口而目标不是网络接口 IP 地址中的任何一个,则流日志会在 dstaddr 字段中显示主要私有 IPv4 地址。要捕获原始目标 IP 地址,请使用 pkt-dstaddr 字段创建流日志。

  • 如果来自某个网络接口的流量而源不是网络接口 IP 地址中的任何一个,则流日志会在 srcaddr 字段中显示主要私有 IPv4 地址。要捕获原始源 IP 地址,请使用 pkt-srcaddr 字段创建流日志。

  • 如果流量发送到网络接口或由网络接口发送,则流日志中的 srcaddrdstaddr 字段始终显示主要私有 IPv4 地址,而不管数据包源或目标如何。要捕获数据包源或目标,请使用 pkt-srcaddrpkt-dstaddr 字段创建流日志。

  • 当您的网络接口附加到基于 Nitroa 的实例时,无论指定的最大聚合时间间隔为多少,聚合时间间隔始终不超过 1 分钟。

流日志不会捕获所有 IP 流量。以下类型的流量不予以记录:

  • 实例与 Amazon DNS 服务器联系时生成的流量。如果您使用自己的 DNS 服务器,则将记录到该 DNS 服务器的所有流量。

  • Windows 实例为 Amazon Windows 许可证激活而生成的流量。

  • 实例元数据传入和传出 169.254.169.254 的流量。

  • Amazon Time Sync Service 的传入和传出 169.254.169.123 的流量。

  • DHCP 流量。

  • 到默认 VPC 路由器的预留 IP 地址的流量。有关更多信息,请参阅 VPC 和子网大小调整

  • 在终端节点网络接口和 Network Load Balancer 网络接口之间的流量。有关更多信息,请参阅 VPC 终端节点服务 (AWS PrivateLink)

流日志定价

将流日志发布到 CloudWatch Logs 或 Amazon S3 时,适用已出售日志的数据引入和存档费用。有关更多信息和示例,请参阅 Amazon CloudWatch 定价

要跟踪将流日志发布到 Amazon S3 存储桶所产生的费用,可以将成本分配标签应用到流日志订阅。要跟踪将流日志发布到 CloudWatch Logs 所产生的费用,您可以将成本分配标签应用到目标 CloudWatch Logs 日志组。此后,您的 AWS 成本分配报告中就会包含按这些标签汇总的使用量和成本。您可以应用代表业务类别(例如成本中心、应用程序名称或拥有者)的标签,以便整理您的成本。有关更多信息,请参阅 AWS 账单和成本管理用户指南 中的使用成本分配标签