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 が送信元からのレスポンス バイトの受信を開始するまでが測定されます。 このフィールドは、 |
backendLatency | 0.126666342s | バックエンドがリクエストに完全に応答するまでの時間。CDN が送信元へのリクエストのプロキシを終了してから、CDN がバックエンドから完全なレスポンスを受信するまでが測定されます。 このフィールドは、 |
cacheId | MAA-123456 |
キャッシュに最も近い都市の IATA(airport)コードと、キャッシュ インスタンスの不透明な ID。完全または部分的なキャッシュミスによりリクエストの処理に複数のキャッシュ層が必要な場合、次のようなキャッシュのロケーションのチェーンが提供されます。例: del-234567, bom-345678, sin-456789 、右端のキャッシュがユーザーに最も近いものです。 |
cacheKeyFingerprint | f63925711b0dd8a9ff861cd303774e6e | キャッシュキーの不透明フィンガープリント。同じキャッシュキーにマッピングされるリクエスト(たとえば、クエリ パラメータが含まれていないリクエストや、ホストが含まれていないリクエスト)は、同じフィンガープリントを持つ必要があります。 リクエストの合計数が一意のフィンガープリントの総数に近い場合、キャッシュキーによる特定が強すぎる可能性があります。 |
cacheMode | USE_ORIGIN_HEADERS | cdnPolicy.cacheMode がこのリクエストに一致するルートで構成されている。 |
cacheStatus | Cache hit: Full cache miss: |
ユーザーと送信元シールドの間のキャッシュ ノードにおけるキャッシュ ステータス。右端はユーザーに最も近いキャッシュを表します。 |
clientAsn | 接続クライアントの IP アドレスに基づく ASN(自律システム番号)。 | |
clientCity | Mountain View | リクエスト送信元の市区町村の名前です。たとえば、カリフォルニアの Mountain View がそれです。 これは、リクエスト ヘッダーとレスポンス ヘッダーの両方に追加して、 |
clientRegionCode | US | クライアントの IP アドレスに関連付けられる国(またはリージョン)。 US や FR などの Unicode CLDR リージョン コードです。ほとんどの国では、これらのコードは ISO-3166-2 コードに直接対応しています。 これは、リクエスト ヘッダーとレスポンス ヘッダーの両方に追加して、 |
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.sampleRate
を 0.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 と直接統合されています。
次のステップ
- ログを BigQuery、Pub/Sub、または Cloud Storage にエクスポートする方法など、ロギングの詳細については、ルーティングとストレージの概要をご覧ください。
- ログベースの指標を設定して、ログに記録されたリクエストに基づいて独自の指標値を定義する方法については、ログベースの指標の概要をご覧ください。
- Logging の料金の詳細については、Google Cloud のオペレーション スイートの料金についてをご覧ください。
- 監査ログの仕組みと、管理アクティビティの監査ログを有効にして構成する方法については、Cloud Audit Logs のドキュメントをご覧ください。