访问流日志
本页面介绍了如何使用 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
)
在 Google Cloud 控制台中,前往 Logs Explorer 页面。
点击所有资源。
在选择资源列表中,点击 VPC 流日志配置,然后点击应用。
查看特定配置的流日志 (networkmanagement.googleapis.com/vpc_flows
)
在 Google Cloud 控制台中,前往 Logs Explorer 页面。
点击所有资源。
在选择资源列表中,点击 VPC 流日志配置,然后选择要查看的 VPC 流日志配置。
点击应用。
查看所有配置的流日志 (compute.googleapis.com/vpc_flows
)
如果您使用 Compute Engine API 启用了 VPC 流日志,请按照以下步骤操作。
在 Google Cloud 控制台中,前往 Logs Explorer 页面。
点击所有资源。
在选择资源列表中,点击子网,然后点击应用。
点击所有日志名称。
在选择日志名称列表中,找到 Compute Engine,点击 vpc_flows,然后点击应用。
查看特定子网的流日志 (compute.googleapis.com/vpc_flows
)
如果您使用 Compute Engine API 启用了 VPC 流日志,请按照以下步骤操作。
在 Google Cloud 控制台中,前往 Logs Explorer 页面。
点击所有资源。
在选择资源列表中,点击子网。
在子网 ID 列表中,选择子网,然后点击应用。
点击所有日志名称。
在选择日志名称列表中,找到 Compute Engine,点击 vpc_flows,然后点击应用。
使用查询过滤流日志
如需使用 Logs Explorer 查询查看 Google Cloud 项目中的流日志,请执行以下操作。
在 Google Cloud 控制台中,前往 Logs Explorer 页面。
如果您在查询窗格中没有看到查询编辑器字段,请点击显示查询切换开关。
在查询编辑器字段中,输入查询:
例如,如需查看特定来源 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 项目 IDPROJECT_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 查询示例。
点击运行查询。
针对 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.name
和labels.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
:项目 IDCONFIG_NAME
:VPC 流日志配置的名称SUBNET_NAME
:子网的名称VM_NAME
:虚拟机的名称SUBNET_RANGE
:CIDR 范围,例如192.168.1.0/24
CLUSTER_NAME
:GKE 集群的名称VPC_NAME
:VPC 网络的名称PORT_1
和PORT_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 流日志的排除规则:
- 前往日志路由器。
- 在日志记录存储桶对应的 更多操作菜单中,点击查看接收器详情。
- 确保没有可能会舍弃 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_type
和log_name
字段。 - 如需按配置和目标资源名称过滤日志,请指定
resource.labels.name
和labels.target_resource_name
字段。
如需详细了解这些字段以及如何使用它们,请参阅针对 VPC 流日志的 Logs Explorer 查询示例。
后续步骤
- 查看 Logging 文档
- 查看 Logging 接收器文档
- 在 Flow Analyzer 中分析流日志