配置 VPC 流日志

本页面介绍了如何配置 VPC 流日志。本页面假定您熟悉 VPC 流日志VPC 流日志记录简介中介绍的概念。

启用 VPC 流日志

启用 VPC 流日志时,可以为子网中的所有虚拟机启用日志记录。但是,您可以减少写入日志记录的信息量。有关您可以控制的参数的详细信息,请参阅 日志采样和处理

如需自定义元数据字段或配置日志过滤,请使用 Google Cloud CLI 或 API。

创建子网时启用 VPC 流日志

控制台

  1. 在 Google Cloud 控制台中,进入 VPC 网络页面。

    进入 VPC 网络页面

  2. 点击要在其中添加子网的网络。

  3. 点击添加子网

  4. 对于流日志,选择开启

  5. 如果要调整日志采样和汇总,请点击配置日志并调整以下任意项:

    • 汇总时间间隔
    • 是否在最终日志条目中包括元数据。默认情况下,包括元数据将包括所有字段。
    • 采样率100% 表示保留所有条目。
  6. 根据需要填写其他字段。

  7. 点击添加

gcloud

  1. 在 Google Cloud 控制台中,激活 Cloud Shell。

    激活 Cloud Shell

    Cloud Shell 会话随即会在 Google Cloud 控制台的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Google Cloud CLI 且已为当前项目设置值的 Shell 环境。该会话可能需要几秒钟时间来完成初始化。

  2. 运行以下命令:

    gcloud compute networks subnets create SUBNET_NAME \
       --enable-flow-logs \
       [--logging-aggregation-interval=AGGREGATION_INTERVAL] \
       [--logging-flow-sampling=SAMPLE_RATE] \
       [--logging-filter-expr=FILTER_EXPRESSION] \
       [--logging-metadata=LOGGING_METADATA] \
       [--logging-metadata-fields=METADATA_FIELDS] \
       [other flags as needed]
    

    替换以下内容:

    • AGGREGATION_INTERVAL:该子网中流日志的汇总时间间隔。该时间间隔可以设置为以下任何值:5 秒(默认)、30 秒、1 分钟、5 分钟、10 分钟或 15 分钟。
    • SAMPLE_RATE:流采样率。流采样的范围可以设置为从 0.0(不采样)到 1.0(所有日志)。默认值为 0.5
    • FILTER_EXPRESSION:定义要保留的日志的表达式。表达式的长度上限为 2,048 个字符。如需了解详情,请参阅日志过滤
    • LOGGING_METADATA:您希望包括在日志中的元数据注释

      • 使用 include-all 可包含所有元数据注解。
      • 使用 exclude-all 可以排除所有元数据注解(默认)。
      • 使用 custom 可以包括您在 METADATA_FIELDS 中指定的元数据字段的自定义列表。
    • METADATA_FIELDS:您希望包括在日志中的元数据字段的逗号分隔列表。例如 src_instance,dst_instance。只有当 LOGGING_METADATA 设置为 custom 时才能设置此项。

API

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

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks
{
  "logConfig": {
    "aggregationInterval": "AGGREGATION_INTERVAL",
    "flowSampling": SAMPLING_RATE,
    "filterExpr": EXPRESSION,
    "metadata": METADATA_SETTING,
    "metadataFields": METADATA_FIELDS,
    "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
  • EXPRESSION:用于过滤实际写入的日志的过滤表达式。表达式的长度上限为 2,048 个字符。如需了解详情,请参阅日志过滤
  • METADATA_SETTING:您希望包括在日志中的元数据注释

    • 使用 INCLUDE_ALL_METADATA 可包含所有元数据注解。
    • 使用 EXCLUDE_ALL_METADATA 可以排除所有元数据注解(默认)。
    • 使用 custom 可以包括您在 METADATA_FIELDS 中指定的元数据字段的自定义列表。
  • METADATA_FIELDS:设置 metadata: CUSTOM_METADATA 后要捕获的元数据字段。这是一个以英文逗号分隔的元数据字段列表,例如 src_instance, src_vpc.project_id

  • IP_RANGE:子网的主要内部 IP 地址范围。

  • NETWORK_URL:将在其中创建子网的 VPC 网络的网址。

  • SUBNET_NAME:子网的名称。

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

Terraform

您可以使用 Terraform 模块创建自定义模式 VPC 网络和子网。

以下示例会创建三个子网,如下所示:

  • subnet-01 停用了 VPC 流日志。创建子网时,VPC 流日志会被停用,除非您明确启用。
  • subnet-02 启用了 VPC 流日志,并进行了默认流日志设置。
  • subnet-03 启用了 VPC 流日志,并进行了一些自定义设置。
module "test-vpc-module" {
  source       = "terraform-google-modules/network/google"
  version      = "~> 9.0"
  project_id   = var.project_id # Replace this with your project ID in quotes
  network_name = "my-custom-mode-network"
  mtu          = 1460

  subnets = [
    {
      subnet_name   = "subnet-01"
      subnet_ip     = "10.10.10.0/24"
      subnet_region = "us-west1"
    },
    {
      subnet_name           = "subnet-02"
      subnet_ip             = "10.10.20.0/24"
      subnet_region         = "us-west1"
      subnet_private_access = "true"
      subnet_flow_logs      = "true"
    },
    {
      subnet_name               = "subnet-03"
      subnet_ip                 = "10.10.30.0/24"
      subnet_region             = "us-west1"
      subnet_flow_logs          = "true"
      subnet_flow_logs_interval = "INTERVAL_10_MIN"
      subnet_flow_logs_sampling = 0.7
      subnet_flow_logs_metadata = "INCLUDE_ALL_METADATA"
      subnet_flow_logs_filter   = "false"
    }
  ]
}

如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令

为现有子网启用 VPC 流日志

控制台

  1. 在 Google Cloud 控制台中,进入 VPC 网络页面。

    进入 VPC 网络页面

  2. 点击要更新的子网。

  3. 点击修改

  4. 对于流日志,选择开启

  5. 如果要调整日志采样和汇总,请点击配置日志并调整以下任意项:

    • 汇总时间间隔
    • 是否在最终日志条目中包括元数据。默认情况下,包括元数据将包括所有字段。
    • 采样率100% 表示保留所有条目。
  6. 点击保存

gcloud

  1. 在 Google Cloud 控制台中,激活 Cloud Shell。

    激活 Cloud Shell

    Cloud Shell 会话随即会在 Google Cloud 控制台的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Google Cloud CLI 且已为当前项目设置值的 Shell 环境。该会话可能需要几秒钟时间来完成初始化。

  2. 运行以下命令:

    gcloud compute networks subnets update SUBNET_NAME \
       --enable-flow-logs \
       [--logging-aggregation-interval=AGGREGATION_INTERVAL] \
       [--logging-flow-sampling=SAMPLE_RATE] \
       [--logging-filter-expr=FILTER_EXPRESSION] \
       [--logging-metadata=LOGGING_METADATA] \
       [--logging-metadata-fields=METADATA_FIELDS] \
       [other flags as needed]
    

    替换以下内容:

    • AGGREGATION_INTERVAL:该子网中流日志的汇总时间间隔。该时间间隔可以设置为以下任何值:5 秒(默认)、30 秒、1 分钟、5 分钟、10 分钟或 15 分钟。
    • SAMPLE_RATE:流采样率。流采样的范围可以设置为从 0.0(不采样)到 1.0(所有日志)。默认值为 0.5
    • FILTER_EXPRESSION:定义要保留的日志的表达式。表达式的长度上限为 2,048 个字符。如需了解详情,请参阅日志过滤
    • LOGGING_METADATA:您希望包括在日志中的元数据注释

      • 使用 include-all 可包含所有元数据注解。
      • 使用 exclude-all 可以排除所有元数据注解(默认)。
      • 使用 custom 可以包括您在 METADATA_FIELDS 中指定的元数据字段的自定义列表。
    • METADATA_FIELDS:您希望包括在日志中的元数据字段的逗号分隔列表。例如 src_instance,dst_instance。只有当 LOGGING_METADATA 设置为 custom 时才能设置此项。

API

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

PATCH https://compute.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 控制台会为现有子网提供日志量估算,然后您可以使用该估算值来估算启用流日志的费用。估算值基于过去 7 天内按照 5 秒的时间间隔为子网捕获的流。此外,每个日志的大小都取决于您是否启用了元数据注释。

控制台

  1. 在 Google Cloud 控制台中,进入 VPC 网络页面。

    进入 VPC 网络页面

  2. 点击要为其估算费用的子网。

  3. 点击修改

  4. 对于流日志,选择开启

  5. 点击配置日志

  6. 查看估算的每日生成日志量,以了解估算值。

  7. 点击取消以免保存任何更改。

查看哪些子网启用了 VPC 流日志

您可以检查网络中的哪些子网启用了 VPC 流日志。

控制台

  1. 在 Google Cloud 控制台中,进入 VPC 网络页面。

    进入 VPC 网络页面

  2. 点击要查看子网的 VPC 网络。

  3. 点击子网标签页,查看流日志列,了解日志记录功能是处于开启还是关闭状态。

gcloud

  1. 在 Google Cloud 控制台中,激活 Cloud Shell。

    激活 Cloud Shell

    Cloud Shell 会话随即会在 Google Cloud 控制台的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Google Cloud CLI 且已为当前项目设置值的 Shell 环境。该会话可能需要几秒钟时间来完成初始化。

  2. 运行以下命令:

    gcloud compute networks subnets list \
       --project PROJECT_ID \
       --network="NETWORK" \
       --format="csv(name,region,logConfig.enable)"

    替换以下内容:

    • PROJECT_ID:您正在查询的项目的 ID。
    • NETWORK:子网所在网络的名称。

更新 VPC 流日志参数

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

如需自定义元数据字段或配置日志过滤,请使用 gcloud CLI 或 API。

控制台

  1. 在 Google Cloud 控制台中,进入 VPC 网络页面。

    进入 VPC 网络页面

  2. 点击要更新的子网。

  3. 点击修改

  4. 如果要调整日志采样和汇总,请点击配置日志并调整以下任意项:

    • 汇总时间间隔
    • 是否在最终日志条目中包括元数据。默认情况下,包括元数据将包括所有字段。
    • 采样率100% 表示保留所有条目。
  5. 点击保存

gcloud

  1. 在 Google Cloud 控制台中,激活 Cloud Shell。

    激活 Cloud Shell

    Cloud Shell 会话随即会在 Google Cloud 控制台的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Google Cloud CLI 且已为当前项目设置值的 Shell 环境。该会话可能需要几秒钟时间来完成初始化。

  2. 运行以下命令:

    gcloud compute networks subnets update SUBNET_NAME \
       [--logging-aggregation-interval=AGGREGATION_INTERVAL] \
       [--logging-flow-sampling=SAMPLE_RATE] \
       [--logging-filter-expr=FILTER_EXPRESSION] \
       [--logging-metadata=LOGGING_METADATA] \
       [--logging-metadata-fields=METADATA_FIELDS] \
    

    请替换以下内容:

    • AGGREGATION_INTERVAL:该子网中流日志的汇总时间间隔。该时间间隔可以设置为以下任何值:5 秒(默认)、30 秒、1 分钟、5 分钟、10 分钟或 15 分钟。
    • SAMPLE_RATE:流采样率。流采样的范围可以设置为从 0.0(不采样)到 1.0(所有日志)。默认值为 0.5
    • FILTER_EXPRESSION:定义要保留的日志的表达式。表达式的长度上限为 2,048 个字符。如需了解详情,请参阅日志过滤
    • LOGGING_METADATA:您希望包括在日志中的元数据注释

      • 使用 include-all 可包含所有元数据注解。
      • 使用 exclude-all 可以排除所有元数据注解(默认)。
      • 使用 custom 可以包括您在 METADATA_FIELDS 中指定的元数据字段的自定义列表。
    • METADATA_FIELDS:您希望包括在日志中的元数据字段的逗号分隔列表。例如 src_instance,dst_instance。只有当 LOGGING_METADATA 设置为 custom 时才能设置此项。

API

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

PATCH https://compute.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 控制台中,进入 VPC 网络页面。

    进入 VPC 网络页面

  2. 点击要更新的子网。

  3. 点击修改

  4. 对于流日志,选择关闭

  5. 点击保存

gcloud

  1. 在 Google Cloud 控制台中,激活 Cloud Shell。

    激活 Cloud Shell

    Cloud Shell 会话随即会在 Google Cloud 控制台的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Google Cloud CLI 且已为当前项目设置值的 Shell 环境。该会话可能需要几秒钟时间来完成初始化。

  2. 运行以下命令:

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

API

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

PATCH https://compute.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 方法。

问题排查

即使您启用了流日志,看似仍处于停用状态

  • 当您为内部应用负载均衡器配置代理专用子网并且使用 gcloud compute networks subnets 命令启用 VPC 流日志时,该命令看似执行成功,但流日志实际上并未启用。如果您还添加了 --purpose=INTERNAL_HTTPS_LOAD_BALANCER 标志,则 --enable-flow-logs 标志不会生效。

    使用 Google Cloud 控制台或 API 启用流日志时,您会看到错误消息:“字段 'resource.enableFlowLogs':'true' 的值无效。具有 INTERNAL_HTTPS_LOAD_BALANCER 用途的子网中设置的字段无效”。

    由于代理专用子网没有虚拟机,因此 VPC 流日志不受支持。这是预期行为。

后续步骤