VPC フローログのレコードについて

このページでは、使用可能な基本フィールドとメタデータ フィールドなど、VPC フローログのレコード形式について説明します。また、ログフィルタを使用して、特定の条件に一致するログのみが生成されるようにする方法についても説明します。

レコードの形式

ログレコードには、各ログレコードのコアフィールドである基本フィールドと、詳細情報を追加するメタデータ フィールドが含まれています。メタデータ フィールドは、ストレージ費用を節約するために省略できます。

一部のログフィールドはマルチ フィールド形式であり、1 つのフィールドに複数のデータが含まれます。たとえば、connection フィールドは IpConnection 形式で、送信元と宛先の IP アドレスとポート、およびプロトコルが 1 つのフィールドに格納されます。これらのマルチフィールド形式のフィールドについては、レコードの形式に関する表の後に情報が提供されています。

メタデータ フィールドの値はデータプレーン パスに基づくものではなく近似値であるため、存在しない可能性や、不正確な可能性もあります。メタデータ フィールドとは異なり、基本フィールドの値はパケット ヘッダーから直接取得されます。

フィールド フィールドの形式 フィールド タイプ: 基本 / メタデータ(省略可)
connection IpConnection
フローを記述する 5 タプル。
基本
reporter 文字列
フローを報告した側。SRCDESTSRC_GATEWAYDEST_GATEWAY のいずれか。
基本
rtt_msec int64
一定期間に測定されたレイテンシ。このフィールドは、VM から報告された TCP トラフィックでのみ使用できます。測定されたレイテンシは、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 に接続されているオンプレミスまたはその他のクラウド エンドポイントで、次のいずれかの条件を満たしている場合、このフィールドにはゲートウェイの詳細が入力されます。
  • 送信元ゲートウェイがフローのレポーターである。
  • フローの宛先がレポーターであり、VPC フローログがフローの宛先のログを報告する Google Cloud プロジェクト内に、送信元ゲートウェイが接続されている VPC ネットワークが存在する。
メタデータ
dest_gateway GatewayDetails
フローの宛先が、Cloud Interconnect の VLAN アタッチメントや Cloud VPN トンネルなどのゲートウェイを介して Google Cloud に接続されているオンプレミスまたは他のクラウド エンドポイントで、次の条件を満たしている場合、このフィールドにはゲートウェイの詳細が入力されます。
  • 宛先ゲートウェイがフローのレポーターである。
  • フローの送信元がレポーターで、VPC フローログがフローのソースのログを報告する Google Cloud プロジェクト内に、宛先ゲートウェイが接続されている VPC ネットワークが存在する。
メタデータ
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
フローの送信元が VPC ネットワーク内の VM で、次のいずれかの条件を満たしている場合、このフィールドには VM インスタンスの詳細が入力されます。
  • 送信元 VM がフローのレポーターである。
  • フローの宛先がレポート作成者であり、VPC フローログがフローの宛先のログレポートを送信する Google Cloud プロジェクト内に、送信元 VM または送信元 VM が接続されている VPC ネットワークが存在する。
メタデータ
dest_instance InstanceDetails
フローの宛先が VPC ネットワーク内の VM であり、次のいずれかの条件を満たしている場合、このフィールドには VM インスタンスの詳細が入力されます。
  • 宛先 VM がフローのレポーターである。
  • フローの送信元がレポーターであり、VPC フローログがフローのソースのログを報告する Google Cloud プロジェクト内に、宛先 VM または宛先 VM が接続されている VPC ネットワークが存在する。
メタデータ
src_location GeographicDetails
フローの送信元が VPC ネットワークの外部にあるパブリック IP アドレスの場合、このフィールドには使用可能なロケーション メタデータが入力されます。
メタデータ
dest_location GeographicDetails
フローの宛先が VPC ネットワークの外部にあるパブリック IP アドレスの場合、このフィールドには使用可能なロケーション メタデータが入力されます。
メタデータ
src_vpc VpcDetails
フローの送信元が VPC ネットワーク内の VM であり、次のいずれかの条件を満たしている場合、このフィールドには VPC ネットワークの詳細が入力されます。
  • 送信元 VM がフローのレポーターである。
  • フローの宛先がレポーターであり、VPC フローログがフローの宛先のログに報告する Google Cloud プロジェクトに、送信元 VM または送信元 VM が接続されている VPC ネットワークが存在する。
メタデータ
dest_vpc VpcDetails
フローの宛先が VPC ネットワーク内の VM であり、次のいずれかの条件を満たしている場合、このフィールドには VPC ネットワークの詳細が入力されます。
  • 宛先 VM がフローのレポーターである。
  • フローの送信元がレポーターであり、VPC フローログがフローのソースのログを報告する Google Cloud プロジェクト内に、宛先 VM または宛先 VM が接続されている VPC ネットワークが存在する。
メタデータ
その他のメタデータ フィールド
internet_routing_details InternetRoutingDetails
フローが Google Cloud とインターネットの間である場合、このフィールドにはルーティングの詳細が入力されます。下り(外向き)フローの場合にのみ使用できます。
メタデータ
load_balancing LoadBalancingDetails
フローが次のいずれかの構成でロードバランサを通過する場合、このフィールドには Cloud Load Balancing の詳細が入力されます。
  • フローのレポーターがロードバランサのクライアントで、ロードバランサの種類が APPLICATION_LOAD_BALANCERPROXY_NETWORK_LOAD_BALANCERPASSTHROUGH_NETWORK_LOAD_BALANCER、または PROTOCOL_FORWARDING
  • フローのレポーターがロードバランサのバックエンドで、ロードバランサの種類が PASSTHROUGH_NETWORK_LOAD_BALANCER または PROTOCOL_FORWARDING
メタデータ
network_service NetworkServiceDetails
Differentiated Services Code Point(DSCP)ヘッダーが設定されている場合、このフィールドには、ネットワーク サービスの詳細が入力されます。
メタデータ
psc PrivateServiceConnectDetails
次のいずれかの構成でフローが Private Service Connect を通過する場合、このフィールドには Private Service Connect の詳細が入力されます。
  • Private Service Connect トラフィックのレポーターがコンシューマーで、公開サービスまたはグローバル Google API をターゲットとする Private Service Connect エンドポイントを使用している。
  • Private Service Connect トラフィックのレポーターがプロデューサーで、内部パススルー ネットワーク ロードバランサまたは内部プロトコル転送を使用している。
メタデータ

IpConnection フィールドの形式

フィールド タイプ 説明
protocol int32 IANA プロトコル番号
src_ip 文字列 送信元 IP アドレス
dest_ip 文字列 宛先 IP アドレス
src_port int32 送信元ポート
dest_port int32 宛先ポート

GatewayDetails フィールドの形式

フィールド タイプ 説明
project_id 文字列 ゲートウェイの Google Cloud プロジェクト ID
location 文字列 ゲートウェイのリージョン
name 文字列 ゲートウェイの名前
type 文字列 ゲートウェイのタイプ。INTERCONNECT_ATTACHMENT または VPN_TUNNEL のいずれか。
vpc VpcDetails ゲートウェイの VPC ネットワークの詳細

GkeDetails フィールドの形式

フィールド タイプ 説明
クラスタ ClusterDetails GKE クラスタ メタデータ。
Pod PodDetails トラフィックの送信元または宛先が Pod である場合に入力される GKE Pod のメタデータ。
サービス ServiceDetails Service エンドポイントにのみ入力される GKE Service メタデータ。レコードには最大 2 つの Service が含まれます。関連する Service が 3 つ以上ある場合、このフィールドには特別な MANY_SERVICES マーカーを持つ 1 つの Service が含まれます。

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_JOB、または REPLICATION_CONTROLLER のいずれか。

ServiceDetails フィールドの形式

フィールド タイプ 説明
service_name 文字列 Service の名前。関連する Service が 3 つ以上ある場合、フィールドは特別な MANY_SERVICES マーカーに設定されます。
service_namespace 文字列 Service の名前空間。

例:

2 つのサービスがある場合、[Service] フィールドは次のようになります。

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

3 つ以上のサービスがある場合、[Service] フィールドは次のようになります。

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

GoogleServiceDetails フィールドの形式

フィールド タイプ 説明
type 文字列 このフィールドは GOOGLE_API に設定されています。

InstanceDetails フィールドの形式

フィールド タイプ 説明
project_id 文字列 VM リソースを含む Google Cloud プロジェクトの ID
region 文字列 VM のリージョン
vm_name 文字列 VM のインスタンス名
zone 文字列 VM のゾーン

GeographicDetails フィールドの形式

フィールド タイプ 説明
asn int32 このエンドポイントが属する外部ネットワークの ASN
city 文字列 外部エンドポイントの都市
continent 文字列 外部エンドポイントの大陸
country 文字列 外部エンドポイントの国で、ISO 3166-1 Alpha-3 の国コードにより表されます。
region 文字列 外部エンドポイントのリージョン

VpcDetails フィールドの形式

フィールド タイプ 説明
project_id 文字列 VPC を含む Google Cloud プロジェクトの ID。共有 VPC 構成では、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 に設定されます。
type 文字列 ロードバランサの種類。APPLICATION_LOAD_BALANCERPROXY_NETWORK_LOAD_BALANCERPASSTHROUGH_NETWORK_LOAD_BALANCER、または PROTOCOL_FORWARDING のいずれか。
scheme 文字列 ロードバランサ スキーム。EXTERNAL_MANAGEDINTERNAL_MANAGEDEXTERNALINTERNALINTERNAL_SELF_MANAGED のいずれか。
url_map_name 文字列 URL マップの名前。ロードバランサの種類が 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 の場合、このフィールドは入力されません。
vpc 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 文字列 Private Service Connect エンドポイントの Google Cloud プロジェクト ID
region 文字列 エンドポイントのリージョン。ターゲット サービスタイプが GLOBAL_GOOGLE_APIS の場合は入力されません。
psc_connection_id 文字列 Private Service Connect 接続 ID
target_service_type 文字列 ターゲット サービスタイプ。GLOBAL_GOOGLE_APISPUBLISHED_SERVICE のいずれかになります。
vpc VpcDetails Private Service Connect エンドポイントの VPC ネットワークの詳細

PrivateServiceConnectAttachmentDetails フィールドの形式

フィールド タイプ 説明
project_id 文字列 サービス アタッチメントの Google Cloud プロジェクト ID
region 文字列 サービス アタッチメントのリージョン
vpc VpcDetails サービス アタッチメントの VPC ネットワークの詳細

メタデータ アノテーション

ログレコードには、基本フィールドとメタデータ フィールドが含まれます。レコード形式セクションには、フィールドの種類(メタデータか基本か)が記載されています。すべての基本フィールドが常に含まれます。保持するメタデータ フィールドはカスタマイズできます。

  • すべてのメタデータを選択すると、VPC フローログ レコード内のすべてのメタデータ フィールドがフローログに含まれます。新しいメタデータ フィールドがレコード形式に追加されると、フローログに新しいフィールドが自動的に含まれます。

  • メタデータを選択しない場合は、すべてのメタデータ フィールドが省略されます。

  • カスタム メタデータを選択した場合、親フィールド(src_vpc など)または完全名(src_vpc.project_id など)を使用して、含めるメタデータ フィールドを指定できます。

    新しいメタデータ フィールドがレコード形式に追加された場合、これらのフィールドが指定した親フィールド内にある場合を除き、フローログから除外されます。

    • 親フィールドを使用してカスタム メタデータを指定した場合、その親フィールド内のレコード形式に新しいメタデータ フィールドが追加されると、フローログには新しいフィールドが自動的に含まれます。

    • フィールドの完全名を使用してカスタム メタデータを指定した場合、親フィールドに追加された新しいメタデータ フィールドはフローログから除外されます。

メタデータ フィールドのカスタマイズについては、サブネットの作成時に VPC フローロギングを有効にするで Google Cloud CLI または API の手順をご覧ください。

GKE メタデータのアノテーション

GKE クラスタにエンドポイントがあるフローには、そのエンドポイントのクラスタ、Pod、Service の詳細を含む GKE メタデータ アノテーションを付けることができます。

GKE Service アノテーション

ClusterIP、NodePort、LoadBalancer に送信されたトラフィックは、Service アノテーションを取得できます。NodePort または LoadBalancer に送信された場合、そのフローには接続の両方のホップで Service アノテーションが付けられます。

Pod の Service ポートに直接送信されたトラフィックには、宛先エンドポイントの Service アノテーションでアノテーションが付けられます。

Pod が同じ Service ポートで複数の Service をサポートしている場合、Pod のサービスポートに送信されるトラフィックには、宛先エンドポイントで複数の Service がアノテーションされます。これは 2 つの Service に限定されます。それ以上ある場合は、エンドポイントに特別な MANY_SERVICES マーカーが付けられます。

インターネット トラフィックでの Pod アノテーション

Pod とインターネットの間のトラフィックには、デフォルトでは Pod アノテーションが付きません。インターネットへのパケットの場合、マスカレード エージェントが Pod の IP アドレスをノード IP アドレスに変換するまで、VPC フローログはパケットを認識しません。このため、VPC フローログはPod アノテーションを追加できません。

マスカレードのため、リンク先がデフォルトの非マスカレードの宛先またはカスタム nonMasqueradeCIDRs リスト内にある場合にのみ、Pod アノテーションが表示されます。インターネットの宛先をカスタム nonMasqueradeCIDRs リストに含める場合は、インターネットに到達する前に内部 Pod IP アドレスが変換されるようにする必要があります。Cloud NAT は限定公開クラスタと非プライベート クラスタの両方で使用できます。詳細については、GKE の操作をご覧ください。

ログのフィルタリング

VPC フローログを有効にすると、フィルタに一致するログのみを保持する基本フィールドとメタデータ フィールドの両方に基づいてフィルタを設定できます。他のすべてのログは Logging に書き込まれる前に破棄されるため、コストが節約され、必要な情報の検索にかかる時間が短縮されます。

[レコード形式] に記載されているフィールドのサブセットでフィルタリングできます。ただし、次のフィールドは除きます。

  • rtt_msec
  • bytes_sent
  • packets_sent
  • start_time
  • end_time

VPC フローログ フィルタリングでは、属性ベースの論理式に埋め込み式の表現言語である CEL が使用されます。VPC フローログのフィルタ式は 2,048 文字以内に制限されています。詳しくは、サポートされている CEL 論理演算子をご覧ください。

CEL の詳細については、CEL の概要言語の定義をご覧ください。生成フィルタ機能では、CEL 構文の特定のサブセットのみがサポートされます。

ログ フィルタリングを使用するサブネットの作成については、サブネット作成時の VPC フローログの有効化で gcloud CLI または API の手順をご覧ください。

ログ フィルタリングの構成については、VPC フローログ パラメータの更新で gcloud CLI または API の手順をご覧ください。

例 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: ログの収集を VPC の外部のトラフィックに制限する。

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

サポートされている 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、... Int 定数の数値リテラル
x + y 文字列 文字列の連結
"foo"、'foo'、... 文字列 定数の文字列リテラル
x.lower() 文字列 文字列の小文字の値を返します。
x.upper() 文字列 文字列の大文字の値を返します。
x.contains(y) 文字列 文字列に指定された部分文字列が含まれている場合は true を返します。
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: list
y: map(string, string)

指定された Key-Value ペアと一致するフィールドを含むオブジェクトがリストに含まれている場合、true が返されます。

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

has(x) 文字列

フィールドが存在する場合は true を返します。

次のステップ