ロギングガイド

Media CDN は、クライアントとエッジ間の各 HTTP リクエストを Cloud Logging に記録します。ログは通常、ほぼリアルタイムで配信されます。これには、Logging でクエリ可能であること、Cloud Storage や Pub/Sub にエクスポートできることも含まれます。

ログエントリには次のタイプの情報が含まれています。

  • 重大度、プロジェクト ID、プロジェクト番号、タイムスタンプなど、ほとんどの Google Cloud ログで表示される一般情報。
  • HttpRequest ログフィールド
  • structPayload 内のリクエストに関する追加のメタデータ。これには次の内容が含まれます。

    • クライアント ASN
    • クライアントのロケーション データ
    • レスポンスの処理に使用されるキャッシュの ID(都市)
    • TLS SNI hostname
    • 使用された TLS バージョン

キャッシュ固有のフィールド

Media CDN ログの jsonPayload オブジェクトには、Media CDN がオブジェクトを提供する方法、オブジェクトがキャッシュに保存されたかどうか、および発生したエラー状態に固有のメタデータが含まれます。

次の表に、これらのフィールドと値の例を示します。

フィールド 値の例 詳細
backendInitialLatency 0.126644940s

Duration: バックエンドが最初にリクエストに応答するまでにかかる時間。CDN が送信元へのリクエストのプロキシを完了してから、CDN が送信元からのレスポンス バイトの受信を開始するまでが測定されます。

このフィールドは、EdgeCacheOrigin リソースからのキャッシュ フィルのログにのみ表示されます。

backendLatency 0.126666342s

バックエンドがリクエストに完全に応答するまでの時間。CDN が送信元へのリクエストのプロキシを終了してから、CDN がバックエンドから完全なレスポンスを受信するまでが測定されます。

このフィールドは、EdgeCacheOrigin リソースからのキャッシュ フィルのログにのみ表示されます。

cacheId MAA-123456 キャッシュに最も近い都市の IATA(airport)コードと、キャッシュ インスタンスの不透明な ID。完全または部分的なキャッシュミスによりリクエストの処理に複数のキャッシュ層が必要な場合、次のようなキャッシュのロケーションのチェーンが提供されます。例: del-234567, bom-345678, sin-456789、右端のキャッシュがユーザーに最も近いものです。
cacheKeyFingerprint f63925711b0dd8a9ff861cd303774e6e

キャッシュキーの不透明フィンガープリント。同じキャッシュキーにマッピングされるリクエスト(たとえば、クエリ パラメータが含まれていないリクエストや、ホストが含まれていないリクエスト)は、同じフィンガープリントを持つ必要があります。

リクエストの合計数が一意のフィンガープリントの総数に近い場合、キャッシュキーによる特定が強すぎる可能性があります。

cacheMode USE_ORIGIN_HEADERS cdnPolicy.cacheMode がこのリクエストに一致するルートで構成されている。
cacheStatus

Cache hit: hit

Full cache miss: fetch, miss, miss

ユーザーと送信元シールドの間のキャッシュ ノードにおけるキャッシュ ステータス。右端はユーザーに最も近いキャッシュを表します。
clientAsn 接続クライアントの IP アドレスに基づく ASN(自律システム番号)。
clientCity Mountain View

リクエスト送信元の市区町村の名前です。たとえば、カリフォルニアの Mountain View がそれです。

これは、リクエスト ヘッダーとレスポンス ヘッダーの両方に追加して、client_city ヘッダー変数をミラーリングすることもできます。

clientRegionCode US

クライアントの IP アドレスに関連付けられる国(またはリージョン)。 US や FR などの Unicode CLDR リージョン コードです。ほとんどの国では、これらのコードは ISO-3166-2 コードに直接対応しています。

これは、リクエスト ヘッダーとレスポンス ヘッダーの両方に追加して、client_region ヘッダー変数をミラーリングすることもできます。

enforcedSecurityPolicy クライアントのリクエストに適用された Google Cloud Armor エッジ セキュリティ ポリシー。これには、ポリシー名、優先度、実施されたアクションに関する追加情報が含まれます。
httpTtfb 0.157228207s プロキシがリクエスト バイトの受信を開始してからレスポンスの最初のバイトが送信される(受信されない)までの時間。
latency 0.157415635s プロキシがリクエスト バイトの受信を開始してからクライアントへのレスポンスの書き込みを完了するまでの時間。
location レスポンスの Location ヘッダー。
metroIataCode MAA プロキシに最も近い都市の IATA(空港)コード。
origin レスポンスがプロキシされた EdgeCacheOrigin リソース。
originalRequestId 19d92668-3948-49d8-9244-25f8252043e4 このレスポンスを最初に生成したリクエストに割り当てられた一意の識別子。 キャッシュに保存されたレスポンスの request_id とは異なる場合にのみ入力されます。
originIp レスポンスがプロキシされた EdgeCacheOrigin リソースへの接続に使用される IP アドレス。
proxyRegionCode US プロキシが配置されている国(またはリージョン)。これは US や FR などの Unicode CLDR リージョン コードです。ほとんどの国では、これらのコードは ISO-3166-2 コードに直接対応しています。
rangeHeader リクエストの Range ヘッダー。
requestId 4bde6381-cd17-47e1-8c2a-1aaa424a1156 プロキシによってリクエストに割り当てられた一意の識別子。
tlsCipherSuite 009C TLS handshake 中にネゴシエートされた暗号スイート。値は、IANA TLS Cipher Suite Registry で定義された 4 桁の 16 進数です。たとえば、TLS_RSA_WITH_AES_128_GCM_SHA256 の場合には「009C」となります。暗号化されていないクライアント接続の場合、この値は空です。
tlsSniHostname RFC 6066 で定義されたサーバー名表示(TLS または QUIC handshake 中にクライアントによって提供された場合)。ホスト名は小文字に変換され、末尾のドットはすべて削除されます。
tlsVersion TLS 1.3 SSL handshake 中にクライアントと CDN の間でネゴシエートされた TLS バージョン。有効な値は、TLS 1、TLS 1.1、TLS 1.2、TLS 1.3 などです。

ログエントリの例

キャッシュから提供されたレスポンスのログエントリの例を次に示します。

{
  "insertId": "617fa16e-0000-2ac9-9993-d4f547fe67d4@a1",
  "jsonPayload": {
    "@type": "type.googleapis.com/google.cloud.edgecache.v1.EdgeCacheLogEntry",
    "tlsVersion": "TLS 1.3",
    "tlsCipherSuite": "009C", // hex digits for the cipher negotiated
    "cacheId": "maa-132eed13faa13",
    "clientAsn": "9299", // AS the client is associated with
    "origin": "example_origin",
    "clientRegionCode": "IN",
    "metroIataCode": "bom",
    "clientCity": "Mumbai", // City name, in English
    "latency": "0.005105200s",
    "proxyStatus": "Google-Edge-Cache",
    "httpTtfb": "0.005056080s",
    "cacheMode": "FORCE_CACHE_ALL",
    "cacheKeyFingerprint": "c360ac18849b6336",
    "cacheStatus": "hit,stale",
    "enforcedSecurityPolicy": {
      "outcome": "ACCEPT",
      "configuredAction": "ACCEPT",
      "name": "example_policy",
      "priority": 1000
    },
    "originalRequestId": "19d92668-3948-49d8-9244-25f8252043e5",
    "proxyRegionCode": "IN",
    "requestId": "4bde6381-cd17-47e1-8c2a-1aaa424a1156",
    "originIp": "74.125.128.128"
  },
  "httpRequest": {
    "requestMethod": "GET",
    "requestUrl": "https://example.com/image.jpg",
    "requestSize": "3545",
    "status": 200,
    "responseSize": "3716",
    "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36",
    "remoteIp": "62.36.0.43",
    "protocol": "HTTP/2"
  },
  "resource": {
    "type": "edgecache.googleapis.com/EdgeCacheRouteRule",
    "labels": {
      "matched_path": "/",
      "path_matcher_name": "routes",
      "service_name": "example_service",
      "resource_container": "projects/123456789",
      "location": "global",
      "route_destination": "projects/123456789/locations/global/edgeCacheOrigins/example_origin",
      "route_type": "ORIGIN"
    }
  },
  "timestamp": "2022-11-19T00:24:13.695328200Z",
  "logName": "projects/my-project/logs/edgecache.googleapis.com%2Fedge_cache_request",
  "receiveTimestamp": "2022-11-19T00:24:16.715871645Z"
}

ログ容量と Logging の全体的な課金を削減するには、必要に応じてログをサンプリングするか、フィルタリングします。Google Cloud で分析するか、既存のログ分析ツールを使用して、Pub/Sub または BigQuery にログをルーティングすることもできます。

ログを有効化

保存されるデータを最小限に抑えるために、ロギングはデフォルトで無効になっています。ログはルーティング、フィルタリング、Logging に保存されます。

特定のMedia CDN サービスのロギングを有効にするには:

gcloud edge-cache services update YOUR_SERVICE \
    --enable-logging \
    --logging-sample-rate=1.0

ロギングを無効にするには:

gcloud edge-cache services update YOUR_SERVICE \
    --no-enable-logging

サービスの現在のロギング状態を取得するには:

gcloud edge-cache services describe YOUR_SERVICE

出力は次のようになります。

...
logConfig:
  enable: true
  sampleRate: 1.0
...

ログの例

リクエスト数が多い場合は、リクエストごとにログをキャプチャするのではなく、ログを使用してサンプリングを行い、プロアクティブなモニタリングと調査を行います。

リクエストの 10% のログのみを取り込んで保存するには、logConfig.sampleRate0.1 に設定します。

gcloud edge-cache services update YOUR_SERVICE \
    --enable-logging \
    --logging-sample-rate=0.1

サンプリング レートを変更するには、ロギングを有効にする必要があります。

特に指定のない限り、サンプリング レートはデフォルトで 1.0(100%)に設定され、構成したサービスに対するすべてのリクエストがログに記録されます。

クエリログ

ログをクエリするには、Google Cloud コンソールのログ エクスプローラまたは Google Cloud CLI を使用できます。

Google Cloud コンソールでログを表示するには、Media CDN リソースタイプをフィルタし、必要に応じてプロジェクトとサービス名でフィルタします。

次のロギングクエリは、すべての Media CDN サービスのログを示しています。

resource.type="edgecache.googleapis.com/EdgeCacheRouteRule"

特定の EdgeCacheService リソースとプロジェクトに関連付けられたログをフィルタリングするには、次のクエリを拡張します。

resource.type="edgecache.googleapis.com/EdgeCacheRouteRule"
resource.labels.resource_container="projects/12345678"
resource.labels.service_name="MY_PROJECT"

名前の一部で照合する場合や正規表現を使用する場合は、ロギング構文のドキュメントをご覧ください。

例: キャッシュミスを特定する

オブジェクトのリクエストはキャッシュミスであり、次のような理由でキャッシュ フィルが発生する可能性があります。

  • TTL が短すぎる
  • 過剰なキャッシュ キー
  • キャッシュされたリクエストが多すぎる

キャッシュミスを特定するには、ログ エクスプローラでログをフィルタリングします。

次のログクエリは、キャッシュ可能な(検索された)リクエストのうち、送信元からのフィルが必要なリクエストを示します。

resource.type="edgecache.googleapis.com/EdgeCacheRouteRule"
resource.labels.resource_container="projects/12345678"
resource.labels.service_name="MY_PROJECT"
jsonPayload.cacheStatus="miss"

特定の URL でフィルタリングする必要がある場合は、httpRequest.requestUrl フィールドでフィルタリングできます。

httpRequest.requestUrl = "URL"

パス コンポーネントなど、URL の一部をフィルタリングするには、has 演算子を使用します。

# `:` is the `has` comparison operator
httpRequest.requestUrl: "/videos/1381381_1080.mp4"
# You can use `OR` or `AND` to filter on multiple values
httpRequest.requestUrl: ("https://media-test.example.com/" OR "https://canary.example.net")

Logging のマッチングとフィルタリングの包括的な構文については、高度なログクエリのドキュメントをご覧ください。

保持ポリシー

Logging では、シンク単位など、カスタム保持ポリシーの設定がサポートされています。

保存するログをフィルタ

保存する前にログをフィルタする(たとえば、関連するフィールドをキャプチャして、保存とクエリが必要なログ容量を減らすなど)には、ログの除外ルールを構成します。これにより、保存前にフィールドを含むクエリ(フィルタ)を定義できます。

また、複数のフィルタを設定することもできます。たとえば、すべてのキャッシュミス リクエストまたは特定のホスト名に対するすべてのリクエストをキャプチャし、すべてのログのサンプルを取得するだけです。

ログをエクスポートする

Logging からログをエクスポートするには、次の内容を含むログのエクスポートの概要のドキュメントをご覧ください。

  • Cloud Storage または BigQuery にログをエクスポートする方法
  • Pub/Sub にエクスポートし、Cloud Functions または外部サービスで使用する
  • 複数のプロジェクトのログの集計

Media CDN は Logging と直接統合されています。

次のステップ