使用 VPC 流日志

VPC 流日志记录了虚拟机实例(包括用作 GKE 节点的实例)发送和接收的网络流样本。这些日志可用于网络监控、取证、实时安全分析和费用优化。

您可以在 Cloud Logging 中查看流日志,并将日志导出至 Cloud Logging 导出功能支持的任意目的地。

流日志通过连接从 Compute Engine 虚拟机进行聚合并实时导出。通过订阅 Pub/Sub,您可以使用实时流式 API 分析流日志。

关键属性

  • 您可以为每个 VPC 子网启用或停用 VPC 流日志。为子网启用 VPC 流日志后,VPC 流日志会从该子网中的所有虚拟机实例收集数据。
  • 虚拟机会报告所有 TCP 和 UDP 流。每个流记录都包含记录格式部分中所述的信息。
  • 每个虚拟机都会对它看到的每个入站及出站 TCP 和 UDP 流进行采样,无论该流是传往还是来自另一个虚拟机、本地数据中心的主机、Google 服务还是互联网上的主机。如果两个 GCP 虚拟机正在进行通信,并且都在启用了 VPC 流日志的子网中,则两个虚拟机都会报告这些流。
  • 您可以使用过滤条件来选择要从 Logging 中排除的流日志,以及导出到外部 API 的流日志。
  • VPC 流日志原生嵌入到 VPC 网络基础架构的网络堆栈中。在将记录到日志中的 IP 数据包路由到目的地时,没有额外的延迟和性能损失。

用例

网络监控

VPC 流日志可为您实时显示网络吞吐量和性能。您可以执行以下操作:

  • 监控 VPC 网络
  • 执行网络诊断
  • 按虚拟机和应用过滤流日志以了解流量变化
  • 了解流增长情况以执行容量预测

了解网络使用情况并优化网络流量费用

您可以使用 VPC 流日志分析网络使用情况。您可以分析网络流以获取以下信息:

  • 区域和地区之间的流
  • 发往互联网特定国家/地区的流量
  • 最高用量者

根据分析结果,您就可以优化网络流量费用。

网络取证

您可以利用 VPC 流日志进行网络取证。例如,如果出现突发事件,您可以检查以下事项:

  • 哪些 IP 地址在何时与谁进行过通信
  • 通过分析所有入站和出站网络流来调查任何遭入侵的 IP

实时安全分析

您可以通过 Pub/Sub 利用实时流式传输 API,还可以集成 SIEM(安全信息和事件管理)系统。这样就能提供实时监控、事件关联、分析和安全警报。

日志收集

按特定时间间隔为每个虚拟机连接收集流日志。针对给定连接的给定时间间隔收集的所有数据包会在一段时间(聚合时间间隔)聚合到单个流日志条目。然后,此数据会发送到 Logging

日志可在 Logging 中存储 30 天。如果您想延长日志保留时间,则必须将它们导出到支持的目的地。

日志采样和处理

Google Cloud 会对传入和传出虚拟机的数据包进行采样,以生成流日志。并非每个数据包都会被捕获到其自己的日志记录中。每 10 个数据包中会有约 1 个数据包被捕获,不过根据虚拟机上负载的不同,具体采样率可能会更低。 此比率无法调整。

生成流日志后,Google Cloud 会按以下步骤处理这些日志:

  1. 聚合:在可配置的聚合时间间隔内采样的数据包会聚合,以生成一个流日志条目
  2. 流日志采样:这是第二个采样流程。系统会根据可配置的采样率参数,对流日志条目进行进一步采样。
  3. 元数据:如果启用,则添加元数据注释
  4. 写入日志记录:最终日志条目将写入 Cloud Logging

尽管 Google Cloud 无法捕获每一个数据包,日志记录捕获量也可能相当庞大。您可以通过调整日志收集的以下方面来平衡流量可见性和存储费用需求:

  • 聚合时间间隔:在一段时间间隔内采样的数据包会聚合到单个日志条目。该时间间隔可以是 5 秒(默认)、30 秒、1 分钟、5 分钟、10 分钟或 15 分钟。
  • 采样率:在写入数据库之前,可以对日志数进行采样,以减少其数量。默认情况下,日志条目量按 0.50 (50%) 扩缩,这意味着会保留一半的条目。此值可以在 1.0(100%,保留所有日志条目)到 0.0(0%,不保留任何日志)的范围内设置。
  • 元数据注释:默认情况下,流日志条目使用元数据信息进行注释,例如来源虚拟机和目标虚拟机的名称或外部来源和目标的地理区域。可以关闭此元数据注释以节省存储空间。

记录格式

日志记录包含基本字段(即每个日志记录的核心字段)以及添加额外信息的元数据字段。可以省略元数据字段,以节省存储费用。

某些日志字段采用多字段格式,在给定字段中包含多段数据。例如,connection 字段采用 IpConnection 格式,它在单个字段中包含来源 IP 地址和目的地 IP 地址、端口以及协议。记录格式表下方介绍了这些采用多字段格式的字段。

字段 字段格式 字段类型:基本或可选元数据
连接 IpConnection
描述此连接的 5 元组。
基本
start_time 字符串
在聚合时间间隔内观察到的第一个数据包的时间戳(RFC 3339 日期字符串格式)
基本
end_time 字符串
在聚合时间间隔内观察到的最后一个数据包的时间戳(RFC 3339 日期字符串格式)
基本
bytes_sent int64
从来源发送到目的地的字节数
基本
packets_sent int64
从来源发送到目的地的数据包数量
基本
rtt_msec int64
在该时间间隔内测量到的延迟(仅适用于 TCP 流)。这是发送 SEQ 和接收相应的 ACK 之间所经历的时间,它包含网络 RTT 以及与应用相关的延迟。
基本
reporter 字符串
报告流的一侧。可以是“SRC”或“DEST”。
基本
src_instance InstanceDetails
如果连接来源是位于同一 VPC 上的虚拟机,则此字段会填充虚拟机实例详细信息。在共享 VPC 配置中,project_id 对应于拥有该实例的项目(通常是服务项目)。
元数据
dest_instance InstanceDetails
如果连接目的地是位于同一 VPC 上的虚拟机,则此字段会填充虚拟机实例详细信息。在共享 VPC 配置中,project_id 对应于拥有该实例的项目(通常是服务项目)。
元数据
src_vpc VpDDetails
如果连接来源是位于同一 VPC 上的虚拟机,则此字段会填充 VPC 网络详细信息。在共享 VPC 配置中,project_id 与宿主项目的相应参数相对应。
元数据
dest_vpc VpDDetails
如果连接目的地是位于同一 VPC 上的虚拟机,则此字段会填充 VPC 网络详细信息。在共享 VPC 配置中,project_id 与宿主项目的相应参数相对应。
元数据
src_location GeographicDetails
如果连接来源是位于 Google VPC 外部的虚拟机,则此字段会填充可用位置元数据。
元数据
dest_location GeographicDetails
如果连接目的地是位于 Google VPC 外部的虚拟机,则此字段会填充可用位置元数据。
元数据

IpConnection 字段格式

字段 类型 说明
src_ip 字符串 来源 IP 地址
src_port int32 来源端口
dest_ip 字符串 目标 IP 地址
dest_port int32 目的地端口
protocol int32 IANA 协议编号

InstanceDetails 字段格式

字段 类型 说明
project_id 字符串 包含虚拟机的项目的 ID
vm_name 字符串 虚拟机的实例名称
region 字符串 虚拟机的区域
zone 字符串 虚拟机的地区

VpcDetails 字段格式

字段 类型 说明
project_id 字符串 包含 VPC 的项目的 ID
vpc_name 字符串 运行虚拟机的 VPC
subnetwork_name 字符串 运行虚拟机的子网

GeographicDetails 字段格式

字段 类型 说明
continent 字符串 外部端点所在的大洲
country 字符串 外部端点所在的国家/地区,采用 ISO 3166-1 Alpha-3 国家/地区代码的形式表示。
region 字符串 外部端点所在的区域
城市 字符串 外部端点所在的城市
ASN int32 此端点所属外部网络的自治系统编号 (ASN)。

流量模式示例

本部分演示了 VPC 流日志在以下用例中的工作方式:

同一 VPC 中虚拟机之间的流

一个 VPC 内的虚拟机流(点击可放大)
一个 VPC 内的虚拟机流(点击可放大)

对于同一 VPC 中虚拟机之间的流,只要两个虚拟机都在启用了 VPC 流日志的子网中,就会由发出请求和做出响应的虚拟机报告流日志。在此示例中,虚拟机 10.10.0.2 向虚拟机 10.50.0.2 发送一个 1224 字节的请求,该虚拟机也位于已启用日志记录的子网中。反过来,10.50.0.2 会响应该请求,并返回一个包含 5342 字节的回复。请求和回复都是从发出请求和做出响应的虚拟机记录的。

由发出请求的虚拟机 (10.10.0.2) 报告
请求/回复 connection.src_ip connection.dest_ip bytes_sent VPC 注释
请求 10.10.0.2 10.50.0.2 1224 src_instance.*
dest_instance.*
src_vpc.*
dest_vpc.*
回复 10.50.0.2 10.10.0.2 5342 src_instance.*
dest_instance.*
src_vpc.*
dest_vpc.*
由做出响应的虚拟机 (10.50.0.2) 报告
请求/回复 connection.src_ip connection.dest_ip 字节 VPC 注释
请求 10.10.0.2 10.50.0.2 1224 src_instance.*
dest_instance.*
src_vpc.*
dest_vpc.*
回复 10.50.0.2 10.10.0.2 5342 src_instance.*
dest_instance.*
src_vpc.*
dest_vpc.*

虚拟机到外部的流

虚拟机到外部的流(点击可放大)
虚拟机到外部的流(点击可放大)

对于虚拟机与外部实体之间的流,仅由虚拟机报告流日志:

  • 对于出站流,由作为流量来源的虚拟机报告日志。
  • 对于入站流,由作为流量目的地的虚拟机报告日志。

这适用于:

  • 通过 VPN 或 Cloud Interconnect 在 VPC 网络与本地部署网络之间传输的流量
  • 虚拟机与互联网上的位置之间的流量

在此示例中,虚拟机 10.10.0.2 和本地端点 10.30.0.2 通过 VPN 网关或 Cloud Interconnect 进行连接。从 10.10.0.2 发送到 10.30.0.2 的出站流量(1224 字节)由来源虚拟机 10.10.0.2 报告。从 10.30.0.2 发送到 10.10.0.2 的入站流量(5342 字节)由该流量的目的地虚拟机 10.10.0.2 报告。

请求/回复 connection.src_ip connection.dest_ip bytes_sent VPC 注释
请求 10.10.0.2 10.30.0.2 1224 src_instance.*
src_vpc.*
dest_location.*
回复 10.30.0.2 10.10.0.2 5342 dest_instance.*
dest_vpc.*
src_location.*

共享 VPC 中虚拟机之间的流

共享 VPC 流(点击可放大)
共享 VPC 流(点击可放大)

对于共享 VPC 中虚拟机之间的流,您可以为宿主项目中的子网启用 VPC 流日志。例如,子网 10.10.0.0/20 属于宿主项目中定义的共享 VPC 网络。您可以查看属于此子网的虚拟机发出的流日志,包括服务项目创建的日志。在此示例中,服务项目名为“webserver”、“recommendation”、“database”。

对于虚拟机之间的流,如果两台虚拟机在同一个项目中或使用一个共享网络,则为连接中的另一个端点提供相同的宿主项目、项目 ID 的注释等。如果另一台虚拟机位于不同的项目中,则不会提供该虚拟机的注释。

下表显示了 10.10.0.1010.10.0.20 报告的流。

  • src_vpc.project_iddest_vpc.project_id 用于宿主项目,因为 VPC 子网属于宿主项目。
  • src_instance.project_iddest_instance.project_id 用于服务项目,因为实例属于服务项目。
connection
.src_ip
src_instance
.project_id
src_vpc
.project_id
connection
.dest_ip
dest_instance
.project_id
dest_vpc
.project_id
10.10.0.10 webserver host_project 10.10.0.20 recommendation host_project

服务项目没有自有的共享 VPC 网络,也无权访问共享 VPC 网络的流日志。

VPC 对等互连中虚拟机之间的流

VPC 对等互连流(点击可放大)
VPC 对等互连流(点击可放大)

除非这两台虚拟机在同一个 GCP 项目中,否则对等互连 VPC 中虚拟机之间的流按照与针对外部端点相同的方式报告,并且不会提供另一台虚拟机的其他注释信息。如果这两台虚拟机在同一个项目中,即使位于不同的网络中,也会为另一台虚拟机提供项目和其他注释信息。

在此示例中,虚拟机 10.10.0.2(位于项目 analytics-prod 中)和虚拟机 10.50.0.2(位于项目 webserver-test 中)通过 VPC 对等互连进行连接。在项目 analytics-prod 中启用 VPC 流日志时,从 10.10.0.2 发送到 10.50.0.2 的流量(1224 字节)由虚拟机 10.10.0.2(流的来源)报告。从 10.50.0.2 发送到 10.10.0.2 的流量(5342 字节)也是由虚拟机 10.10.0.2(流的目的地)报告。

在此示例中,项目 webserver-test 中未启用 VPC 流日志,因此虚拟机 10.50.0.2 不会记录任何日志。

报告者 connection.src_ip connection.dest_ip bytes_sent VPC 注释
来源 10.10.0.2 10.50.0.2 1224 src_instance.*
src_vpc.*
目的地 10.50.0.2 10.10.0.2 5342 dest_instance.*
dest_vpc.*

内部负载平衡中虚拟机之间的流

内部负载平衡流(点击可放大)
内部负载平衡流(点击可放大)

将虚拟机添加到内部负载平衡器的后端服务时,Linux 或 Windows 客机环境会将此负载平衡器的 IP 地址添加到该虚拟机的本地路由表中。这样,该虚拟机就可以接受目的地设置为此负载平衡器的 IP 地址的请求数据包。当该虚拟机回复时,它会直接发送响应;但是,响应数据包的来源 IP 地址会设置为负载平衡器(而不是实现负载平衡的虚拟机)的 IP 地址。

通过内部负载平衡器发送的虚拟机间流会同时从来源和目的地进行报告。对于示例 HTTP 请求/响应对,下表说明了观察到的流日志条目的字段。为便于说明这一点,请考虑以下网络配置:

  • 浏览器实例,位于 192.168.1.2
  • 内部负载平衡器,位于 10.240.0.200
  • 网络服务器实例,位于 10.240.0.3
流量方向 报告者 connection.src_ip connection.dest_ip connection.src_instance connection.dest_instance
请求 SRC 192.168.1.2 10.240.0.200 浏览器实例
请求 DEST 192.168.1.2 10.240.0.3 浏览器实例 网络服务器实例
响应 SRC 10.240.0.3 192.168.1.2 网络服务器实例 浏览器实例
响应 DEST 10.240.0.200 192.168.1.2 浏览器实例

发出请求的虚拟机不知道哪个虚拟机将响应该请求。此外,由于另一个虚拟机会发送将内部负载平衡器 IP 作为来源地址的响应,因此它不知道哪个虚拟机做出了响应。 由于这些原因,发出请求的虚拟机无法将 dest_instance 信息添加到其报告中,只能添加 src_instance 信息。由于做出响应的虚拟机确实知道另一虚拟机的 IP 地址,因此它可以同时提供 src_instancedest_instance 信息。

启用 VPC 流日志

启用 VPC 流日志时,可以为子网中的所有虚拟机启用此功能。您还可以在打开日志记录时指定日志采样参数。如需详细了解您可以控制的参数,请参阅日志采样和聚合

创建子网时启用 VPC 流日志

控制台

  1. 转到 Google Cloud Console 中的“VPC 网络”页面。
    转到“VPC 网络”页面
  2. 点击要添加子网的网络。
  3. 点击添加子网
  4. 流日志下,选择开启
  5. 如果要调整日志采样和聚合,请点击配置日志并调整以下任意项:
    • 聚合时间间隔
    • 是否在最后的日志条目中包含元数据
    • 采样率100% 表示保留所有条目。
  6. 根据需要填写其他字段。
  7. 点击添加

gcloud

    gcloud compute networks subnets create NAME \
        --enable-flow-logs \
        [--logging-aggregation-interval=INTERVAL \
        [--logging-flow-sampling=0.0...1.0] \
        [--logging-metadata=(include-all | exclude-all)] \
        [other flags as needed]
    

其中

  • --logging-aggregation-interval=<var>INTERVAL</var> 设置该子网中流日志的聚合时间间隔。该时间间隔可以设置为以下任何值:5 秒(默认)、30 秒、1 分钟、5 分钟、10 分钟或 15 分钟。
  • --logging-flow-sampling 是流采样率。流采样的范围可以设置为从 0.0(不采样)到 1.0(所有日志)。默认值为 0.5
  • --logging-metadata=(include-all | exclude-all) 可开启或关闭记录元数据注释。默认为开启。

API

创建新子网时启用 VPC 流日志。

    POST https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks
    {
      "logConfig": {
        "aggregationInterval": "AGGREGATION_INTERVAL",
        "flowSampling": SAMPLING_RATE,
        "enable": true
      },
      "ipCidrRange": "IP_RANGE",
      "network": "NETWORK_URL",
      "name": "SUBNET_NAME"
    }
    

请将占位符替换为有效值:

  • PROJECT_ID 是要创建子网的项目的 ID。
  • REGION 是将在其中创建子网的区域。
  • AGGREGATION_INTERVAL 设置该子网中流日志的聚合时间间隔。此时间间隔可以设置为如下任意值:INTERVAL_5_SECINTERVAL_30_SECINTERVAL_1_MININTERVAL_5_MININTERVAL_10_MININTERVAL_15_MIN
  • SAMPLING_RATE 是流采样率。流采样的范围可以设置为从 0.0(不采样)到 1.0(所有日志)。默认值为 .0.5
  • IP_RANGE 是该子网的主要内部 IP 地址范围。
  • NETWORK_URL 是将在其中创建子网的 VPC 网络的 URL。
  • SUBNET_NAME 是子网的名称。

如需了解详情,请参阅 subnetworks.insert 方法。

为现有子网启用 VPC 流日志

控制台

  1. 转到 Google Cloud Console 中的“VPC 网络”页面。
    转到“VPC 网络”页面
  2. 点击要更新的子网。
  3. 点击修改
  4. 流日志下,选择开启
  5. 如果要调整日志采样和聚合,请点击配置日志并调整以下任意项:
    • 聚合时间间隔
    • 是否在最后的日志条目中包含元数据
    • 采样率100% 表示保留所有条目。
  6. 点击保存

gcloud

    gcloud compute networks subnets update NAME \
        --enable-flow-logs \
        [--logging-aggregation-interval=INTERVAL] \
        [--logging-flow-sampling=0.0...1.0 \
        [--logging-metadata=(include-all | exclude-all)]
    

其中

  • --logging-aggregation-interval=<var>INTERVAL</var> 设置该子网中流日志的聚合时间间隔。该时间间隔可以设置为以下任何值:5 秒(默认)、30 秒、1 分钟、5 分钟、10 分钟或 15 分钟。
  • --logging-flow-sampling 是流采样率。流采样的范围可以设置为从 0.0(不采样)到 1.0(所有日志)。默认值为 .0.5
  • --logging-metadata=(include-all | exclude-all) 可开启或关闭记录元数据注释。默认为开启。

API

为现有子网启用 VPC 流日志。

    PATCH https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME
    {
      "logConfig": {
        "enable": true
        ...other logging fields
      },
      "fingerprint": "SUBNETWORK_FINGERPRINT"
    }
    

请将占位符替换为有效值:

  • PROJECT_ID 是子网所属项目的 ID。
  • REGION 是子网所在的区域。
  • SUBNET_NAME 是现有子网的名称。
  • SUBNET_FINGERPRINT 是现有子网的指纹 ID,是您在描述子网时提供的。
  • 如需了解其他日志字段,请参阅在创建子网时启用 VPC 流日志

如需了解详情,请参阅 subnetworks.patch 方法。

查看现有子网的估算日志量

Google Cloud Console 会为现有子网提供日志量估算,然后您可以使用该估算值来估算启用流日志的费用。估算值基于过去 7 天内按照 5 秒的时间间隔为子网捕获的流。此外,每个日志的大小都取决于您是否启用了元数据注释。

  1. 转到 Google Cloud Console 中的“VPC 网络”页面。
    转到“VPC 网络”页面
  2. 点击要为其估算费用的子网。
  3. 点击修改
  4. 流日志下,选择开启
  5. 点击配置日志
  6. 查看估算的每日生成日志量,以了解估算值。
  7. 点击取消以免保存任何更改。

更新 VPC 流日志参数

您可以修改日志采样参数。如需详细了解您可以控制的参数,请参阅日志采样和聚合

控制台

  1. 转到 Google Cloud Console 中的“VPC 网络”页面。
    转到“VPC 网络”页面
  2. 点击要更新的子网。
  3. 点击修改
  4. 点击配置日志以调整日志采样和聚合
    • 聚合时间间隔
    • 是否在最后的日志条目中包含元数据
    • 采样率100% 表示保留所有条目。
  5. 点击保存

gcloud

    gcloud compute networks subnets update NAME \
        [--logging-aggregation-interval=INTERVAL] \
        [--logging-flow-sampling=0.0...1.0 \
        [--logging-metadata=(include-all | exclude-all)]
    

其中

  • --logging-aggregation-interval=<var>INTERVAL</var> 设置该子网中流日志的聚合时间间隔。该时间间隔可以设置为以下任何值:5 秒(默认)、30 秒、1 分钟、5 分钟、10 分钟或 15 分钟。
  • --logging-flow-sampling 是流采样率。流采样的范围可以设置为从 0.0(不采样)到 1.0(所有日志)。默认值为 .0.5
  • --logging-metadata=(include-all | exclude-all) 可开启或关闭记录元数据注释。默认为开启。

API

修改各日志采样字段,以更新 VPC 流日志行为。

    PATCH https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME
    {
      "logConfig": {
        ...fields to modify
      },
      "fingerprint": "SUBNETWORK_FINGERPRINT"
    }
    

请将占位符替换为有效值:

  • PROJECT_ID 是子网所属项目的 ID。
  • REGION 是子网所在的区域。
  • SUBNET_NAME 是现有子网的名称。
  • SUBNET_FINGERPRINT 是现有子网的指纹 ID,是您在描述子网时提供的。
  • 如需了解您可以修改的字段,请参阅在创建子网时启用 VPC 流日志

如需了解详情,请参阅 subnetworks.patch 方法。

为子网停用 VPC 流日志

控制台

  1. 转到 Google Cloud Console 中的“VPC 网络”页面。
    转到“VPC 网络”页面
  2. 点击要更新的子网。
  3. 点击修改
  4. 流日志下,选择关闭
  5. 点击保存

gcloud

    gcloud compute networks subnets update NAME \
        --no-enable-flow-logs
    

API

在子网上停用 VPC 流日志即可停止收集日志记录。

    PATCH https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME
    {
      "logConfig": {
        "enable": false
      },
      "fingerprint": "SUBNETWORK_FINGERPRINT"
    }
    

请将占位符替换为有效值:

  • PROJECT_ID 是子网所属项目的 ID。
  • REGION 是子网所在的区域。
  • SUBNET_NAME 是现有子网的名称。
  • SUBNET_FINGERPRINT 是现有子网的指纹 ID,是您在描述子网时提供的。

如需了解详情,请参阅 subnetworks.patch 方法。

通过 Logging 访问日志

配置 IAM

按照 Logging 访问控制指南进行操作。

通过“日志查看器”页面查看日志。

为了执行这些命令,您需要提供您的项目的项目 ID

访问所有流日志

  1. 转到 Google Cloud Console 中的“日志”页面。
    转到“日志”页面
  2. 在第一个下拉菜单中选择 GCE 子网
  3. 在第二个下拉菜单中选择 vpc_flows
  4. 点击确定

或者,按照如下方式操作:

  1. 转到 Google Cloud Console 中的“日志”页面。
    转到“日志”页面
  2. 点击按标签过滤或搜索文字字段右侧的下拉箭头,然后选择转换为高级过滤条件
  3. 将以下内容粘贴到字段中。将 PROJECT_ID 替换为您的项目 ID。
        resource.type="gce_subnetwork"
        logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fvpc_flows"
        
  4. 点击提交过滤条件

访问特定子网的日志

  1. 转到 Google Cloud Console 中的“日志”页面。
    转到“日志”页面
  2. 在第一个下拉菜单中,将光标移动到 GCE 子网,然后将其移动到右侧,以打开单个子网选择菜单。
  3. 在第二个下拉菜单中,选择 vpc_flows
  4. 点击确定

或者,按照如下方式操作:

  1. 转到 Google Cloud Console 中的“日志”页面。
    转到“日志”页面
  2. 点击按标签过滤或搜索文字字段右侧的下拉箭头,然后选择转换为高级过滤条件
  3. 将以下内容粘贴到字段中。将 PROJECT_ID 替换为您的项目 ID,将 SUBNETWORK_NAME_NAME 替换为您的子网。
        resource.type="gce_subnetwork"
        logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fvpc_flows"
        resource.labels.subnetwork_name="SUBNETWORK_NAME"
        
  4. 点击提交过滤条件

访问特定虚拟机的日志

  1. 转到 Google Cloud Console 中的“日志”页面。
    转到“日志”页面
  2. 点击按标签过滤或搜索文字字段右侧的下拉箭头,然后选择转换为高级过滤条件
  3. 将以下内容粘贴到字段中。将 PROJECT_ID 替换为您的项目 ID,将 VM_NAME 替换为您的虚拟机名称。
        resource.type="gce_subnetwork"
        logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fvpc_flows"
        jsonPayload.src_instance.vm_name="VM_NAME"
        
  4. 点击提交过滤条件

访问发往特定前缀的流量的日志

  1. 转到 Google Cloud Console 中的“日志”页面。
    转到“日志”页面
  2. 点击按标签过滤或搜索文字字段右侧的下拉箭头,然后选择转换为高级过滤条件
  3. 将以下内容粘贴到字段中。将 PROJECT_ID 替换为您的项目 ID,将 SUBNETWORK_NAME_NAME 替换为您的子网。
        resource.type="gce_subnetwork"
        logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fvpc_flows"
        ip_in_net(jsonPayload.connection.dest_ip, SUBNETWORK_NAME)
        
  4. 点击提交过滤条件

访问特定端口和协议的日志

针对单独一个端口

  1. 转到 Google Cloud Console 中的“日志”页面。
    转到“日志”页面
  2. 点击按标签过滤或搜索文字字段右侧的下拉箭头,然后选择转换为高级过滤条件
  3. 将以下内容粘贴到字段中。将 PROJECT_ID 替换为您的项目 ID,将 PORT 替换为所用端口,并将 PROTOCOL 替换为所用协议。
        resource.type="gce_subnetwork"
        logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fvpc_flows"
        jsonPayload.connection.src_port=PORT
        jsonPayload.connection.protocol=PROTOCOL
        
  4. 点击提交过滤条件

针对多个端口

  1. 转到 Google Cloud Console 中的“日志”页面。
    转到“日志”页面
  2. 点击按标签过滤或搜索文字字段右侧的下拉箭头,然后选择转换为高级过滤条件
  3. 将以下内容粘贴到字段中。将 PROJECT_ID 替换为您的项目 ID,将 PORT1 和 PORT2 替换为所用端口,并将 PROTOCOL 替换为所用协议。
        resource.type="gce_subnetwork"
        logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fvpc_flows"
        jsonPayload.connection.src_port=(PORT1 OR PORT2)
        jsonPayload.connection.protocol=PROTOCOL
        
  4. 点击提交过滤条件

将日志导出到 BigQuery、Pub/Sub 和自定义目标

您可以按照 Logging 文档中的说明,将 Logging 中的流日志导出到您选择的目的地位置。 请参阅上一节中的示例过滤条件。

问题排查

Logging 中的 gce_subnetwork 资源下不显示任何 vpc_flows

  • VPC 流仅支持 VPC 网络。如果您使用的是旧版网络,则不会看到任何日志。
  • 共享 VPC 网络中,日志只出现在宿主项目中,不会出现在服务项目中。务必在宿主项目中查找日志。
  • Logging 排除项过滤条件会屏蔽指定的日志。确保其中没有会舍弃 VPC 流日志的排除规则。
    1. 转到资源使用情况
    2. 点击排除项标签。
    3. 确保没有可能会舍弃 VPC 流日志的排除规则。

某些日志中没有 RTT 或字节值

  • 如果没有获取足够的数据包作为样本来捕获 RTT,RTT 测量结果可能会缺失。在低容量连接中发生这种情况的几率更高。
  • 没有 RTT 值可用于 UDP 流。
  • 发送的某些数据包没有有效负载。如果抽样的是仅有标头的数据包,则字节值为 0。

某些流缺失

  • 此功能仅支持 UDP 和 TCP 协议。VPC 流日志不支持任何其他协议。
  • 对日志进行采样。某些数据包流的容量极小,可能会丢失。

价格

适用 Logging、BigQuery 或 Pub/Sub 标准价格。如需了解 VPC 流日志价格,请参阅 Network Telemetry 价格

常见问题解答

  • VPC 流日志是否包含基于防火墙规则允许和拒绝的流量?

    • VPC 流日志涵盖从虚拟机角度使用的流量。对于来自虚拟机的所有出站(传出)流量,即使该流量被出站流量拒绝防火墙规则阻止,系统也会将该流量记录到日志中。如果入站(传入)流量被入站允许防火墙规则允许,则该流量也会记录到日志中。被入站流量拒绝防火墙规则所阻止的入站流量不会记入日志。
  • VPC 流日志是否可以与具有多个接口的虚拟机实例配合使用?

  • VPC 流日志是否可以与旧版网络配合使用?

后续步骤