關於虛擬私有雲流量記錄檔
本頁說明 VPC 流量記錄格式,包括可用的基礎欄位和中繼資料欄位。並說明如何使用記錄檔篩選功能,只產生符合特定條件的記錄檔。
記錄格式
記錄包含做為每個記錄核心欄位的幾個基礎欄位,以及用來新增其他資訊的中繼資料欄位。您可能會省略中繼資料欄位,以節省儲存費用。
某些記錄欄位採用多欄位格式,也就是指定欄位會包含多項資料。舉例來說,connection
欄位採用的格式是 IpConnection
,也就是一個欄位同時包含來源和目的地 IP 位址及通訊埠,外加通訊協定等資料。記錄格式表下方說明這些多欄位格式的欄位。
中繼資料欄位的值並非根據資料平面路徑計算得出,而是近似值,可能會遺漏或不正確。與中繼資料欄位不同,基本欄位的值會直接取自封包標頭。
欄位 | 欄位格式 | 欄位類型:基本或選用中繼資料 |
---|---|---|
連結 |
IpConnection
5 元組,描述流程。 |
基本 |
reporter |
字串
回報流量的一端,可以是 SRC 、DEST 、SRC_GATEWAY 或 DEST_GATEWAY 。 |
基本 |
rtt_msec |
int64
在時間間隔內測得的延遲時間。這個欄位會填入以下內容:
測量的延遲時間是指從傳送 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 地端部署或其他雲端端點,且符合下列任一條件,這個欄位就會填入閘道詳細資料:
|
中繼資料 |
dest_gateway |
GatewayDetails
如果流量的目的地是透過閘道 (例如 Cloud Interconnect 的 VLAN 連結或 Cloud VPN 通道) 連線至 Google Cloud 地端部署或其他雲端端點,且符合下列任一條件,這個欄位就會填入閘道詳細資料:
|
中繼資料 |
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 執行個體詳細資料:
|
中繼資料 |
dest_instance |
InstanceDetails
如果流量的目的地是位於虛擬私有雲網路中的 VM,且符合下列任一條件,這個欄位就會填入 VM 執行個體詳細資料。
|
中繼資料 |
src_location |
GeographicDetails
如果流程來源是虛擬私有雲網路外的公用 IP 位址,這個欄位會填入可用的地點中繼資料。 |
中繼資料 |
dest_location |
GeographicDetails
如果流程的目的地位於虛擬私有雲網路之外,這個欄位會填入可用的地點中繼資料。 |
中繼資料 |
src_vpc |
VpcDetails
如果流量的來源是位於虛擬私有雲網路中的 VM,且符合下列任一條件,這個欄位就會填入虛擬私有雲網路的詳細資料:
|
中繼資料 |
dest_vpc |
VpcDetails
如果資料流的目的地位於虛擬私有雲網路中的 VM,且符合下列任一條件,這個欄位就會填入虛擬私有雲網路的詳細資料:
|
中繼資料 |
其他中繼資料欄位 | ||
internet_routing_details |
InternetRoutingDetails
如果流量是來自 Google Cloud 和網際網路之間,這個欄位就會填入路由詳細資料。僅適用於傳出流量。 |
中繼資料 |
load_balancing |
LoadBalancingDetails
如果流量會在下列任一設定中經過負載平衡器,這個欄位就會填入 Cloud Load Balancing 詳細資料:
|
中繼資料 |
network_service |
NetworkServiceDetails
如果設定區分服務代碼點 (DSCP) 標頭,這個欄位會填入網路服務詳細資料。 |
中繼資料 |
psc |
PrivateServiceConnectDetails
如果流量在下列任一組態中會經過 Private Service Connect,這個欄位就會填入 Private Service Connect 詳細資料:
|
中繼資料 |
rdma_traffic_type |
string
這個欄位會填入由 A3 Mega VM 回報的 RDMA 流量。類型設為 GPUDirect-TCPXO 。 |
中繼資料 |
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_ATTACHMENT 或 VPN_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 | 字串 |
頂層工作負載控制器的類型。可以是 DEPLOYMENT 、REPLICA_SET 、STATEFUL_SET 、DAEMON_SET 、JOB 、CRON_JOB 或 REPLICATION_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 報表工具。可以是 CLIENT 或 BACKEND 。
|
類型 | 字串 | 負載平衡器類型。可以是 APPLICATION_LOAD_BALANCER 、PROXY_NETWORK_LOAD_BALANCER 、PASSTHROUGH_NETWORK_LOAD_BALANCER 或 PROTOCOL_FORWARDING 。 |
配置 | 字串 | 負載平衡器架構。可以是 EXTERNAL_MANAGED 、INTERNAL_MANAGED 、EXTERNAL 、INTERNAL 或 INTERNAL_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_GROUP 、NETWORK_ENDPOINT_GROUP 或 TARGET_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 回報工具。可以是 CONSUMER 或 PRODUCER 。 |
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_APIS 或 PUBLISHED_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'"