配置 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. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  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. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  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. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  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. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  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. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  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 流日志不受支持。这是预期行为。

后续步骤