キャッシュのログと指標

Cloud CDN の各リクエストは Cloud Logging でログに記録されます。ロギングの有効化と無効化については、外部アプリケーション ロードバランサと Cloud CDN のロギングとモニタリングの概要をご覧ください。

Cloud CDN のログは、Cloud CDN バックエンドが接続されている外部アプリケーション ロードバランサに関連付けられます。Cloud CDN ログには、まず転送ルールでインデックスが作成され、次に URL マップでインデックスが作成されます。

Cloud CDN ログを表示する手順は次のとおりです。

Console

  1. Google Cloud Console で、[ログ エクスプローラ] ページに移動します。

    [ログ エクスプローラ] に移動

  2. [リソース] メニューで、[Cloud HTTP ロードバランサ] を選択します。
  3. 次のようにログを表示します。
    • すべてのログを表示する: [リソース] メニューを選択して、[すべての転送ルール] を選択します。
    • 転送ルールのログを表示する: 転送ルールのリストから転送ルール名を選択します。
    • 転送ルールで使用される URL マップのログを表示する: 転送ルールを選択してから URL マップを選択します。

バックエンドから配信されるリクエスト

Cloud CDN 対応バックエンドからリクエストが提供されていることを確認する場合、次の 3 つのメイン フィールドが確認対象となります。

  • httpRequest: リクエストがバックエンドから提供されると、キャッシュに保存されたことと、リクエストの URL を確認できます。
    • cacheFillBytes: NUMBER_OF_BYTES
    • cacheLookup: 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 に設定されます。ここで、AMSIATA コード85e2bd4b はキャッシュ インスタンスの不透明な ID です(Cloud CDN の一部のロケーションには個別のキャッシュが複数あるため)。

  • jsonPayloadstatusDetails フィールドと 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

ブール型のログフィールドは、通常、フィールド値が 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 で確認する。