适用于 Media CDN 插件的日志记录和监控

本页面介绍了如何为 Media CDN 配置和使用 Cloud Logging 和 Cloud Monitoring 以及 Service Extensions 插件。

日志记录

本部分介绍了媒体 CDN 插件的 Service Extensions 日志,以及如何查看和关联日志消息中的信息。

日志消息

Service Extensions 支持在插件执行期间生成日志消息。录制日志默认处于停用状态。如需记录插件的日志,请在创建插件或更新插件时启用日志记录。

插件日志记录会带有以下上下文信息:

  • 标准日志注解,例如时间戳和日志级别。
  • 生成消息的插件的身份。
  • 生成日志消息的插件回调。
  • requestId 跟踪标识符,可帮助确定日志消息关联的请求日志。

与 Service Extensions 相关的日志属于以下类别之一:

  • 插件日志消息

    由日志记录调用生成,例如 Rust 的 info!(...)、Go 的 proxywasm.LogInfo(...) 或 C++ 的 LOG_INFO。Service Extensions 会将这些日志消息导出到 Cloud Logging。您可以记录请求和响应标头以及插件执行的所有操作。

    您可以使用 networkservices.googleapis.com 服务查看这些消息。

  • 媒体 CDN 日志消息

    媒体 CDN 日志消息,用于记录对具有关联 CdnEdgeExtension 的 EdgeCacheService 资源的 HTTP 请求。这些是常规媒体 CDN 日志条目,您可以在 edgecache.googleapis.com 服务下查看。

为插件启用日志记录

Service Extensions 支持在插件执行期间生成日志消息。默认情况下,录制日志处于停用状态。

如需记录插件的日志,请在创建插件或更新插件时启用该功能。

如需为现有插件启用日志记录,请使用 gcloud beta service-extensions wasm-plugins update 命令:

gcloud beta service-extensions wasm-plugins update WASM_PLUGIN \
    --log-config=[LOG_CONFIG,...]

替换以下内容:

  • WASM_PLUGIN:插件的 ID 或完全限定名称
  • LOG_CONFIG:插件的日志记录选项。如需启用日志记录,请将 enable 选项设置为 true。然后,指定以下详细信息:

    • sample-rate:活动日志的采样率,值为 0 到 1 之间的值。值 0 表示不存储日志消息。默认值 1 表示存储所有日志消息。介于 0.0 和 1.0 之间的浮点值表示存储的日志消息百分比。
    • min-log-level:要导出到 Cloud Logging 的插件日志消息的最低严重级别。默认值为 INFO。

为插件启用日志记录后,您可以在 Cloud Logging 中查看插件代码中的日志记录语句发出的消息。

如需查看日志,请在 Google Cloud 控制台中前往 Logs Explorer 页面。

查看日志消息

您可以通过在 Logs Explorer 中构建查询来查看日志。

您可以将插件日志作为独立的 Service Extensions 日志进行查看。在此视图中,每条插件日志消息都会记录在各自的日志记录中,并且不会自动与请求日志信息相关联。

这些日志消息位于资源类型为 networkactions.googleapis.com/WasmPluginVersion 的 networkactions.googleapis.com/wasm_plugin_activity 日志中。

系统可能还会向此日志添加信息性日志消息。例如,如果插件调用超出 CPU 或内存限制时出现插件故障,则会记录 ERROR 严重级别的消息。您还可以在查看和过滤错误中看到此类消息。

您还可以在 Logs Explorer 中查看与相应 Media CDN 请求日志相关的日志消息。查看请求日志时,如果您展开请求日志条目,与该请求相关的插件日志会嵌套显示在请求日志下方。此视图可帮助您在关联请求的上下文中了解插件日志。

日志示例

假设有一个 Service Extensions 日志条目示例。message 的值会传递给插件的 LOG_INFO 调用。severity 值取决于插件日志调用中使用的日志级别。在 labels 部分中,API 的值为 HTTP_REQUEST_HEADER,这表示记录的操作是 on_http_request_headers 插件回调。

{
  "insertId": "65224aac-0000-24bd-a0e1-582429bd544c@a1",
  "jsonPayload": {
    "@type": "type.googleapis.com/google.cloud.networkactions.logging.v1.WasmPluginLogEntry",
    "metroIataCode": "ber",
    "proxyRegionCode": "DE",
    "message": "[add_header_plugin.cc:26]::onRequestHeaders() AddHeaderStreamContext::onRequestHeaders called",
    "requestId": "effc0311-6716-431b-9e2a-7586835fdff1"
  },
  "resource": {
    "type": "networkactions.googleapis.com/WasmPluginVersion",
    "labels": {
      "plugin_version": "prod-1",
      "resource_container": "projects/123456789",
      "location": "global",
      "plugin_name": "add-headers-plugin-prod-resource"
    }
  },
  "timestamp": "2023-05-10T03:05:43.317015458Z",
  "severity": "INFO",
  "labels": {
    "networkactions.googleapis.com/operation": "HTTP_REQUEST_HEADERS"
  },
  "logName": "projects/123456789/logs/networkactions.googleapis.com%2Fwasm_plugin_activity",
  "trace": "projects/123456789/traces/effc0311-6716-431b-9e2a-7586835fdff1",
  "receiveTimestamp": "2023-05-10T03:05:44.207265284Z"
}
相关的 Media CDN 日志条目如下所示。两条日志消息中的 requestId 和 trace 值相同。
{
  "insertId": "6c95cc54-0000-26ba-ba73-f403043c328c@a1",
  "jsonPayload": {
    "cacheMode": "USE_ORIGIN_HEADERS",
    "@type": "type.googleapis.com/google.cloud.edgecache.v1.EdgeCacheLogEntry",
        "serviceExtensionInfo": [
      {
        "serviceExtension": "projects/123456789/locations/global/cdnEdgeExtensions/my-cdn-edge-extension",
        "chain": "edge-plugin-chain",
        "extension": "auth-and-header-plugin",
        "grpcStatus": "OK",
        "processingRequests": [
          {
            "eventType": "RESPONSE_HEADERS",
            "processingEffect": "CONTENT_MODIFIED"
          }
        ]
      }
    ],
    "cacheKeyFingerprint": "f04d02bb12f2e79e",
    "proxyStatus": "Google-Edge-Cache",
    "clientCity": "Erlangen",
    "clientAsn": "8881",
    "origin": "example-origin",
    "cacheId": "ber",
    "tlsVersion": "NONE",
    "latency": "0.002840304s",
    "originIp": "142.250.145.128",
    "requestId": "effc0311-6716-431b-9e2a-7586835fdff1",
    "clientRegionCode": "DE",
    "originalRequestId": "7656c418-df7c-4ae5-9db5-4f247ec5a82c",
    "httpTtfb": "0.002814903s",
    "metroIataCode": "BER",
    "proxyRegionCode": "DE",
    "cacheStatus": "hit"
  },
  "httpRequest": {
    "requestMethod": "GET",
    "requestUrl": "https://example.com/image.jpg",
    "requestSize": "1631",
    "status": "200",
    "responseSize": "402907",
    "userAgent": "Wtrace",
    "remoteIp": "2001:1438:1:19::5",
    "protocol": "HTTP/1.1"
  },
  "resource": {
    "type": "edgecache.googleapis.com/EdgeCacheRouteRule",
    "labels": {
      "location": "global",
      "route_destination": "projects/123456789/locations/global/edgeCacheOrigins/example-origin",
      "matched_path": "/turing/",
      "route_type": "ORIGIN",
      "path_matcher_name": "routes",
      "resource_container": "projects/123456789",
      "service_name": "example-service"
    }
  },
  "timestamp": "2023-05-10T03:05:43.321347304Z",
  "logName": "projects/bdn-prober/logs/edgecache.googleapis.com%2Fedge_cache_request",
  "trace": "projects/1069774196212/traces/effc0311-6716-431b-9e2a-7586835fdff1",
  "receiveTimestamp": "2023-05-10T03:05:49.919781008Z"
}

限制

插件最多只能为每个客户端 HTTP 请求记录 16 KiB 的载荷数据。此数量会分摊到与给定 HTTP 请求关联的多个日志记录调用中。此限制仅适用于日志消息文本,不适用于 Service Extensions 添加到日志记录中的其他元数据。

例如,如果 on_http_request_headers 回调发出两个日志消息调用,每个调用包含 4 KiB 消息,然后 on_http_response_headers 回调尝试针对同一 HTTP 请求发出三个日志消息调用,每个调用包含 4 KiB 消息,则第五个日志消息会被丢弃。系统会添加一条日志消息,以记录丢弃的插件生成的日志消息数量。

监控

本部分介绍如何使用 Cloud Monitoring 信息中心查看媒体 CDN 插件的 Service Extensions 指标。

如需详细了解 Service Extensions 指标类型,请参阅 Google Cloud 指标页面。

查看 Service Extensions 的 Monitoring 信息中心

如需查看 Service Extensions 的监控信息中心,请执行以下操作:

  1. 在 Google Cloud 控制台中,前往 Service Extensions 页面。

    前往 Service Extensions

  2. 点击插件标签页。
  3. 点击插件名称。
  4. 在插件详情页面上,点击监控标签页。
  5. 在监控页面上,指标图表会显示可帮助您监控插件性能的信息。

  6. 如需查看插件生命周期操作的指标,请从操作过滤条件列表中选择值。默认情况下,系统会选择值 HTTP request header 和 HTTP response header。
  7. 如需查看特定插件版本的指标,请从插件版本过滤条件列表中选择一个值。默认情况下,系统会显示所有版本的指标。
  8. 如需更改要查看数据的时间段,请从时间选择器中选择一个预定义时间段,或点击自定义并指定开始时间和结束时间。默认情况下,选择器设置为 1 day。

Service Extensions 的插件指标

您可以从 Service Extensions 的角度监控插件的以下指标。这些指标的前缀为 networkactions.googleapis.com/wasm_plugin/。表中的条目省略了该前缀。

指标类型 显示名称
种类、类型、单位
说明
invocation_count Wasm 插件调用次数
DELTA、INT64、1
所选时间段内插件的调用次数。每次插件回调调用都算作一次单独的插件调用。
invocation_latencies Wasm 插件调用延迟时间
DELTA、DISTRIBUTION、us
插件的本地执行时间(以毫秒为单位)。该指标包含每个回调的标签分隔条目。
cpu/usage_times Wasm 插件归一化 CPU 使用率
DELTA、DISTRIBUTION、us{CPU}
插件调用的 CPU 使用时间(以微秒为单位)。
memory/bytes_used Wasm 插件内存用量
GAUGE、DISTRIBUTION、By
Wasm 插件虚拟机分配的总内存(以字节为单位)。

Media CDN 的服务扩展监控指标

您可以在 Monitoring Metrics Explorer 中从 EdgeCacheService 角度监控 Media CDN 边缘扩展程序:

  1. 在 Google Cloud 控制台中,前往 Metrics Explorer 页面。

    转到 Metrics Explorer

  2. 选择 Media CDN Service Extension 受监控的资源。

  3. 选择扩展程序指标类别。

  4. 按设置为插件名称的 extension_service 标签进行过滤。

在预览版中,您可以监控媒体 CDN 上的扩展程序的以下指标。这些指标的前缀为 networkactions.googleapis.com。 下表中的条目省略了该前缀。

下表提供了每个指标的指标类型、显示名称、种类、类型、单位和说明。

指标类型 显示名称
种类、类型、单位
说明
extension/invocation_count 扩展程序调用次数
DELTA、INT64、1
发送到扩展程序的调用次数。
extension/invocation_latencies 扩展程序调用延迟时间
DELTA、DISTRIBUTION、ms
根据每次扩展程序调用的延迟时间计算出的分布。 仅适用于标注扩展程序;插件不支持此字段。
extension/sent_chunks_count 扩展程序发送的块数
DELTA、INT64、1
仅适用于 request_body 和 response_body 事件。 发送到扩展程序的数据块数量。
extension/received_chunks_count 扩展程序收到的分块数
DELTA、INT64、1
仅适用于 request_body 和 response_body 事件。 从扩展程序收到的块数量。
extension/failed_open_count 扩展程序调用失败(故障开放)
DELTA、INT64、1
当系统配置为故障开放且允许请求继续时,调用失败的次数。
extension/mutation_rejections_count 扩展程序变更拒绝次数
DELTA、INT64、1
请求标头、正文或尾部变更但被拒绝的调用次数。拒绝可能由于多种原因而发生,例如变更无效或超出大小限制。
extension/sent_bytes_count 扩展程序发送的字节数
DELTA、INT64、By
发送到扩展程序的字节数。
extension/received_bytes_count 扩展程序收到的字节数
DELTA、INT64、By
从扩展程序收到的字节数。