キャッシュのログと指標

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

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

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

コンソール

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

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

  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

別の方法として、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 には、システムの健全性とパフォーマンスをすばやく把握するためにデフォルトで有効になっている事前定義済みダッシュボードが用意されています。Monitoring には、カスタム ダッシュボードのセットも用意されています。これらのカスタム ダッシュボードの定義は、GitHub の monitoring-dashboard-samples リポジトリで JSON ファイルとして入手できます。dashboards/networking ディレクトリには、cloud-cdn-monitoring.json という Cloud CDN 固有のカスタム ダッシュボードがあります。サンプル ダッシュボードのインストールの手順に沿って、このカスタム ダッシュボードを Monitoring にアップロードします。

事前定義されたダッシュボード

Cloud Monitoring には、Cloud CDN 用の事前定義されたダッシュボードが用意されています。これらのダッシュボードには、手動で構成しなくてもトラフィック分布とキャッシュの有効性をモニタリングできる主要な指標が表示されます。

事前定義のダッシュボードを表示する

事前定義されたダッシュボードにアクセスするには、次の手順を行います。

  1. Google Cloud コンソールで、[Cloud CDN] ページに移動します。

    Cloud CDN に移動

  2. ダッシュボードを表示する送信元の名前をクリックします。

  3. [送信元の詳細] ページで、[モニタリング] をクリックします。

    デフォルトでは、事前定義されたダッシュボードが表示されます。

ダッシュボードの指標

事前定義されたダッシュボードには、CDN オリジンに関する次の主要な指標が表示されます。

  • クライアント トラフィックの分散

    クライアント リクエストの送信元を表示する動的な地理地図。このマップは、トラフィックの発生元をグローバルに視覚的に把握できます。期間フィルタを調整して、特定の期間のトラフィック分布パターンを分析できます。

  • 主要な指標

    次の表は、ダッシュボードに表示されるコア指標を示しています。

    指標 説明
    合計リクエスト数 Cloud CDN によって処理されたすべての HTTP/HTTPS リクエストの合計数。キャッシュまたは送信元バックエンド サービスから提供されます。グラフには、リクエスト数が時系列で表示されます。
    キャッシュ(下り、外向き) Cloud CDN エッジキャッシュから提供されたデータの合計量(バイト単位)。棒グラフには、下り(外向き)トラフィックの経時的な量が表示されます。
    総エラー率 エラー ステータス コード 4xx または 5xx を返したすべてのリクエストの割合。この指標は、サービス全体の正常性の主な指標です。
    4xx エラー率 クライアントサイドのステータス コードを返したリクエストの割合。これらは 404 Not Found403 Forbidden などの 4xx コードです。このようなエラーは、リクエストされたコンテンツまたはクライアント権限に関する問題を示します。
    5xx エラー率 サーバーサイドのステータス コードを返したリクエストの割合。これらは 5xx コード(502 Bad Gateway503 Service Unavailable など)です。このようなエラーは、バックエンド オリジン サービスまたはロードバランサの構成に問題があることを示します。
    キャッシュ ヒット率 Cloud CDN キャッシュから直接処理されたリクエストの数と、リクエストの合計数の比率(パーセンテージ)。
    合計キャッシュ フィル 配信元バックエンドから取得され、Cloud CDN キャッシュに保存されたデータの合計量(バイト単位)。

カスタム ダッシュボード

Monitoring では、カスタム ダッシュボードを作成できます。ダッシュボードでは、外部アプリケーション ロードバランサの任意のモニタリング指標を使用できます。次に、Monitoring カスタム ダッシュボードに貼り付けることができる PromQL スニペットの例を示します。

キャッシュの結果ごとに分類されたリクエスト バイト数

このクエリでは、Cloud CDN が有効になっているバックエンドを対象にしています。この操作は、cache_result!="DISABLED" を追加することで行われます。

sum by (cache_result) (
 rate({"loadbalancing.googleapis.com/https/response_bytes_count", monitored_resource="https_lb_rule", cache_result!="DISABLED"}[1m])
)

特定のバックエンド ターゲットでのクライアント ラウンドトリップ TCP レイテンシ: 95%

このクエリに backend_target_name="example-backend" が含まれていると、バックエンド example-backend に対するトラフィックが絞り込まれます。バックエンドは、Cloud Storage バケット、Compute Engine VM グループ、または外部バックエンドになります。

histogram_quantile(
 0.95,
 sum by (proxy_continent, le) (
   rate({"loadbalancing.googleapis.com/https/frontend_tcp_rtt_bucket",
     monitored_resource="https_lb_rule",
     backend_target_name="example-backend"
   }[1m])
 )
)

Cloud CDN 対応バックエンドのレスポンス コード クラスごとに分類されたリクエスト数

このクエリでは、レスポンス コード クラス(2xx、3xx、4xx、5xx)によってトラフィックが分類され、クライアントの成功、クライアントのエラー、サーバーエラーが分けられます。

sum by (response_code_class) (
 count_over_time(
  {"loadbalancing.googleapis.com/https/request_count",
     monitored_resource="https_lb_rule",
     cache_result!="DISABLED"
   }[1h]
 )
)

送信元の国ごとに分類されたリクエスト数

このクエリは、送信元の国ごとに分類されたトラフィックを表示します。これは、クライアント IP アドレスから判定されます。

sum by (client_country) (
 rate({"loadbalancing.googleapis.com/https/request_count", monitored_resource="https_lb_rule"}[1m])
)

次のステップ

  • ログを BigQuery、Cloud Pub/Sub、Cloud Storage にエクスポートする方法、モニタリングとアラートにログベースの指標を構成する方法など、ロギングの詳細について、Cloud Logging のドキュメントで確認する。

  • httpRequest ログエントリに含まれるフィールドについて、HttpRequest で確認する。