VPC Flow Logs のレコードについて
このページでは、使用可能な基本フィールドとメタデータ フィールドなど、VPC Flow Logs のレコード形式について説明します。また、ログフィルタを使用して、特定の条件に一致するログのみが生成されるようにする方法についても説明します。
レコードの形式
ログレコードには、各ログレコードのコアフィールドである基本フィールドと、詳細情報を追加するメタデータ フィールドが含まれています。メタデータ フィールドは、ストレージ費用を節約するために省略できます。
一部のログフィールドはマルチ フィールド形式であり、1 つのフィールドに複数のデータが含まれます。たとえば、connection
フィールドは IpConnection
形式で、送信元と宛先の IP アドレスとポート、およびプロトコルが 1 つのフィールドに格納されます。これらのマルチフィールド形式のフィールドについては、レコードの形式に関する表の後に情報が提供されています。
メタデータ フィールドの値はデータプレーン パスに基づくものではなく近似値であるため、存在しない可能性や、不正確な可能性もあります。メタデータ フィールドとは異なり、基本フィールドの値はパケット ヘッダーから直接取得されます。
フィールド | フィールドの形式 | フィールド タイプ: 基本 / メタデータ(省略可) |
---|---|---|
connection |
IpConnection
フローを記述する 5 タプル。 |
基本 |
reporter |
文字列
フローを報告した側。 SRC 、DEST 、SRC_GATEWAY 、DEST_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 に接続されているオンプレミスまたはその他のクラウド エンドポイントで、次のいずれかの条件を満たしている場合、このフィールドにはゲートウェイの詳細が入力されます。
|
メタデータ |
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
フローの送信元が VPC ネットワーク内の VM で、次のいずれかの条件を満たしている場合、このフィールドには VM インスタンスの詳細が入力されます。
|
メタデータ |
dest_instance |
InstanceDetails
フローの宛先が VPC ネットワーク内の VM であり、次のいずれかの条件を満たしている場合、このフィールドには VM インスタンスの詳細が入力されます。
|
メタデータ |
src_location |
GeographicDetails
フローの送信元が VPC ネットワークの外部にあるパブリック IP アドレスの場合、このフィールドには使用可能なロケーション メタデータが入力されます。 |
メタデータ |
dest_location |
GeographicDetails
フローの宛先が VPC ネットワークの外部にあるパブリック IP アドレスの場合、このフィールドには使用可能なロケーション メタデータが入力されます。 |
メタデータ |
src_vpc |
VpcDetails
フローの送信元が VPC ネットワーク内の VM であり、次のいずれかの条件を満たしている場合、このフィールドには VPC ネットワークの詳細が入力されます。
|
メタデータ |
dest_vpc |
VpcDetails
フローの宛先が VPC ネットワーク内の VM であり、次のいずれかの条件を満たしている場合、このフィールドには VPC ネットワークの詳細が入力されます。
|
メタデータ |
その他のメタデータ フィールド | ||
internet_routing_details |
InternetRoutingDetails
フローが Google Cloud とインターネットの間である場合、このフィールドにはルーティングの詳細が入力されます。下り(外向き)フローの場合にのみ使用できます。 |
メタデータ |
load_balancing |
LoadBalancingDetails
フローが次のいずれかの構成でロードバランサを通過する場合、このフィールドには Cloud Load Balancing の詳細が入力されます。
|
メタデータ |
network_service |
NetworkServiceDetails
Differentiated Services Code Point(DSCP)ヘッダーが設定されている場合、このフィールドには、ネットワーク サービスの詳細が入力されます。 |
メタデータ |
psc |
PrivateServiceConnectDetails
次のいずれかの構成でフローが 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 | 文字列 |
最上位のワークロード コントローラのタイプ。DEPLOYMENT 、REPLICA_SET 、STATEFUL_SET 、DAEMON_SET 、JOB 、CRON_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 レポーター。CLIENT か BACKEND のいずれか。
|
type | 文字列 | ロードバランサの種類。APPLICATION_LOAD_BALANCER 、PROXY_NETWORK_LOAD_BALANCER 、PASSTHROUGH_NETWORK_LOAD_BALANCER 、または PROTOCOL_FORWARDING のいずれか。 |
scheme | 文字列 | ロードバランサ スキーム。EXTERNAL_MANAGED 、INTERNAL_MANAGED 、EXTERNAL 、INTERNAL 、INTERNAL_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_GROUP 、NETWORK_ENDPOINT_GROUP 、TARGET_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 レポーター。CONSUMER か PRODUCER のいずれかになります。 |
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_APIS か PUBLISHED_SERVICE のいずれかになります。 |
vpc | VpcDetails | Private Service Connect エンドポイントの VPC ネットワークの詳細 |
PrivateServiceConnectAttachmentDetails フィールドの形式
フィールド | タイプ | 説明 |
---|---|---|
project_id | 文字列 | サービス アタッチメントの Google Cloud プロジェクト ID |
region | 文字列 | サービス アタッチメントのリージョン |
vpc | VpcDetails | サービス アタッチメントの VPC ネットワークの詳細 |
メタデータ アノテーション
ログレコードには、基本フィールドとメタデータ フィールドが含まれます。レコード形式セクションには、フィールドの種類(メタデータか基本か)が記載されています。すべての基本フィールドが常に含まれます。保持するメタデータ フィールドはカスタマイズできます。
すべてのメタデータを選択すると、VPC Flow Logs レコード内のすべてのメタデータ フィールドがフローログに含まれます。新しいメタデータ フィールドがレコード形式に追加されると、フローログに新しいフィールドが自動的に含まれます。
メタデータを選択しない場合は、すべてのメタデータ フィールドが省略されます。
カスタム メタデータを選択した場合、親フィールド(
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 Flow Logs はパケットを認識しません。このため、VPC Flow Logs は Pod アノテーションを追加できません。
マスカレードのため、リンク先がデフォルトの非マスカレードの宛先またはカスタム nonMasqueradeCIDRs
リスト内にある場合にのみ、Pod アノテーションが表示されます。インターネットの宛先をカスタム nonMasqueradeCIDRs
リストに含める場合は、インターネットに到達する前に内部 Pod IP アドレスが変換されるようにする必要があります。Cloud NAT は限定公開クラスタと非プライベート クラスタの両方で使用できます。詳細については、GKE の操作をご覧ください。
ログのフィルタリング
VPC Flow Logs を有効にすると、フィルタに一致するログのみを保持する基本フィールドとメタデータ フィールドの両方に基づいてフィルタを設定できます。他のすべてのログは Logging に書き込まれる前に破棄されるため、コストが節約され、必要な情報の検索にかかる時間が短縮されます。
[レコード形式] に記載されているフィールドのサブセットでフィルタリングできます。ただし、次のフィールドは除きます。
rtt_msec
bytes_sent
packets_sent
start_time
end_time
VPC Flow Logs フィルタリングでは、属性ベースの論理式に埋め込み式の表現言語である CEL が使用されます。VPC Flow Logs のフィルタ式は 2,048 文字以内に制限されています。詳しくは、サポートされている CEL 論理演算子をご覧ください。
CEL の詳細については、CEL の概要と言語の定義をご覧ください。生成フィルタ機能では、CEL 構文の特定のサブセットのみがサポートされます。
ログ フィルタリングを使用するサブネットの作成については、サブネットの作成時に VPC Flow Logs を有効にするで gcloud CLI または API の手順をご覧ください。
ログ フィルタリングの構成については、VPC Flow Logs パラメータを更新するで 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 を返します。 |