Cloud CDN の各リクエストは Cloud Logging でログに記録されます。ロギングの有効化と無効化については、外部アプリケーション ロードバランサと Cloud CDN のロギングとモニタリングの概要をご覧ください。
Cloud CDN のログは、Cloud CDN バックエンドが接続されている外部アプリケーション ロードバランサに関連付けられます。Cloud CDN ログには、まず転送ルールでインデックスが作成され、次に URL マップでインデックスが作成されます。
Cloud CDN ログを表示する手順は次のとおりです。
Console
- Google Cloud Console で、[ログ エクスプローラ] ページに移動します。
- [リソース] メニューで、[Cloud HTTP ロードバランサ] を選択します。
- 次のようにログを表示します。
- すべてのログを表示する: [リソース] メニューを選択して、[すべての転送ルール] を選択します。
- 転送ルールのログを表示する: 転送ルールのリストから転送ルール名を選択します。
- 転送ルールで使用される URL マップのログを表示する: 転送ルールを選択してから URL マップを選択します。
バックエンドから配信されるリクエスト
Cloud CDN 対応バックエンドからリクエストが提供されていることを確認する場合、次の 3 つのメイン フィールドが確認対象となります。
httpRequest
: リクエストがバックエンドから提供されると、キャッシュに保存されたことと、リクエストの URL を確認できます。cacheFillBytes:
NUMBER_OF_BYTEScacheLookup: True
requestURL
: URL
jsonPayload
:statusDetails
フィールドで、レスポンスがバックエンドによって提供されたことを確認できます。statusDetails: "response_sent_by_backend"
キャッシュから提供されるリクエスト
次のログエントリはキャッシュ ヒットを示しています。
{ insertId: "1oek5rg3l3fxj7" jsonPayload: { @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry" cacheId: "SFO-fbae48ad" statusDetails: "response_from_cache" } httpRequest: { requestMethod: "GET" requestUrl: "http://LOAD_BALANCER_IP_ADDRESS/static/us/three-cats.jpg" requestSize: "577" status: 304 responseSize: "157" userAgent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36" remoteIp: "CLIENT_IP_ADDRESS" cacheHit: true cacheLookup: true } resource: { type: "http_load_balancer" labels: { zone: "global" url_map_name: "URL_MAP_NAME" forwarding_rule_name: "FORWARDING_RULE_NAME" target_proxy_name: "TARGET_PROXY_NAME" backend_service_name: "" project_id: "PROJECT_ID" } } timestamp: "2020-06-08T23:41:30.078651Z" severity: "INFO" logName: "projects/PROJECT_ID/logs/requests" trace: "projects/PROJECT_ID/traces/241d69833e64b3bf83fabac8c873d992" receiveTimestamp: "2020-06-08T23:41:30.588272510Z" spanId: "7b6537d3672e08e1" }
ログの内容
外部アプリケーション ロードバランサと Cloud CDN のログには、大半のログに含まれる一般情報(重大度、プロジェクト ID、プロジェクト番号、タイムスタンプなど)に加え、以下の情報が含まれています。
HttpRequest ログフィールド。HTTP ステータス コード、返されたバイト数、キャッシュ検索またはキャッシュ フィルの実行の有無についての情報が取り込まれます。
jsonPayload.cacheId
フィールド。キャッシュ レスポンスの提供元となったロケーションとキャッシュ インスタンスを示します。たとえば、キャッシュ レスポンスがアムステルダムのキャッシュから提供された場合、cacheId の値はAMS-85e2bd4b
に設定されます。ここで、AMS
は IATA コード、85e2bd4b
はキャッシュ インスタンスの不透明な ID です(Cloud CDN の一部のロケーションには個別のキャッシュが複数あるため)。jsonPayload
のstatusDetails
フィールドとcacheDetail
フィールド。
以下のフィールドをフィルタリングして、Cloud CDN によって処理されるリクエストのキャッシュ ヒット、キャッシュミス、再検証ステータスを判断できます。
キャッシュ ヒット
jsonPayload.statusDetails=("response_from_cache" OR "byte_range_caching")
または
httpRequest.cacheHit=true
httpRequest.cacheValidatedWithOriginServer!=true
元のサーバーで検証されたキャッシュ ヒット
jsonPayload.statusDetails="response_from_cache_validated"
または
httpRequest.cacheHit=true
httpRequest.cacheValidatedWithOriginServer=true
キャッシュミス
jsonPayload.statusDetails="response_sent_by_backend"
または
httpRequest.cacheHit!=true
httpRequest.cacheLookup=true
また、cdn_cache_status
を使用してカスタム レスポンス ヘッダーを構成することで、クライアント側からキャッシュのステータスを確認することもできます。
ブール型のログフィールドは、通常、フィールド値が true
の場合にのみ表示されます。ブール型のフィールドの値が false
の場合、そのフィールドはログから省略されます。
これらのフィールドには UTF-8 エンコードが適用されます。UTF-8 以外の文字列は、疑問符に置き換えられます。
Cloud CDN がクライアント リクエストの処理のために検証リクエストまたはバイト範囲リクエストを開始したときには、クライアント リクエストに関する Cloud Logging ログエントリの serverIp
フィールドが省略されます。これは、1 つのクライアント リクエストに対して Cloud CDN から複数のサーバー IP アドレスにリクエストが送信されることがあるからです。
Cloud CDN によってリクエストが開始されるたびに、Cloud Logging ログエントリが作成されます。作成されたエントリには、jsonPayload
の中に parentInsertId
フィールドが含まれています。このフィールドを使用すると、Cloud CDN で検証リクエストまたはバイト範囲リクエストを開始する原因となった単一のクライアント リクエストに対応するログエントリの insertId
を識別できます。さらに、対象のログエントリでは Cloud CDN がユーザー エージェントとして識別されます。
Cloud CDN のモニタリング
Cloud CDN はモニタリング データを Cloud Monitoring にエクスポートします。Monitoring は、Cloud CDN のデプロイ状態をモニタリングするために使用されます。
Cloud Monitoring では、GitHub の monitoring-dashboard-samples リポジトリにある一連のダッシュボード定義が JSON ファイルとして提供されます。ネットワーク ファイルには、cloud-cdn-monitoring.json
という Cloud CDN 固有のダッシュボードがあります。サンプル ダッシュボードのインストールの手順に沿って、このカスタム ダッシュボードを Monitoring にアップロードします。
Cloud CDN のサンプルクエリのモニタリング
Monitoring では、カスタム ダッシュボードを作成できます。ダッシュボードでは、外部アプリケーション ロードバランサの任意のモニタリング指標を使用できます。次に、Monitoring カスタム ダッシュボードに貼り付けることができる MQL スニペットの例を示します。
キャッシュの結果ごとに分類されたリクエスト バイト数
このクエリでは、Cloud CDN が有効になっているバックエンドを対象にしています。この操作は、filter (metric.cache_result
!= 'DISABLED')
を追加することで行われます。
fetch https_lb_rule | metric 'loadbalancing.googleapis.com/https/response_bytes_count' | filter (metric.cache_result != 'DISABLED') | align rate(1m) | every 1m | group_by [metric.cache_result], [value_response_bytes_count_aggregate: aggregate(value.response_bytes_count)]
特定のバックエンド ターゲットでのクライアント ラウンドトリップ TCP レイテンシ: 95%
このクエリに filter (resource.backend_target_name = 'example-backend')
が含まれていると、バックエンド example-backend
に対するトラフィックが絞り込まれます。バックエンドは、Cloud Storage バケット、Compute Engine VM グループ、または外部バックエンドになります。
fetch https_lb_rule | metric 'loadbalancing.googleapis.com/https/frontend_tcp_rtt' | filter (resource.backend_target_name = 'example-backend') | group_by 1m, [value_frontend_tcp_rtt_aggregate: aggregate(value.frontend_tcp_rtt)] | every 1m | group_by [metric.proxy_continent], [value_frontend_tcp_rtt_aggregate_percentile: percentile(value_frontend_tcp_rtt_aggregate, 95)]
Cloud CDN 対応バックエンドのレスポンス コード クラスごとに分類されたリクエスト数
このクエリでは、レスポンス コード クラス(2xx、3xx、4xx、5xx)によってトラフィックが分類され、クライアントの成功、クライアントのエラー、サーバーエラーが分けられます。
fetch https_lb_rule | metric 'loadbalancing.googleapis.com/https/request_count' | filter (metric.cache_result != 'DISABLED') | group_by 1h, [row_count: row_count()] | every 1h | group_by [metric.response_code_class], [row_count_aggregate: aggregate(row_count)]
送信元の国ごとに分類されたリクエスト数
このクエリは、送信元の国ごとに分類されたトラフィックを表示します。これは、クライアント IP アドレスから判定されます。
fetch https_lb_rule | metric 'loadbalancing.googleapis.com/https/request_count' | align rate(1m) | every 1m | group_by [metric.client_country], [value_request_count_aggregate: aggregate(value.request_count)]
次のステップ
ログを BigQuery、Cloud Pub/Sub、Cloud Storage にエクスポートする方法、モニタリングとアラートにログベースの指標を構成する方法など、ロギングの詳細について、Cloud Logging のドキュメントで確認する。
httpRequest
ログエントリに含まれるフィールドについて、HttpRequest
で確認する。