【実務・中級編】 GCP VPCフローログ(VPC Flow Logs)の生成条件とサンプリング – クラウドインフラと仮想化ネットワーク実践ガイド

GCP VPCフローログを制する者は、クラウドの「真実」を制する —— サンプリングと集約の深淵

エンジニアの皆さん、こんにちは。夜中の3時にアラートで叩き起こされ、原因不明のパケットロスを追ってVPCの深淵を彷徨った経験はありますか?

AWSのVPC Flow Logsに慣れ親しんだエンジニアがGCP(Google Cloud)に触れたとき、最初に驚くのがその「精緻さと大胆さの同居」です。GCPのVPCフローログは、単なる通信記録ではありません。適切に設定すれば、ネットワークの「鼓動」を可視化する強力な武器になります。

しかし、デフォルト設定のまま運用するのは、暗闇でヘッドライトを消して走るようなもの。今回は、実務で絶対に外せないVPCフローログの生成条件と、サンプリングレートの最適解について、現場の知見を込めて解説します。

—

1. VPCフローログは「いつ」生まれるのか?

VPCフローログは、VMインスタンスのネットワークインターフェース(NIC)を通過するIPトラフィックのサンプルを記録します。ここで重要なのは、「ログはパケットそのものではなく、フロー(流れ)の要約である」という点です。

フローログが生成される条件は、主に以下の3点です。

1. 接続の確立/終了: TCP接続の開始や終了(SYN/FINパケットの検知)。
2. 集約間隔(Aggregation Interval)の満了: 接続が継続している場合、一定時間ごとに「これだけ通信しました」という中間報告が生成されます。
3. サンプリングレートの適用: 全パケットを記録するとログコストが爆発するため、トラフィックの一部を間引いて記録します。

現場の教訓:なぜ「全量」ではないのか

「全パケットをログに取れば完璧なデバッグができるのでは?」と考えがちですが、それはコストとパフォーマンスの自殺行為です。数万件のコネクションを捌くAPIサーバーで全ログを有効にすれば、Cloud Loggingの課金はあっという間に青天井。だからこそ、サンプリングの概念を理解することが不可欠なのです。

—

2. サンプリングと集約を制御する「3つの鍵」

VPCフローログを設定する際、以下の3つのパラメータが運命を分けます。

① サンプリングレート (aggregation_interval との兼ね合い)

0.0 から 1.0 の範囲で指定します。例えば 0.1 に設定すると、トラフィックの10%がサンプリングされます。

  • 低トラフィック環境: 1.0(全量)でも許容可能。
  • 高トラフィック環境: 0.01 〜 0.1 程度に絞り、統計的に傾向を掴むのが定石です。

② 集約間隔 (aggregation_interval)

ログを何秒ごとに集計して出力するか。

  • デフォルトの 5s は、リアルタイムに近い監視が必要な場合向け。
  • ログのボリュームを抑えたい場合は 15min などの長めの設定を検討しましょう。

③ メタデータの追加

metadata=INCLUDE_ALL を設定すると、TCPフラグやRTT(往復遅延時間)などの「泣くほどありがたい」情報が付与されます。ネットワークのレイテンシ問題を追うときは、これがなければ始まりません。

—

3. 実践:Terraformによる設定例

口で説明するより、コードを見せたほうが早いでしょう。以下は、実務で推奨する「可観測性とコストのバランス」を重視したTerraformの設定例です。

resource "google_compute_subnetwork" "prod_subnet" {
  name          = "prod-network-subnet"
  ip_cidr_range = "10.0.0.0/24"
  network       = google_compute_network.vpc_network.id

  # フローログの有効化
  log_config {
    aggregation_interval = "INTERVAL_15_MIN" # 15分間隔で集約(コスト抑制)
    flow_sampling        = 0.5               # 50%をサンプリング
    metadata             = "INCLUDE_ALL"     # RTT等を含めて詳細を記録
  }
}

—

4. 現場でのトラブルシューティング:パケットを追跡する

ログがCloud Loggingに溜まり始めたら、BigQueryにエクスポートして解析するのがプロの作法です。以下は、特定のWeb APIに対するレイテンシの異常値をPython(BigQuery Client)で簡易チェックするイメージです。

from google.cloud import bigquery

# クエリ:特定の送信元から、高レイテンシな通信を抽出する
query = """
SELECT 
    json_payload.connection.src_ip,
    json_payload.rtt_ms,
    timestamp
FROM `your-project.your_dataset.vpc_flows_*`
WHERE json_payload.rtt_ms > 100  -- 100ms以上の遅延があるもの
ORDER BY timestamp DESC
LIMIT 100
"""

client = bigquery.Client()
query_job = client.query(query)

for row in query_job:
    print(f"Source: {row.src_ip}, RTT: {row.rtt_ms}ms")

—

最後に:ネットワークを「直感」で捉えるな

ネットワークのトラブルは、往々にして「設定ミス」ではなく「想定外のトラフィックパターン」によって引き起こされます。

  • サンプリングレートを下げすぎない: 異常の予兆を見逃すリスクとトレードオフです。
  • メタデータを活用せよ: rtt_ms は、アプリケーションの不調が「サーバー由来」なのか「ネットワーク由来」なのかを切り分ける魔法の数字です。

GCPのVPCフローログは、設定して終わりではありません。定期的にBigQueryで集計し、トラフィックのベースラインを把握しておくこと。それこそが、何かが起きたときに「いつもの通信と何が違うのか」を一瞬で見抜く、一流のSREの仕事術なのです。

皆さんのインフラに、平穏と可観測性がもたらされることを願っています。それでは、また次回の深掘りでお会いしましょう。

コメント

タイトルとURLをコピーしました