访问流日志

本页面介绍了如何使用 Cloud Logging 访问流日志。

在 Logs Explorer 中访问流日志

VPC 流日志会将日志写入日志报告程序的 Google Cloud 项目。您可以在 Logs Explorer 中查看流日志。VPC 流日志使用以下日志来收集日志条目:

  • networkmanagement.googleapis.com/vpc_flows 日志会收集虚拟私有云 (VPC) 网络、子网、Cloud Interconnect 的 VLAN 连接和 Cloud VPN 隧道的日志条目。
  • compute.googleapis.com/vpc_flows 日志会收集子网的日志条目。只有在您使用 Compute Engine API 为子网启用了 VPC 流日志时,系统才会生成此日志。

配置 IAM

如需为日志记录配置访问权限控制,请参阅 Logging 的访问权限控制指南

使用资源过滤条件查看流日志

如需使用资源过滤条件查看 Google Cloud 项目中的流日志,请参阅以下部分。您还可以使用 Logs Explorer 查询查看这些日志,如使用查询过滤流日志中所述。

查看所有配置的流日志 (networkmanagement.googleapis.com/vpc_flows)

  1. 在 Google Cloud 控制台中,前往 Logs Explorer 页面。

    转到日志浏览器

  2. 点击所有资源

  3. 选择资源列表中,点击 VPC 流日志配置,然后点击应用

查看特定配置的流日志 (networkmanagement.googleapis.com/vpc_flows)

  1. 在 Google Cloud 控制台中,前往 Logs Explorer 页面。

    转到日志浏览器

  2. 点击所有资源

  3. 选择资源列表中,点击 VPC 流日志配置,然后选择要查看的 VPC 流日志配置。

  4. 点击应用

查看所有配置的流日志 (compute.googleapis.com/vpc_flows)

如果您使用 Compute Engine API 启用了 VPC 流日志,请按照以下步骤操作。

  1. 在 Google Cloud 控制台中,前往 Logs Explorer 页面。

    转到日志浏览器

  2. 点击所有资源

  3. 选择资源列表中,点击子网,然后点击应用

  4. 点击所有日志名称

  5. 选择日志名称列表中,找到 Compute Engine,点击 vpc_flows,然后点击应用

查看特定子网的流日志 (compute.googleapis.com/vpc_flows)

如果您使用 Compute Engine API 启用了 VPC 流日志,请按照以下步骤操作。

  1. 在 Google Cloud 控制台中,前往 Logs Explorer 页面。

    转到日志浏览器

  2. 点击所有资源

  3. 选择资源列表中,点击子网

  4. 子网 ID 列表中,选择子网,然后点击应用

  5. 点击所有日志名称

  6. 选择日志名称列表中,找到 Compute Engine,点击 vpc_flows,然后点击应用

使用查询过滤流日志

如需使用 Logs Explorer 查询查看 Google Cloud 项目中的流日志,请执行以下操作。

  1. 在 Google Cloud 控制台中,前往 Logs Explorer 页面。

    转到日志浏览器

  2. 如果您在查询窗格中没有看到查询编辑器字段,请点击显示查询切换开关。

  3. 在查询编辑器字段中,输入查询:

    • 例如,如需查看特定来源 Cloud VPN 隧道的流日志,请输入以下查询:

      resource.type="vpc_flow_logs_config"
      logName="projects/PROJECT_ID/logs/networkmanagement.googleapis.com%2Fvpc_flows"
      jsonPayload.reporter="SRC_GATEWAY"
      labels.target_resource_name="projects/PROJECT_NUMBER/regions/REGION/vpnTunnels/NAME"
      

      替换以下内容:

      • PROJECT_ID:Cloud VPN 隧道的 Google Cloud 项目 ID
      • PROJECT_NUMBER:Cloud VPN 隧道的项目编号
      • REGION:Cloud VPN 隧道所在的区域
      • NAME:Cloud VPN 隧道的名称
    • 如果您使用 Compute Engine API 为子网启用了 VPC 流日志,则查询必须以 compute.googleapis.com 为目标。例如,输入以下查询,将 PROJECT_ID 替换为您的 Google Cloud 项目 ID,并将 SUBNET_NAME 替换为您的子网:

      resource.type="gce_subnetwork"
      logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fvpc_flows"
      resource.labels.subnetwork_name="SUBNET_NAME"
      

      如需更多可运行以查看流日志的查询示例,请参阅针对 VPC 流日志的 Logs Explorer 查询示例

  4. 点击运行查询

针对 VPC 流日志的 Logs Explorer 查询示例

本部分提供了一些 Logs Explorer 查询示例,您可以运行这些查询来查看流日志。请在所有查询中包含以下信息:

  • 指定要查询的日志的资源类型和日志名称,如下表中所述。您可以在一次查询中同时查询这两个日志。

    日志 资源类型和日志名称
    networkmanagement.googleapis.com/vpc_flows

    收集由 Network Management API 管理的配置的日志。

    resource.type="vpc_flow_logs_config"
    logName="projects/PROJECT_ID/logs/networkmanagement.googleapis.com%2Fvpc_flows"
    
    compute.googleapis.com/vpc_flows

    收集由 Compute Engine API 管理的配置的日志。

    resource.type="gce_subnetwork"
    logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fvpc_flows"

    PROJECT_ID 替换为报告资源的 Google Cloud 项目 ID。

  • 如果您为每项资源使用多个 VPC 流日志配置,请通过向查询中添加 resource.labels.namelabels.target_resource_name 字段来指定要查询的配置的名称和目标资源。这样可确保从查询结果中排除重复的日志。 如需了解详情,请参阅重复日志

    • resource.labels.name 是配置的名称。您可以在每个查询中指定多个配置。
    • labels.target_resource_name 是报告的 VPC 网络、子网、VLAN 连接或 Cloud VPN 隧道的名称。组织的配置不会设置目标资源。
    • 这些字段仅在 networkmanagement.googleapis.com/vpc_flows 日志中提供。

下表提供了一些 Logs Explorer 查询示例,您可以使用这些查询来查看流日志。

您要查看的日志 查询
所有流日志
resource.type=("vpc_flow_logs_config" OR "gce_subnetwork")
logName=("projects/PROJECT_ID/logs/networkmanagement.googleapis.com%2Fvpc_flows" OR
"projects/PROJECT_ID/logs/compute.googleapis.com%2Fvpc_flows")
特定配置的日志
resource.type="vpc_flow_logs_config"
logName="projects/PROJECT_ID/logs/networkmanagement.googleapis.com%2Fvpc_flows"
resource.labels.name="CONFIG_NAME"
特定 VPC 网络中虚拟机实例的日志
resource.type=("vpc_flow_logs_config" OR "gce_subnetwork")
logName=("projects/PROJECT_ID/logs/networkmanagement.googleapis.com%2Fvpc_flows" OR
"projects/PROJECT_ID/logs/compute.googleapis.com%2Fvpc_flows")
(jsonPayload.src_vpc.vpc_name="NETWORK_NAME" OR
jsonPayload.dest_vpc.vpc_name="NETWORK_NAME")
特定子网中虚拟机实例的日志
resource.type=("vpc_flow_logs_config" OR "gce_subnetwork")
logName=("projects/PROJECT_ID/logs/networkmanagement.googleapis.com%2Fvpc_flows" OR
"projects/PROJECT_ID/logs/compute.googleapis.com%2Fvpc_flows")
(jsonPayload.src_vpc.subnetwork_name="SUBNET_NAME" OR
jsonPayload.dest_vpc.subnetwork_name="SUBNET_NAME")
特定虚拟机实例的日志
resource.type=("vpc_flow_logs_config" OR "gce_subnetwork")
logName=("projects/PROJECT_ID/logs/networkmanagement.googleapis.com%2Fvpc_flows" OR
"projects/PROJECT_ID/logs/compute.googleapis.com%2Fvpc_flows")
(jsonPayload.src_instance.vm_name="VM_NAME" OR
jsonPayload.dest_instance.vm_name="VM_NAME")
特定 Google Kubernetes Engine 集群的日志
resource.type=("vpc_flow_logs_config" OR "gce_subnetwork")
logName=("projects/PROJECT_ID/logs/networkmanagement.googleapis.com%2Fvpc_flows" OR
"projects/PROJECT_ID/logs/compute.googleapis.com%2Fvpc_flows")
(jsonPayload.src_gke_details.cluster.cluster_name="CLUSTER_NAME" OR
jsonPayload.dest_gke_details.cluster.cluster_name="CLUSTER_NAME")
仅来自子网的出站虚拟机流量的日志
resource.type=("vpc_flow_logs_config" OR "gce_subnetwork")
logName=("projects/PROJECT_ID/logs/networkmanagement.googleapis.com%2Fvpc_flows" OR
"projects/PROJECT_ID/logs/compute.googleapis.com%2Fvpc_flows")
jsonPayload.reporter="SRC" AND
jsonPayload.src_vpc.subnetwork_name="SUBNET_NAME" AND
(jsonPayload.dest_vpc.subnetwork_name!="SUBNET_NAME" OR NOT
jsonPayload.dest_vpc.subnetwork_name:*)
仅来自 VPC 网络的出站虚拟机流量的日志
resource.type=("vpc_flow_logs_config" OR "gce_subnetwork")
logName=("projects/PROJECT_ID/logs/networkmanagement.googleapis.com%2Fvpc_flows" OR
"projects/PROJECT_ID/logs/compute.googleapis.com%2Fvpc_flows")
jsonPayload.reporter="SRC" AND
jsonPayload.src_vpc.vpc_name="VPC_NAME" AND
(jsonPayload.dest_vpc.vpc_name!="VPC_NAME" OR NOT jsonPayload.dest_vpc:*)
流向特定子网范围的流量的日志
resource.type=("vpc_flow_logs_config" OR "gce_subnetwork")
logName=("projects/PROJECT_ID/logs/networkmanagement.googleapis.com%2Fvpc_flows" OR
"projects/PROJECT_ID/logs/compute.googleapis.com%2Fvpc_flows")
ip_in_net(jsonPayload.connection.dest_ip, "SUBNET_RANGE")
单个目标端口的日志
resource.type=("vpc_flow_logs_config" OR "gce_subnetwork")
logName=("projects/PROJECT_ID/logs/networkmanagement.googleapis.com%2Fvpc_flows" OR
"projects/PROJECT_ID/logs/compute.googleapis.com%2Fvpc_flows")
jsonPayload.connection.dest_port=PORT
jsonPayload.connection.protocol=PROTOCOL
多个目标端口的日志
resource.type=("vpc_flow_logs_config" OR "gce_subnetwork")
logName=("projects/PROJECT_ID/logs/networkmanagement.googleapis.com%2Fvpc_flows" OR
"projects/PROJECT_ID/logs/compute.googleapis.com%2Fvpc_flows")
jsonPayload.connection.dest_port=(PORT_1 OR PORT_2)
jsonPayload.connection.protocol=PROTOCOL
特定来源 Cloud VPN 隧道的日志
resource.type="vpc_flow_logs_config"
logName="projects/PROJECT_ID/logs/networkmanagement.googleapis.com%2Fvpc_flows"
jsonPayload.reporter="SRC_GATEWAY"
labels.target_resource_name="projects/PROJECT_NUMBER/regions/REGION/vpnTunnels/NAME"
所有目标 VLAN 连接的日志
resource.type="vpc_flow_logs_config"
logName="projects/PROJECT_ID/logs/networkmanagement.googleapis.com%2Fvpc_flows"
jsonPayload.reporter="DEST_GATEWAY"
jsonPayload.dest_gateway.type="INTERCONNECT_ATTACHMENT"
特定区域中所有目标 VLAN 连接的日志
resource.type="vpc_flow_logs_config"
logName="projects/PROJECT_ID/logs/networkmanagement.googleapis.com%2Fvpc_flows"
jsonPayload.reporter="DEST_GATEWAY"
jsonPayload.dest_gateway.type="INTERCONNECT_ATTACHMENT"
jsonPayload.dest_gateway.location="REGION"

替换以下内容:

  • PROJECT_ID:项目 ID
  • CONFIG_NAME:VPC 流日志配置的名称
  • SUBNET_NAME:子网的名称
  • VM_NAME:虚拟机的名称
  • SUBNET_RANGE:CIDR 范围,例如 192.168.1.0/24
  • CLUSTER_NAME:GKE 集群的名称
  • VPC_NAME:VPC 网络的名称
  • PORT_1PORT_2:目标端口
  • PROTOCOL:通信协议
  • PROJECT_NUMBER:Cloud VPN 隧道的项目编号
  • REGION:VLAN 连接或 Cloud VPN 隧道所在的区域
  • NAME:Cloud VPN 隧道的名称

将日志路由到 BigQuery、Pub/Sub 和自定义目标

您可以参照 Logging 文档中的路由和存储概览部分,将 Logging 中的流日志路由到您选择的目的地。请参阅上一节中的示例过滤条件。

问题排查

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

  • 确认给定子网已启用日志记录。
  • 只有 VPC 网络支持 VPC 流。 如果您使用的是旧版网络,则不会看到任何日志。
  • 共享 VPC 网络中,日志只会出现在宿主项目中,不会出现在服务项目中。请务必在宿主项目中查找日志。
  • Logging 排除过滤条件会屏蔽指定的日志。确保没有会舍弃 VPC 流日志的排除规则:
    1. 前往日志路由器
    2. 在日志记录存储桶对应的 更多操作菜单中,点击查看接收器详情
    3. 确保没有可能会舍弃 VPC 流日志的排除规则。
  • 使用 Google Cloud CLI 或 API 确定日志过滤配置是否过滤了给定子网中的所有流量。例如,如果 filterExpr 设置为 false,则不会看到任何日志。

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

  • 如果没有获取足够的数据包作为样本来捕获 RTT,RTT 测量结果可能会缺失。在低容量连接中发生这种情况的几率更高。
  • RTT 值仅适用于从虚拟机报告的 TCP 流。
  • 发送的某些数据包没有负载。如果抽样的是仅有标头的数据包,则字节值通常为零。如需了解详情,请参阅记录格式

某些流缺失

  • 入站数据包依照入站 VPC 防火墙规则进行采样。请确保没有任何入站流量防火墙规则会拒绝您希望记录的数据包。如果您不确定 VPC 防火墙规则是否会阻止入站数据包,可以启用防火墙规则日志记录并检查日志。
  • 仅支持 TCP、UDP、ICMP、ESP 和 GRE 协议。VPC 流日志不支持任何其他协议。
  • 对日志进行采样。某些数据包流的容量极小,可能会丢失。

某些日志中缺少 GKE 注释

确保您的 GKE 集群是受支持的版本

某些 GKE 流缺少日志

确保已在集群中启用了节点内可见性。否则,系统不会记录同一节点上两个 pod 之间的流。

重复日志

每个 VPC 流日志配置都会生成一组单独的日志。如果日志记录信息包含重复的日志,请检查报告资源是否与多个配置相关联。

如果您为每个资源创建多个配置,或者创建的多个配置的范围有重叠(如下表中所述),则资源会与多个配置相关联:

  • VPC 流日志已为组织配置,并且您还为组织或组织中任何项目的 VPC 网络、子网、VLAN 连接或 Cloud VPN 隧道进行了其他配置。

    默认情况下,组织的 VPC 流日志配置会为组织中所有子网、所有 VLAN 连接和所有 Cloud VPN 隧道中的所有虚拟机实例生成日志。如果您创建其他配置,则每个额外配置都会生成自己的日志集。

  • VPC 流日志是为 VPC 网络配置的,并且您在同一网络中为子网、VLAN 连接或 Cloud VPN 隧道进行了其他配置。

    默认情况下,VPC 网络的 VPC 流日志配置会为网络中所有子网、所有 VLAN 连接和所有 Cloud VPN 隧道中的所有虚拟机实例生成日志。如果您创建其他配置,则每个额外配置都会生成自己的日志集。

  • VPC 流日志是通过 Network Management API 和 Compute Engine API 为子网配置的。由 Compute Engine API 管理的子网 VPC 流日志配置,以及您使用 Network Management API 创建的每个适用配置(用于生成日志)。

如需详细了解每个 VPC 流日志配置范围记录哪些资源,请参阅支持的配置。 如需查看 VPC 流日志配置,请参阅查看 VPC 流日志配置(全部)

如需在查看日志时过滤掉重复日志,您可以使用以下字段:

  • 如需按日志名称过滤日志,请指定 resource_typelog_name 字段。
  • 如需按配置和目标资源名称过滤日志,请指定 resource.labels.namelabels.target_resource_name 字段。

如需详细了解这些字段以及如何使用它们,请参阅针对 VPC 流日志的 Logs Explorer 查询示例

后续步骤