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