访问流日志

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

在 Logs Explorer 中访问流日志

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

  • compute.googleapis.com/vpc_flows 日志会收集子网的日志条目。如果您使用 Compute Engine API 启用了 VPC 流日志,请查看此日志。
  • 对于所有其他 VPC 流日志配置,请查看 networkmanagement.googleapis.com/vpc_flows 日志。此日志会收集虚拟私有云 (VPC) 网络(预览版)、子网(预览版)、Cloud Interconnect 的 VLAN 连接和 Cloud VPN 隧道的日志条目。

配置 IAM

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

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

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

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

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

    转到日志浏览器

  2. 点击所有资源

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

  4. 点击所有日志名称

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

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

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

    转到日志浏览器

  2. 点击所有资源

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

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

  5. 点击所有日志名称

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

查看所有资源的流日志 (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. 点击应用

使用查询过滤流日志

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

    转到日志浏览器

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

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

    • 如果您使用 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"
      
    • 对于所有其他查询,查询必须以 networkmanagement.googleapis.com 为目标。例如,如需查看特定来源 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_ID/regions/REGION/vpnTunnels/NAME"
      

      替换以下内容:

      • PROJECT_ID: Google Cloud 项目 ID
      • REGION:Cloud VPN 隧道所在的区域
      • NAME:Cloud VPN 隧道的名称

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

  4. 点击运行查询

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

下表提供了一些 Logs Explorer 查询示例,您可以运行这些查询来查看 Google Cloud 项目中的流日志。

“针对 networkmanagement.googleapis.com/vpc_flows 的查询”部分中的示例假定每个资源都由单个 VPC 流日志配置记录。如果您为每项资源使用多个 VPC 流日志配置,请指定要查询的配置,以便从查询结果中排除重复日志。您还可以在查询中指定多个配置。

您要查看的日志 查询
所有流日志
resource.type=("gce_subnetwork" OR "vpc_flow_logs_config")
logName=("projects/PROJECT_ID/logs/compute.googleapis.com%2Fvpc_flows" OR
"projects/PROJECT_ID/logs/networkmanagement.googleapis.com%2Fvpc_flows")
查询 compute.googleapis.com/vpc_flows 日志
所有子网的日志
resource.type="gce_subnetwork"
logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fvpc_flows"
特定子网的日志
resource.type="gce_subnetwork"
logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fvpc_flows"
resource.labels.subnetwork_name="SUBNET_NAME"
特定虚拟机 (VM) 实例的日志
resource.type="gce_subnetwork"
logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fvpc_flows"
(jsonPayload.src_instance.vm_name="VM_NAME" OR
jsonPayload.dest_instance.vm_name="VM_NAME")
流向特定子网范围的流量的日志
resource.type="gce_subnetwork"
logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fvpc_flows"
ip_in_net(jsonPayload.connection.dest_ip, SUBNET_RANGE)
特定 Google Kubernetes Engine (GKE) 集群的日志
resource.type="gce_subnetwork"
logName="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="gce_subnetwork"
logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fvpc_flows" AND
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="gce_subnetwork"
logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fvpc_flows" AND
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="gce_subnetwork"
logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fvpc_flows"
jsonPayload.connection.dest_port=PORT
jsonPayload.connection.protocol=PROTOCOL
多个目标端口的日志
resource.type="gce_subnetwork"
logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fvpc_flows"
jsonPayload.connection.dest_port=(PORT1 OR PORT2)
jsonPayload.connection.protocol=PROTOCOL
查询 networkmanagement.googleapis.com/vpc_flows 日志
所有 VPC 流日志配置的日志
resource.type="vpc_flow_logs_config"
logName="projects/PROJECT_ID/logs/networkmanagement.googleapis.com%2Fvpc_flows"
特定 VPC 流日志配置的日志
resource.type="vpc_flow_logs_config"
logName="projects/PROJECT_ID/logs/networkmanagement.googleapis.com%2Fvpc_flows"
resource.labels.name="CONFIG_NAME"
特定来源 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_ID/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
  • SUBNET_NAME:子网的名称
  • VM_NAME:虚拟机的名称
  • SUBNET_RANGE:CIDR 范围,例如 192.168.1.0/24
  • CLUSTER_NAME:GKE 集群的名称
  • VPC_NAME:VPC 网络的名称
  • PORT1PORT2:目标端口
  • PROTOCOL:通信协议
  • CONFIG_NAME:VPC 流日志配置的名称
  • 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 流。
  • 发送的某些数据包没有负载。如果抽样的是仅有标头的数据包,则字节值为 0。

某些流缺失

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

某些日志中缺少 GKE 注释

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

某些 GKE 流缺少日志

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

后续步骤