Cloud CDN のロギングとモニタリング

Cloud CDN の各リクエストは Cloud Logging でログに記録されます。ロギングの有効化と無効化については、HTTP(S) ロード バランシングおよび Cloud CDN のロギングとモニタリングをご覧ください。

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

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

Console

  1. Google Cloud Console で、ログビューア ページに移動します。

    ログビューア ページに移動

  2. すべてのログを表示するには、行の最初のプルダウン メニューで [Cloud HTTP ロードバランサ] > [すべての転送ルール] を選択します。

  3. 単一の転送ルールのログだけを確認するには、一覧から単一の転送ルール名を選択します。

  4. 転送ルールで使用される 1 つの URL マップのログだけを確認するには、[Cloud HTTP ロードバランサ] を選択し、目的の転送ルールと 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"
}

ログの内容

HTTP(S) ロード バランシングと 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 は、HTTP(S) 負荷分散を使用して Cloud Monitoring にモニタリング データをエクスポートします。Monitoring は、Cloud CDN のデプロイ状態をモニタリングするために使用されます。

Cloud Monitoring では、GitHub の monitoring-dashboard-samples リポジトリにある一連のダッシュボード定義が JSON ファイルとして提供されます。ネットワーク ファイルには、cloud-cdn-monitoring.json という Cloud CDN 固有のダッシュボードがあります。サンプル ダッシュボードのインストールの手順に沿って、このカスタム ダッシュボードを Monitoring にアップロードします。

Cloud CDN のサンプルクエリのモニタリング

Monitoring では、カスタム ダッシュボードを作成できます。ダッシュボードでは、外部 HTTP(S) ロードバランサの任意のモニタリング指標を使用できます。次に、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 で確認する。