Cloud CDN 日志记录和监控

每个 Cloud CDN 请求都会记录在 Cloud Logging 中。如需了解如何启用和停用日志记录功能,请参阅 HTTP(S) 负载平衡和 Cloud CDN 日志记录和监控

Cloud CDN 的日志与您的 Cloud CDN 后端所连接的外部 HTTP(S) 负载平衡器相关联。Cloud CDN 日志相继按转发规则网址映射被编入索引。

如需查看 Cloud CDN 日志,请按照以下步骤操作。

控制台

  1. 在 Google Cloud Console 中,转到日志查看器页面。

    转到“日志查看器”页面

  2. 如需查看所有日志,请在行的第一个下拉菜单中选择 Cloud HTTP 负载平衡器 > 所有转发规则

  3. 如果您只想查看一个转发规则的日志,请从该列表中选择一个转发规则名称。

  4. 如需仅查看某个转发规则使用的一个网址映射的日志,请选择 Cloud HTTP 负载平衡器,然后选择您感兴趣的转发规则和网址映射。

从后端传送的请求

如需确认请求来自已启用 Cloud CDN 的后端,请查看以下三个主要字段:

  • httpRequest:当请求来自后端时,您可以看到缓存已填充,并且您可以确认请求网址。
    • cacheFillBytes: NUMBER_OF_BYTES
    • cacheLookup: True
    • requestURLURL
  • 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"
}

记录的内容

除了大多数日志中包含的一般信息(例如严重性、项目 ID、项目编号和时间戳)之外,HTTP(S) 负载平衡和 Cloud CDN 日志还包含以下:

  • HttpRequest 日志字段,用于捕获 HTTP 状态代码、返回的字节数以及是否执行了缓存查询和/或缓存填充操作。

  • jsonPayload.cacheId 字段,指示提供缓存响应的位置和缓存实例。例如,由阿姆斯特丹的缓存处理的一条缓存响应的 cacheId 值是 AMS-85e2bd4b,其中 AMSIATA 代码85e2bd4b 是缓存实例的不透明标识符,因为某些 Cloud CDN 位置具有多个单独的缓存。

  • jsonPayloadstatusDetailscacheDetail 字段。

您可以对以下字段进行过滤,以确定 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 字段。这是因为,Cloud CDN 可能会将请求发送到多个服务器 IP 地址,以便响应单个客户端请求。

Cloud CDN 发起的每个请求都会创建一个 Cloud Logging 日志条目。生成的日志条目在 jsonPayload 内包含一个 parentInsertId 字段。对于单个客户端请求,您可以使用此字段标识日志条目的 insertId,以提示 Cloud CDN 启动验证请求或字节范围请求。此外,日志条目将 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)]

特定后端目标第 95% 百分位的客户端往返 TCP 延迟时间

此查询包含 filter (resource.backend_target_name = 'example-backend'),这会将范围缩小至流向后端 example-backend 的流量。后端可以是 Cloud Storage 存储桶、Compute Engine 虚拟机组或外部后端。

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、Pub/Sub 或 Cloud Storage)以及如何配置基于日志的指标以进行监控和提醒,请参阅 Cloud Logging 文档

  • 如需了解 httpRequest 日志条目中包含的字段,请参阅 HttpRequest