应用负载平衡器和 Cloud CDN 插件的日志记录和监控

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

日志记录

本部分介绍了应用负载平衡器插件的日志记录。可以从插件角度和负载均衡器角度进行日志记录。

日志消息

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

插件日志记录会添加以下上下文信息注释:

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

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

  • 插件日志消息

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

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

  • Cloud Load Balancing 日志消息

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

从插件的角度记录日志

本部分从插件的角度介绍了 Service Extensions 日志记录。

为插件启用日志记录

Service Extensions 支持在插件执行期间生成日志消息。日志记录功能默认处于停用状态。

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

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

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

替换以下内容:

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

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

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

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

查看插件的日志消息

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

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

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

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

插件日志示例

假设有一个 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.networkservices.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": "networkservices.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": {
    "networkservices.googleapis.com/operation": "HTTP_REQUEST_HEADERS"
  },
  "logName": "projects/123456789/logs/networkservices.googleapis.com%2Fwasm_plugin_activity",
  "trace": "projects/123456789/traces/effc0311-6716-431b-9e2a-7586835fdff1",
  "receiveTimestamp": "2023-05-10T03:05:44.207265284Z"
}

日志记录限制

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

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

从负载均衡器的角度记录日志

本部分从负载平衡器的角度介绍 Service Extensions 日志记录。

在后端服务上启用日志记录

您可以在创建服务时为应用负载平衡器插件启用日志记录功能,方法是为请求的目标后端服务启用日志记录功能。

如需为目标后端服务启用日志记录,请使用 gcloud compute backend-services update 命令

gcloud compute backend-services update BACKEND_SERVICE \
    --enable-logging \
    --logging-sample-rate=RATE \
    --region=REGION \
    --logging-optional=LOGGING_OPTIONAL_MODE \
    --logging-optional-fields=OPTIONAL_FIELDS

替换以下内容:

  • BACKEND_SERVICE:后端服务的名称
  • RATE:介于 0.01.0 之间的值,其中 0.0 表示不在日志中记录任何请求,1.0 表示在日志中记录所有请求。默认值为 1.0。 此设置仅在与 enable-logging 参数搭配使用时有效。如果您省略 enable-logging,则系统会停用日志记录功能。
  • REGION:后端的区域
  • LOGGING_OPTIONAL_MODE:启用以下模式之一的可选字段的日志记录:

    • INCLUDE_ALL_OPTIONAL 包含所有可选字段。
    • EXCLUDE_ALL_OPTIONAL(默认值):排除所有可选字段。
    • CUSTOM 包含可选字段的自定义列表。
  • OPTIONAL_FIELDS:选择 CUSTOM 模式时可选字段的英文逗号分隔列表

为后端服务启用日志记录功能后,HTTP 或 HTTPS 请求会通过 Cloud Logging 记录到日志中。

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

后端服务的日志消息

一般来说,应用负载平衡器日志条目包含对监控和调试 HTTP 或 HTTPS 流量有用的信息。日志条目包含以下类型的信息:

  • 大多数 Google Cloud 日志中显示的信息,例如严重性、项目 ID、项目编号和时间戳,如 LogEntry 日志中所述。
  • HttpRequest 日志字段。

HTTP 和 HTTPS 载荷均衡器的请求日志在载荷均衡器日志条目 JSON 载荷中包含一个 service_extension_info 对象,其中包含以下信息:

字段 类型 说明
backend_target_name 字符串 扩展程序的后端目标的名称。
backend_target_type 字符串 后端目标的类型。
chain 字符串 服务扩展程序资源中与请求匹配的扩展程序链的名称。
extension 字符串 扩展程序链中扩展程序的名称。
failed_open 布尔值 当扩展程序配置的 failOpen 设置为 true 时,此指标的值 true 表示在扩展程序超时或失败时,处理仍在继续。

仅适用于区域级外部应用负载平衡器、区域级内部应用负载平衡器和跨区域内部应用负载平衡器。

grpc_status 枚举 gRPC 流的最新状态。如需了解详情,请参阅 gRPC 状态代码
per_processing_request_info 数组 ext_proc 扩展程序的 ProcessingRequest 统计信息或通过 gRPC 流发生的 ext_authz 扩展程序的 CheckRequest 统计信息列表。
per_processing_request_info[].event_type 枚举 ProcessingRequest 的事件类型。可以是以下值之一:REQUEST_HEADERSREQUEST_BODYRESPONSE_HEADERSRESPONSE_BODY
per_processing_request_info[].latency 时长 从向扩展程序发送 ProcessingRequest 消息的第一个字节开始,直到收到 ProcessingResponse 消息的最后一个字节为止,这段时间的长短。
per_processing_request_info[].processing_effect 枚举 处理请求中每个事件的处理结果。

仅适用于区域级外部应用负载平衡器、区域级内部应用负载平衡器和跨区域内部应用负载平衡器。

可以是下列值之一:

  • NONE:表示内容未发生更改。
  • NONE_FAILED_OPEN:表示由于扩展程序打开失败,因此未执行任何变更。
  • CONTENT_MODIFIED:表示内容已通过成功应用突变请求而发生更改。
  • IMMEDIATE_RESPONSE:表示扩展程序已发送立即响应,以停止所有进一步处理。
  • MUTATION_REJECTED:表示扩展程序请求了至少一项不允许的更改,因此后续处理已停止。系统会记录相应的错误消息。
  • UNSPECIFIED:表示处理效果未知。
per_processing_request_info[].processing_effect_details 字符串 processing_effectMUTATION_REJECTED 时,有关突变被拒绝的原因的详细信息。

仅适用于区域级外部应用负载平衡器、区域级内部应用负载平衡器和跨区域内部应用负载平衡器。

resource 字符串 扩展资源名称

监控

本部分介绍了如何使用 Cloud Monitoring 信息中心查看使用 Service Extensions 配置的应用负载平衡器插件的指标。您可以从插件角度或负载均衡器角度监控插件。

从插件的角度进行监控

本部分从插件的角度介绍了 Service Extensions 监控。

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

查看 Service Extensions 的监控信息中心

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

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

    前往 Service Extensions

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

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

Service Extensions 的插件指标

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

指标类型 显示名称
种类、类型、单位
说明
invocation_count Wasm 插件调用次数
DELTAINT641
所选时间跨度内插件的调用次数。每次插件回调调用都算作一次单独的插件调用。
invocation_latencies Wasm 插件调用延迟时间
DELTADISTRIBUTIONus
插件的本地执行时间(以毫秒为单位)。 相应指标包含每个回调的标签分隔条目。
cpu/usage_times Wasm 插件的标准化 CPU 使用情况
DELTADISTRIBUTIONus{CPU}
插件调用的 CPU 使用时间,以微秒为单位。
memory/bytes_used Wasm 插件内存用量
GAUGEDISTRIBUTIONBy
Wasm 插件虚拟机分配的总内存(以字节为单位)。

从负载均衡器的角度进行监控

本部分从负载均衡器的角度介绍了插件的 Service Extensions 监控。

查看 Cloud Load Balancing 的监控信息中心

应用负载平衡器会将监控数据导出到 Cloud Monitoring

监控指标适用于以下用途:

  • 评估负载平衡器的配置、使用情况和性能
  • 问题排查
  • 提高资源利用率并改善用户体验

如需查看预定义的信息中心,请按以下步骤操作:

  1. 在 Google Cloud 控制台中,前往信息中心概览页面。

    前往信息中心概览

  2. 类别部分中,点击 GCP
    • 如需查看所有负载平衡器的信息中心列表,请在 GCP 信息中心列表中点击名为 Google Cloud 负载平衡器的信息中心。 如需查看特定负载均衡器的信息中心,请在列表中找到该负载均衡器,然后点击其名称。
    • 如需仅查看负载平衡器的预定义信息中心,请选择相应的信息中心。

除了 Monitoring 中的预定义信息中心,您还可以通过 Cloud Monitoring API 创建自定义信息中心、设置提醒和查询指标。

Cloud Load Balancing 的插件指标

您可以从 Cloud Load Balancing 的角度监控插件的以下指标。

预览版中,您可以监控区域级外部应用负载平衡器、区域级内部应用负载平衡器和跨区域内部应用负载平衡器上扩展程序的以下指标。这些指标的前缀为 networkservices.googleapis.com。下表中的条目省略了此前缀。

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

指标类型 显示名称
种类、类型、单位
说明
extension/invocation_count 扩展程序调用次数
DELTAINT641
发送到扩展程序的调用次数。
extension/invocation_latencies 扩展程序调用延迟时间
DELTADISTRIBUTIONms
根据每次扩展程序调用的延迟时间计算出的分布。
extension/sent_chunks_count 扩展程序发送的块数量
DELTAINT641
仅适用于 request_bodyresponse_body 事件。 发送给扩展程序的数据块数量。
extension/received_chunks_count 扩展程序接收到的块数
DELTAINT641
仅适用于 request_bodyresponse_body 事件。 从扩展程序收到的块数。
extension/failed_open_count 扩展程序在故障开放模式下调用失败的次数
DELTAINT641
系统配置为故障开放模式且允许请求继续时,调用失败的次数。
extension/mutation_rejections_count 扩展程序变更拒绝次数
DELTAINT641
请求标头、正文或尾部变更但遭到拒绝的调用次数。拒绝可能由多种原因导致,例如变更是无效的或超出大小限制。
extension/sent_bytes_count 扩展程序发送的字节数
DELTAINT64By
发送到扩展程序的字节数。
extension/received_bytes_count 扩展程序接收的字节数
DELTAINT64By
从扩展程序接收的字节数。

您还可以监控以下指标。这些指标的前缀为 loadbalancing.googleapis.com/。表中的条目省略了该前缀。

指标类型 显示名称
种类、类型、单位
说明
https/backend_request_count
https/external/regional/backend_request_count
https/internal/backend_request_count
后端请求数
DELTAINT641
插件从应用负载平衡器调用的次数。
https/backend_request_bytes_count
https/external/regional/backend_request_bytes_count
https/internal/backend_request_bytes_count
后端请求字节数
DELTAINT64By
从负载均衡器发送到插件的字节数。
https/backend_response_bytes_count
https/external/regional/backend_response_bytes_count
https/internal/backend_response_bytes_count
后端响应字节数
DELTAINT64By
负载均衡器从扩展后端接收的字节数。

查看插件指标

如需查看特定插件的指标,请执行以下操作:

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

    转到 Metrics Explorer

  2. 指标元素中,展开选择指标菜单。然后,执行以下操作:

    1. 从资源列表中选择相应的应用负载平衡器规则。

    2. 从指标类别列表中,选择 Https

    3. 从指标列表中,选择一个插件指标

    4. 点击应用

  3. 过滤条件元素中,执行以下操作:

    1. 选择 backend_target_type 标签,并将值设置为 WASM_PLUGIN

    2. 选择 backend_target_name 标签,并将插件名称设置为值。

如需详细了解负载均衡器指标类型,请参阅 Google Cloud 指标页面中的loadbalancing 部分。