關於虛擬私有雲流量記錄檔

本頁說明 VPC 流量記錄格式,包括可用的基礎欄位和中繼資料欄位。並說明如何使用記錄檔篩選功能,只產生符合特定條件的記錄檔。

記錄格式

記錄包含做為每個記錄核心欄位的幾個基礎欄位,以及用來新增其他資訊的中繼資料欄位。您可能會省略中繼資料欄位,以節省儲存費用。

某些記錄欄位採用多欄位格式,也就是指定欄位會包含多項資料。舉例來說,connection 欄位採用的格式是 IpConnection,也就是一個欄位同時包含來源和目的地 IP 位址及通訊埠,外加通訊協定等資料。記錄格式表下方說明這些多欄位格式的欄位。

中繼資料欄位的值並非根據資料平面路徑計算得出,而是近似值,可能會遺漏或不正確。與中繼資料欄位不同,基本欄位的值會直接取自封包標頭。

欄位 欄位格式 欄位類型:基本或選用中繼資料
連結 IpConnection
5 元組,描述流程。
基本
reporter 字串
回報流量的一端,可以是 SRCDESTSRC_GATEWAYDEST_GATEWAY
基本
rtt_msec int64
在時間間隔內測得的延遲時間。這個欄位會填入以下內容:
  • 針對 VM 回報的 TCP 流量填入。
  • 不會填入 VLAN 連結和 Cloud VPN 通道。

測量的延遲時間是指從傳送 SEQ 到收到對應 ACK 之間的時間。延遲結果是網路 RTT 和應用程式耗費的時間總和。

基本
bytes_sent int64
從來源傳送至目的地的位元組數。
基本
packets_sent int64
從來源傳送至目的地的封包數。
基本
start_time 字串
採用 RFC 3339 日期字串格式的時間戳記,標記了在匯總時間間隔內發現第一個封包的時間點。
基本
end_time 字串
採用 RFC 3339 日期字串格式的時間戳記,標記了在匯總時間間隔內發現最後一個封包的時間點。
基本
來源和目的地中繼資料欄位
src_gateway GatewayDetails
如果流量來源是透過閘道 (例如 Cloud Interconnect 的 VLAN 連結或 Cloud VPN 通道) 連線至 Google Cloud 地端部署或其他雲端端點,且符合下列任一條件,這個欄位就會填入閘道詳細資料:
  • 來源閘道是流程的回報者。
  • 流程的目的對象是檢舉者,且下列任一條件為真:
    • 來源閘道與流程的目的地位於相同專案。
    • 虛擬私有雲流量記錄是在組織層級設定,且不會停用跨專案註解。1
中繼資料
dest_gateway GatewayDetails
如果流量的目的地是透過閘道 (例如 Cloud Interconnect 的 VLAN 連結或 Cloud VPN 通道) 連線至 Google Cloud 地端部署或其他雲端端點,且符合下列任一條件,這個欄位就會填入閘道詳細資料:
  • 目的地閘道是流程的回報器。
  • 流程的來源是檢舉人,且符合下列任一情況:
    • 目的地閘道與流程的來源位於相同專案中。
    • 虛擬私有雲流量記錄是在組織層級設定,且不會停用跨專案註解。1
中繼資料
src_gke_details GkeDetails
如果流程來源是 Google Kubernetes Engine (GKE) 端點,這個欄位就會填入 GKE 端點詳細資料。
中繼資料
dest_gke_details GkeDetails
如果流量的目的地是 GKE 端點,這個欄位就會填入 GKE 端點詳細資料。
中繼資料
src_google_service GoogleServiceDetails
如果流量來源為 Google API,這個欄位會填入可用的 Google API 中繼資料。
中繼資料
dest_google_service GoogleServiceDetails
如果流量的目的地為 Google API,這個欄位會填入可用的 Google API 中繼資料。
中繼資料
src_instance InstanceDetails
如果流量的來源是位於虛擬私有雲網路中的 VM,且符合下列任一條件,這個欄位就會填入 VM 執行個體詳細資料:
  • 來源 VM 是流程的回報者。
  • 流程的目的對象是檢舉者,且下列任一條件為真:
    • 來源 VM 或來源 VM 附加的 VPC 網路,與流程的目的地位於相同專案中。
    • 虛擬私有雲流量記錄是在組織層級設定,且不會停用跨專案註解。1
中繼資料
dest_instance InstanceDetails
如果流量的目的地是位於虛擬私有雲網路中的 VM,且符合下列任一條件,這個欄位就會填入 VM 執行個體詳細資料。
  • 目的地 VM 是流程的回報者。
  • 流程的來源是檢舉人,且符合下列任一情況:
    • 目的地 VM 或目的地 VM 連結到的 VPC 網路,與流程來源位於相同專案中。
    • 虛擬私有雲流量記錄是在組織層級設定,且不會停用跨專案註解。1
中繼資料
src_location GeographicDetails
如果流程來源是虛擬私有雲網路外的公用 IP 位址,這個欄位會填入可用的地點中繼資料。
中繼資料
dest_location GeographicDetails
如果流程的目的地位於虛擬私有雲網路之外,這個欄位會填入可用的地點中繼資料。
中繼資料
src_vpc VpcDetails
如果流量的來源是位於虛擬私有雲網路中的 VM,且符合下列任一條件,這個欄位就會填入虛擬私有雲網路的詳細資料:
  • 來源 VM 是流程的回報者。
  • 流程的目的對象是檢舉者,且下列任一條件為真:
    • 來源 VM 或來源 VM 附加的 VPC 網路,與流程的目的地位於相同專案中。
    • 虛擬私有雲流量記錄是在組織層級設定,且不會停用跨專案註解。1
中繼資料
dest_vpc VpcDetails
如果資料流的目的地位於虛擬私有雲網路中的 VM,且符合下列任一條件,這個欄位就會填入虛擬私有雲網路的詳細資料:
  • 目的地 VM 是流程的回報者。
  • 流程的來源是檢舉人,且符合下列任一情況:
    • 目的地 VM 或目的地 VM 連結到的 VPC 網路,與流程來源位於相同專案中。
    • 虛擬私有雲流量記錄是在組織層級設定,且不會停用跨專案註解。1
中繼資料
其他中繼資料欄位
internet_routing_details InternetRoutingDetails
如果流量是來自 Google Cloud 和網際網路之間,這個欄位就會填入路由詳細資料。僅適用於傳出流量。
中繼資料
load_balancing LoadBalancingDetails
如果流量會在下列任一設定中經過負載平衡器,這個欄位就會填入 Cloud Load Balancing 詳細資料:
  • 流量的回報端是負載平衡器的用戶端,而負載平衡器類型則是 APPLICATION_LOAD_BALANCERPROXY_NETWORK_LOAD_BALANCERPASSTHROUGH_NETWORK_LOAD_BALANCERPROTOCOL_FORWARDING
  • 流量的回報端是負載平衡器的後端,而負載平衡器類型則為 PASSTHROUGH_NETWORK_LOAD_BALANCERPROTOCOL_FORWARDING
中繼資料
network_service NetworkServiceDetails
如果設定區分服務代碼點 (DSCP) 標頭,這個欄位會填入網路服務詳細資料。
中繼資料
psc PrivateServiceConnectDetails
如果流量在下列任一組態中會經過 Private Service Connect,這個欄位就會填入 Private Service Connect 詳細資料:
  • Private Service Connect 流量的報表提供者是使用者,且使用的是指定已發布服務或全球 Google API 的 Private Service Connect 端點。
  • Private Service Connect 流量的回報者是供應者,且使用內部直通式網路負載平衡器或內部通訊協定轉送。
中繼資料
rdma_traffic_type string
這個欄位會填入由 A3 Mega VM 回報的 RDMA 流量。類型設為 GPUDirect-TCPXO
中繼資料
1 如果在組織層級設定虛擬私有雲流程記錄,則跨專案流程的記錄記錄預設會包含流程兩端的詳細資料。跨專案註解可用於透過共用 VPC、VPC 網路對等互連和 Network Connectivity Center 的流程。詳情請參閱「跨專案註解」。

IpConnection 欄位格式

欄位 類型 說明
通訊協定 int32 IANA 通訊協定號碼 (RDMA 流量不會填入)
src_ip 字串 來源 IP 位址
dest_ip 字串 目的地 IP 位址
src_port int32 來源通訊埠 (針對 TCP 和 UDP 流量填入)
dest_port int32 目的地通訊埠 (適用於 TCP 和 UDP 流量)

GatewayDetails 欄位格式

欄位 類型 說明
project_id 字串 Google Cloud 閘道專案 ID
位置 字串 閘道所在區域
名稱 字串 閘道名稱
類型 字串 閘道類型。可以是 INTERCONNECT_ATTACHMENTVPN_TUNNEL
虛擬私人雲端 VpcDetails 閘道的 VPC 網路詳細資料
interconnect_name 字串 如果閘道類型為 INTERCONNECT_ATTACHMENT,這個欄位就會填入設定 VLAN 連結的 Cloud Interconnect 連線名稱。
interconnect_project_number int64 如果閘道類型為 INTERCONNECT_ATTACHMENT,這個欄位就會填入設定 VLAN 連結的 Cloud Interconnect 連線的 Google Cloud 專案編號。

GkeDetails 欄位格式

欄位 類型 說明
叢集 ClusterDetails GKE 叢集中繼資料
Pod PodDetails GKE Pod 中繼資料,當流量的來源或目的地為 Pod 時會填入
服務 ServiceDetails GKE 服務中繼資料,僅會填入至服務端點。這項記錄最多可包含兩項服務。如果相關服務超過兩項,這個欄位就會包含單一服務,並附上特殊的 MANY_SERVICES 標記。

ClusterDetails 欄位格式

欄位 類型 說明
cluster_location 字串 叢集位置。這可以是區域或區域,視叢集是區域性或區域性而定。
cluster_name 字串 GKE 叢集名稱。

PodDetails 欄位格式

欄位 類型 說明
pod_name 字串 Pod 名稱
pod_namespace 字串 Pod 的命名空間
pod_workload WorkloadDetails 控制 Pod 的頂層工作負載資源中繼資料
WorkloadDetails 欄位格式
欄位 類型 說明
workload_name 字串 頂層工作負載控制器的名稱
workload_type 字串 頂層工作負載控制器的類型。可以是 DEPLOYMENTREPLICA_SETSTATEFUL_SETDAEMON_SETJOBCRON_JOBREPLICATION_CONTROLLER

ServiceDetails 欄位格式

欄位 類型 說明
service_name 字串 服務名稱。如果相關服務超過兩個,欄位會設為特殊 MANY_SERVICES 標記。
service_namespace 字串 服務的命名空間

範例:

如果有兩項服務,服務欄位會如下所示:

service: [
 0: {
  service_name: "my-lb-service"
  service_namespace: "default"
 }
 1: {
  service_name: "my-lb-service2"
  service_namespace: "default"
 }
]

如果服務超過兩項,服務欄位會如下所示:

service: [
 0: {
  service_name: "MANY_SERVICES"
 }
]

GoogleServiceDetails 欄位格式

欄位 類型 說明
類型 字串 這個欄位設為 GOOGLE_API

InstanceDetails 欄位格式

欄位 類型 說明
project_id 字串 包含 VM 資源的 Google Cloud 專案 ID
區域 字串 VM 地區
vm_name 字串 VM 的執行個體名稱
可用區 字串 VM 區域
managed_instance_group InstanceGroupDetails 如果 VM 是代管執行個體群組的一部分,這個欄位就會填入執行個體群組詳細資料。

InstanceGroupDetails 欄位格式

欄位 類型 說明
名稱 字串 執行個體群組名稱
區域 字串 如果執行個體群組是地區執行個體群組,這個欄位會填入執行個體群組的所在地區。
可用區 字串 如果執行個體群組是區域執行個體群組,這個欄位會填入執行個體群組的區域。

GeographicDetails 欄位格式

欄位 類型 說明
asn int32 這個端點所屬外部網路的 ASN。
city 字串 外部端點所在的城市
continent 字串 外部端點所在的洲別
country 字串 外部端點的國家/地區,以 ISO 3166-1 Alpha-3 國家/地區代碼表示
區域 字串 外部端點所在的地區

VpcDetails 欄位格式

欄位 類型 說明
project_id 字串 包含虛擬私有雲的 Google Cloud 專案 ID。在共用虛擬私有雲設定中,project_id 是主專案的 ID。
subnetwork_name 字串 子網路名稱 (如適用)
subnetwork_region 字串 子網路的區域 (如適用)
vpc_name 字串 聯播網名稱

InternetRoutingDetails 欄位格式

欄位 類型 說明
egress_as_path AsPath 相關 AS 路徑清單。如果流程可使用多個 AS 路徑,這個欄位可能會包含多個 AS 路徑。

AsPath 欄位格式

欄位 類型 說明
as_details AsDetails AS 路徑中所有系統的 AS 詳細資料清單。清單會從 Google Cloud網路外部的第一個 AS 開始,並以遠端 IP 位址所屬的 AS 結束。

AsDetails 欄位格式

欄位 類型 說明
asn uint32 AS 的自治系統編號 (ASN)

LoadBalancingDetails 欄位格式

欄位 類型 說明
forwarding_rule_project_id 字串 Google Cloud 轉送規則的專案 ID
reporter 字串 Cloud Load Balancing 報表工具。可以是 CLIENTBACKEND
  • 如果流量的回報端是負載平衡器的用戶端,這個欄位就會設為 CLIENT
  • 如果流量的回報端是負載平衡器的後端,這個欄位就會設為 BACKEND
類型 字串 負載平衡器類型。可以是 APPLICATION_LOAD_BALANCERPROXY_NETWORK_LOAD_BALANCERPASSTHROUGH_NETWORK_LOAD_BALANCERPROTOCOL_FORWARDING
配置 字串 負載平衡器架構。可以是 EXTERNAL_MANAGEDINTERNAL_MANAGEDEXTERNALINTERNALINTERNAL_SELF_MANAGED
url_map_name 字串 網址對應的名稱。如果負載平衡器的類型為 APPLICATION_LOAD_BALANCER,就會填入這個值。
forwarding_rule_name 字串 轉送規則名稱
backend_service_name 字串 後端服務的名稱。如果回報端為 BACKEND,且負載平衡器類型為 PASSTHROUGH_NETWORK_LOAD_BALANCER,就會填入這個欄位。如果後端群組類型為 TARGET_POOL,這個欄位就不會填入資料。
backend_group_name 字串 後端群組的名稱。如果回報端為 BACKEND,且負載平衡器類型為 PASSTHROUGH_NETWORK_LOAD_BALANCER,就會填入這個值。
backend_group_type 字串 後端群組的類型。可以是 INSTANCE_GROUPNETWORK_ENDPOINT_GROUPTARGET_POOL。如果回報端為 BACKEND,且負載平衡器類型為 PASSTHROUGH_NETWORK_LOAD_BALANCER,就會填入這個值。
backend_group_location 字串 後端群組的位置。視後端群組的範圍而定,可以是區域或地區。如果回報端為 BACKEND,且負載平衡器類型為 PASSTHROUGH_NETWORK_LOAD_BALANCER,就會填入這個欄位。如果後端群組類型為 TARGET_POOL,這個欄位就不會填入資料。
虛擬私人雲端 VpcDetails 負載平衡器的 VPC 網路詳細資料

NetworkServiceDetails 欄位格式

欄位 類型 說明
dscp int32 如果封包標頭有 Differentiated Services 欄位,這個欄位會填入 DSCP 值。

PrivateServiceConnectDetails 欄位格式

欄位 類型 說明
reporter 字串 Private Service Connect 回報工具。可以是 CONSUMERPRODUCER
psc_endpoint PrivateServiceConnectEndpointDetails 端點詳細資料。如果檢舉者為 CONSUMER,則會填入這個值。
psc_attachment PrivateServiceConnectAttachmentDetails 服務連結詳細資料。如果流量流程中包含 Private Service Connect 供應者,就會填入這個值。

PrivateServiceConnectEndpointDetails 欄位格式

欄位 類型 說明
project_id 字串 Google Cloud Private Service Connect 端點的專案 ID
區域 字串 端點的區域。如果目標服務類型為 GLOBAL_GOOGLE_APIS,則不會填入。
psc_connection_id 字串 Private Service Connect 連線 ID
target_service_type 字串 目標服務類型。可以是 GLOBAL_GOOGLE_APISPUBLISHED_SERVICE
虛擬私人雲端 VpcDetails Private Service Connect 端點的 VPC 網路詳細資料

PrivateServiceConnectAttachmentDetails 欄位格式

欄位 類型 說明
project_id 字串 Google Cloud 服務附件專案 ID
區域 字串 服務連結的區域
虛擬私人雲端 VpcDetails 服務附加元件的 VPC 網路詳細資料

中繼資料註解

記錄包含基礎欄位和中繼資料欄位。「記錄格式」部分會列出哪些欄位是類型中繼資料,哪些是類型基礎。系統一律會納入所有基本欄位。您可以自訂要保留的中繼資料欄位。

  • 如果您選取所有中繼資料,流程記錄就會包含虛擬私有雲流量記錄格式的所有中繼資料欄位。將新的中繼資料欄位新增至記錄格式時,流程記錄會自動納入新欄位。

  • 如果未選取任何中繼資料,系統會略過所有中繼資料欄位。

  • 如果您選取自訂中繼資料,可以透過父項欄位 (例如 src_vpc) 或完整名稱 (例如 src_vpc.project_id) 指定要納入的中繼資料欄位。

    當新的中繼資料欄位新增至記錄格式時,系統會將這些欄位排除在流程記錄檔外,除非這些欄位位於您指定要納入的父項欄位中。

    • 如果您使用父項欄位指定自訂中繼資料,當新的中繼資料欄位新增至該父項欄位的記錄格式時,流程記錄會自動納入這些新欄位。

    • 如果您使用欄位的完整名稱指定自訂中繼資料,系統就會將新增至父項欄位的中繼資料欄位排除在流程記錄中。

如要瞭解如何自訂中繼資料欄位,請參閱「啟用虛擬私有雲流量記錄」或「更新虛擬私有雲流量記錄設定」。

GKE 中繼資料註解

在 GKE 叢集中有端點的流程可以加上 GKE 中繼資料註解,其中可包含端點的叢集、Pod 和 Service 詳細資料。

GKE 服務註解

傳送至 ClusterIP、NodePort 或 LoadBalancer 的流量可接收服務註解。如果傳送至 NodePort 或 LoadBalancer,流程會在連線的兩個中繼上接收 Service 註解。

直接傳送至 Pod 服務通訊埠的流量,會在目的端點上加上服務註解。

傳送至 Pod 服務通訊埠的流量,如果 Pod 在同一個服務通訊埠上支援多個服務,則會在目的地端點上標註多個服務。這項功能僅限於兩項服務。如果超過這個數量,端點會加上特殊的 MANY_SERVICES 標記。

網路流量中的 Pod 註解

根據預設,Pod 和網際網路之間的流量不會收到 Pod 註解。對於傳送至網際網路的封包,虛擬私有雲流量記錄無法新增 Pod 註解,因為在 VPC 流量記錄看到封包之前,偽裝代理程式會將 Pod IP 位址轉譯為節點 IP 位址。

由於有偽裝功能,只有在目的地位於預設的非偽裝目的地自訂 nonMasqueradeCIDRs 清單中時,Pod 註解才會顯示。如果您在自訂 nonMasqueradeCIDRs 清單中加入網際網路目的地,就必須提供一種方式,讓內部 Pod IP 位址在傳送至網際網路前先進行轉譯。您可以使用 Cloud NAT 來設定私人和非私人叢集。詳情請參閱「GKE 互動」。

跨專案註解

如果在組織層級啟用虛擬私有雲流量記錄,透過共用 VPC、虛擬私有雲網路對等互連和網路連線中心的流量會加上跨專案註解。跨專案註解預設為啟用。您可以選擇停用這些註解。

  • 如果啟用跨專案註解,不同專案中資源之間的流量記錄記錄會包含流量兩端的資訊
  • 如果跨專案註解已停用,記錄檔只會包含流程回報工具的相關資訊。

如果在專案層級啟用虛擬私有雲流程記錄,不同專案中資源之間的流程就不會加上跨專案註解。

記錄篩選

啟用 VPC 流量記錄後,您可以根據基礎和中繼資料欄位設定篩選器,只保留符合篩選條件的記錄。所有其他記錄都會在寫入 Logging 前遭到捨棄。

您可以篩選「記錄格式」中列出的任何子集欄位,但下列欄位除外:

  • rtt_msec
  • bytes_sent
  • packets_sent
  • start_time
  • end_time

虛擬私有雲流量記錄檔篩選功能使用 CEL,這是一種以屬性為基礎的邏輯運算式嵌入式運算式語言。虛擬私有雲流量記錄的篩選運算式長度上限為 2,048 個半形字元。詳情請參閱「支援的 CEL 邏輯運算子」。

如要進一步瞭解 CEL,請參閱 CEL 簡介語言定義。產生篩選器功能支援的 CEL 語法子集有限。

如要建立使用記錄篩選功能的虛擬私有雲流量記錄設定,請參閱「啟用虛擬私有雲流量記錄」。如要為現有的虛擬私有雲流量記錄設定記錄篩選條件,請參閱「更新虛擬私有雲流量記錄設定」。

支援的 CEL 邏輯運算子

運算式 支援的類型 說明
true/false 布林值 布林常數

x == y

x != y

布林值、整數、字串

比較運算子

範例:connection.protocol == 6

x && y

x || y

布林值

布林邏輯運算子

範例:connection.protocol == 6 && src_instance.vm_name == "vm_1"

!x 布林值 否定
1、2.0、0、... 整數值 常數數字常值
x + y 字串 字串串連
"foo", 'foo', ... 字串 常數字串常值
x.lower() 字串 傳回字串的小寫值
x.upper() 字串 傳回字串的大寫值
x.contains(y) 字串 如果字串包含指定的子字串,則傳回「是」
x.startsWith(y) 字串 如果字串開頭為指定的子字串,則傳回 true
x.endsWith(y) 字串 如果字串結尾為指定的子字串,則傳回 true
inIpRange(X, Y) 字串

如果 X 是 IP,而 Y 是包含 X 的 IP 範圍,則傳回 true

範例:inIpRange("1.2.3.1", "1.2.3.0/24")

x.containsFieldValue(y) x:清單
y:map(string, string)

如果清單包含具有與指定鍵/值組合相符欄位的物件,則傳回「是」

範例:dest_gke_details.service.containsFieldValue({'service_name': 'service1', 'service_namespace': 'namespace1'})

has(x) 字串

如果欄位存在,則傳回「是」。

記錄檔篩選器範例

如果您使用 Compute Engine API 為子網路啟用虛擬私有雲流量記錄,請使用 gcloud compute networks subnets update 指令設定篩選條件 (範例 1 至 3)。

如要設定其他虛擬私有雲流量記錄,請使用 gcloud network-management vpc-flow-logs-configs update 指令 (範例 4 至 6)。範例 1 至 3 中的篩選運算式可搭配 gcloud network-management vpc-flow-logs-configs update 指令使用。

範例 1:將記錄收集作業限制在名為 my-vm 的特定 VM 上。在這種情況下,只有在流量來源回報的 src_instance 欄位為 my-vm,或流量目的地回報的 dst_instance 欄位為 my-vm 時,系統才會記錄記錄。

gcloud compute networks subnets update my-subnet \
    --logging-filter-expr="(src_instance.vm_name == 'my-vm' && reporter=='SRC') || (dest_instance.vm_name == 'my-vm' && reporter=='DEST')"

範例 2:將記錄收集限制在來源 IP 位址位於 10.0.0.0/8 子網路的封包。

gcloud compute networks subnets update my-subnet \
    --logging-filter-expr="inIpRange(connection.src_ip, '10.0.0.0/8')"

範例 3:將記錄收集作業限制在虛擬私有雲網路外部的流量。

gcloud compute networks subnets update my-subnet \
    --logging-filter-expr '!(has(src_vpc.vpc_name) && has(dest_vpc.vpc_name))'

範例 4:將記錄收集範圍限制在特定目的地 VLAN 連結或 Cloud VPN 通道 my-gateway 中。

gcloud network-management vpc-flow-logs-configs update my-config \
    --location=global \
    --filter-expr="dest_gateway.name == 'my-gateway'"

範例 5:將記錄收集範圍限制為 VLAN 連結。

gcloud network-management vpc-flow-logs-configs update my-config \
    --location=global \
    --filter-expr="dest_gateway.type == 'INTERCONNECT_ATTACHMENT'"

範例 6:將記錄收集範圍限制在特定來源虛擬私有雲網路 my-network

gcloud beta network-management vpc-flow-logs-configs update my-config \
    --location=global \
    --filter-expr="src_vpc.vpc_name == 'my-network'"

後續步驟