流日志记录 - Amazon Virtual Private Cloud

流日志记录

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

每条记录都是一个字符串,字段用空格分隔。记录包括 IP 流的不同组件的值,包括源、目标和协议。

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

聚合时间间隔

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

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

在聚合时间间隔内捕获数据后,需要额外的时间来处理数据并将其发布到 CloudWatch Logs 或 Amazon S3。流日志服务通常在大约 5 分钟内将日志传送到 CloudWatch Logs,在大约 10 分钟内将日志传送到 Amazon S3。但是,日志交付已尽了最大努力,您的日志可能会延迟到典型交付时间之后。

默认格式

使用默认格式,流日志记录按可用字段表中显示的顺序包括版本 2 字段。您无法自定义或更改默认格式。要捕获其他字段或不同字段子集,请指定自定义格式。

自定义格式

使用自定义格式,您可以指定流日志记录中包含哪些字段以及采用哪种顺序。这使您可以根据具体需求创建流日志,并忽略无关的字段。使用自定义格式,还可减少从发布的流日志提取特定信息所需的单独流程。您可以指定任意数量的可用流日志字段,但必须至少指定一个。

可用字段

下表描述了对流日志记录可用的所有字段。版本列表示在其中引入了字段的 VPC 流日志版本。默认格式包括所有版本 2 字段,与它们在表格中出现的顺序相同。

将流日志数据发布到 Amazon S3 时,字段的数据类型将取决于流日志格式。如果格式为纯文本,则所有字段的类型均为 STRING。如果格式为 Parquet,请参阅字段数据类型表。

如果某个字段不适用于或无法计算特定记录,则记录为该条目显示一个“-”符号。不直接来自数据包标头的元数据字段是最大努力的近似值,它们的值可能缺失或不准确。

字段 描述 版本

version

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

Parquet 数据类型:INT_32

2

account-id

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

Parquet 数据类型:STRING

2

interface-id

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

Parquet 数据类型:STRING

2

srcaddr

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

Parquet 数据类型:STRING

2

dstaddr

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

Parquet 数据类型:STRING

2

srcport

流量的源端口。

Parquet 数据类型:INT_32

2

dstport

流量的目标端口。

Parquet 数据类型:INT_32

2

protocol

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

Parquet 数据类型:INT_32

2

packets

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

Parquet 数据类型:INT_64

2

bytes

在流中传输的字节数。

Parquet 数据类型:INT_64

2

start

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

Parquet 数据类型:INT_64

2

end

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

Parquet 数据类型:INT_64

2

action

与流量关联的操作:

  • ACCEPT — 流量已被接受。

  • REJECT — 流量已被拒绝。例如,安全组或网络 ACL 不允许流量,或数据包在连接关闭之后到达。

Parquet 数据类型:STRING

2

log-status

流日志的日志记录状态:

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

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

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

    在聚合时间间隔内可能会跳过一些流日志记录(请参阅可用字段中的 log-status)。这可能是因为存在内部 AWS 容量限制或内部错误。如果使用 AWS Cost Explorer 查看 VPC 流日志费用,并且在流日志聚合时间间隔内跳过了一些流日志,则 AWS Cost Explorer 中报告的流日志数量会高于 Amazon VPC 发布的流日志数量。

Parquet 数据类型:STRING

2

vpc-id

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

Parquet 数据类型:STRING

3

subnet-id

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

Parquet 数据类型:STRING

3

instance-id

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

Parquet 数据类型:STRING

3

tcp-flags

以下 TCP 标志的位掩码值:

  • FIN — 1

  • SYN — 2

  • RST — 4

  • SYN-ACK – 18

如果未记录支持的标志,则 TCP 标志值为 0。例如,由于 tcp-flags 不支持记录 ACK 或 PSH 标志,因此具有这些不受支持标志的流量记录将导致 tcp-flags 值为 0。但是,如果不支持的标志附带有支持标志,我们将报告受支持标志的值。例如,如果 ACK 是 SYN-ACK 的一部分,则会报告 18。而且,如果有像 SYN+ECE 这样的记录,由于 SYN 是支持的标志,而 ECE 不是,那么 TCP 标志值为 2。如果由于某种原因标志组合无效且无法计算其值,则值为“-”。如果未发送标志,则 TCP 标志值为 0。

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

有关 TCP 标志的一般信息(例如 FIN、SYN 和 ACK 等标志的含义),请参阅 Wikipedia 上的 TCP 分段结构

Parquet 数据类型:INT_32

3

type

流量的类型。可能的值包括:IPv4 | IPv6 | EFA。有关更多信息,请参阅 Elastic Fabric Adapter

Parquet 数据类型:STRING

3

pkt-srcaddr

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

Parquet 数据类型:STRING

3

pkt-dstaddr

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

Parquet 数据类型:STRING

3

region

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

Parquet 数据类型:STRING

4

az-id

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

Parquet 数据类型:STRING

4

sublocation-type

sublocation-id 字段中返回的子位置类型:可能的值包括:波长 | 前哨 | 本地扩展区。如果流量不是来自子位置,则记录会对此字段显示“-”符号。

Parquet 数据类型:STRING

4

sublocation-id

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

Parquet 数据类型:STRING

4

pkt-src-aws-service

pkt-srcaddr 字段的 IP 地址范围子集的名称(如果源 IP 地址用于AWS服务)。如果 pkt-srcaddr 属于重叠范围,则 pkt-src-aws-service 将只显示其中一个 AWS 服务代码。可能的值包括:AMAZON | AMAZON_APPFLOW | AMAZON_CONNECT | API_GATEWAY | CHIME_MEETINGS | CHIME_VOICECONNECTOR | CLOUD9 | CLOUDFRONT | CODEBUILD | DYNAMODB | EBS | EC2 | EC2_INSTANCE_CONNECT | GLOBALACCELERATOR | KINESIS_VIDEO_STREAMS | ROUTE53 | ROUTE53_HEALTHCHECKS | ROUTE53_HEALTHCHECKS_PUBLISHING | ROUTE53_RESOLVER | S3 | WORKSPACES_GATEWAYS。

Parquet 数据类型:STRING

5

pkt-dst-aws-service

pkt-dstaddr 字段的 IP 地址范围子集的名称(如果目标 IP 地址用于AWS服务)。有关可能的值的列表,请参阅 pkt-src-aws-service 字段。

Parquet 数据类型:STRING

5

flow-direction

相对于捕获流量的接口而言流的方向。可能的值包括:ingress | egress。

Parquet 数据类型:STRING

5

traffic-path

传出流量到达目的地的路径。要确定流量是否为传出流量,请检查 flow-direction 字段。可能的值如下所示。如果没有任何值适用,则该字段将设置为 -。

  • 1 – 通过同一 VPC 中的其他资源,包括在该 VPC 中创建网络接口的资源

  • 2 — 通过互联网网关或网关 VPC 终端节点

  • 3 — 通过虚拟私有网关

  • 4 — 通过区域内 VPC 对等连接

  • 5 — 通过区域间 VPC 对等连接

  • 6 — 通过本地网关

  • 7 — 通过网关 VPC 终端节点(仅限基于 Nitroc 的实例)

  • 8 — 通过互联网网关(仅限基于 Nitro 的实例)

Parquet 数据类型:INT_32

5

ecs-cluster-arn

如果流量来自正在运行的 ECS 任务,则为 ECS 集群的 AWS 资源名称(ARN)。要在订阅中包含此字段,您需要调用 ecs:ListClusters 的权限。

Parquet 数据类型:STRING

7

ecs-cluster-name

如果流量来自正在运行的 ECS 任务,则为 ECS 集群的名称。要在订阅中包含此字段,您需要调用 ecs:ListClusters 的权限。

Parquet 数据类型:STRING

7

ecs-container-instance-arn

如果流量来自 EC2 实例上正在运行的 ECS 任务,则为 ECS 容器实例的 ARN。如果容量提供程序是 AWS Fargate,则此字段将为“-”。要在订阅中包含此字段,您需要调用 ecs:ListClusters 和 ecs:ListContainerInstances 的权限。

Parquet 数据类型:STRING

7

ecs-container-instance-id

如果流量来自 EC2 实例上正在运行的 ECS 任务,则为 ECS 容器实例的 ID。如果容量提供程序是 AWS Fargate,则此字段将为“-”。要在订阅中包含此字段,您需要调用 ecs:ListClusters 和 ecs:ListContainerInstances 的权限。

Parquet 数据类型:STRING

7

ecs-container-id

如果流量来自正在运行的 ECS 任务,则为容器的 Docker 运行时 ID。如果 ECS 任务中有一个或多个容器,这将是第一个容器的 docker 运行时 ID。要在订阅中包含此字段,您需要调用 ecs:ListClusters 的权限。

Parquet 数据类型:STRING

7

ecs-second-container-id

如果流量来自正在运行的 ECS 任务,则为容器的 Docker 运行时 ID。如果 ECS 任务中有多个容器,这将是第二个容器的 Docker 运行时 ID。要在订阅中包含此字段,您需要调用 ecs:ListClusters 的权限。

Parquet 数据类型:STRING

7

ecs-service-name

如果流量来自正在运行的 ECS 任务,并且 ECS 任务由 ECS 服务启动,则为 ECS 服务的名称。如果 ECS 任务不是由 ECS 服务启动的,则此字段将为“-”。要在订阅中包含此字段,您需要调用 ecs:ListClusters 和 ecs:ListServices 的权限。

Parquet 数据类型:STRING

7

ecs-task-definition-arn

如果流量来自正在运行的 ECS 任务,则为 ECS 任务定义的 ARN。要在订阅中包含此字段,您需要调用 ecs:ListClusters 和 ecs:ListTaskDefinitions 的权限

Parquet 数据类型:STRING

7

ecs-task-arn

如果流量来自正在运行的 ECS 任务,则为 ECS 任务的 ARN。要在订阅中包含此字段,您需要调用 ecs:ListClusters 和 ecs:ListTasks 的权限。

Parquet 数据类型:STRING

7

ecs-task-id

如果流量来自正在运行的 ECS 任务,则为 ECS 任务的 ID。要在订阅中包含此字段,您需要调用 ecs:ListClusters 和 ecs:ListTasks 的权限。

Parquet 数据类型:STRING

7